python:时间序列谐波拟合与残差分析(利用最小二乘法确定模型参数)

作者:CSDN @ _养乐多_

在科学研究中,经常需要对实验数据进行拟合,以找出其中的规律。本文介绍了如何使用Python中的NumPy、Matplotlib和SciPy库进行谐波拟合,并对拟合结果进行残差分析。

从下图可以看出,谐波拟合曲线(红色线)很好地拟合了原始数据(蓝色线),表明所选择的谐波拟合函数能够很好地描述数据的变化趋势。
残差序列(绿色线)在零线附近波动,说明拟合效果较好,残差没有明显的系统性偏差。
在这里插入图片描述


文章目录

      • 一、谐波拟合
          • 1.1 谐波拟合
          • 1.2 最小二乘法
          • 1.3 最小二乘法给谐波拟合确定参数的步骤
      • 二、完整代码


一、谐波拟合

1.1 谐波拟合

谐波拟合是一种拟合方法,用于拟合具有周期性结构的数据。在谐波拟合中,我们假设观测数据可以由一个或多个谐波函数的线性组合来描述。谐波函数是正弦或余弦函数,其周期性特征使得它们适合拟合周期性数据,比如周期性信号或周期性震动。

谐波拟合的公式通常是一个或多个谐波函数的线性组合。对于单个谐波函数,其一般形式可以表示为:

f ( x ) = A s i n ( 2 π ω x + ϕ ) + C f(x)=Asin(2πωx+ϕ)+C f(x)=Asin(2πωx+ϕ)+C

其中:

  • A 是振幅(Amplitude)

  • ω 是角频率(Angular frequency),与周期 T 之间的关系是 ω=2π​ \ T

  • ϕ 是相位(Phase)

  • C 是偏移(Offset)

多个谐波函数的线性组合可以通过对单个谐波函数的形式进行叠加得到。

例如,如果我们要拟合两个谐波函数的线性组合,则谐波拟合的公式可以表示为:

f ( x ) = A 1 ​ s i n ( 2 π ω 1 ​ x + ϕ 1 ​ ) + A 2 ​ s i n ( 2 π ω 2 ​ x + ϕ 2 ​ ) + C f(x)=A1​sin(2πω1​x+ϕ1​)+A2​sin(2πω2​x+ϕ2​)+C f(x)=A1​sin(2πω1​x+ϕ1​)+A2​sin(2πω2​x+ϕ2​)+C

其中 A1、A2、ω1、ω2、ϕ1、ϕ1、C 分别是两个谐波函数的振幅、角频率、相位和偏移,拟合过程就是通过最小二乘法来确定这些参数的值,使得拟合曲线与实际观测数据的残差的平方和最小化。

1.2 最小二乘法

最小二乘法是一种常用的参数估计方法,用于找到一组参数,使得拟合曲线与观测数据的残差的平方和最小化。在谐波拟合中,最小二乘法用于确定谐波函数的振幅、周期、相位和偏移等参数,以使谐波拟合曲线与观测数据的差异最小化。

1.3 最小二乘法给谐波拟合确定参数的步骤

步骤如下:

  1. 定义谐波拟合函数:首先,需要定义一个谐波拟合函数,其形式通常是一个或多个谐波函数的线性组合。这个函数的参数包括谐波函数的振幅、周期、相位和偏移等参数。

  2. 构造示例数据:准备需要拟合的实际观测数据,这些数据可能具有周期性结构。

  3. 初始化参数估计值:为谐波拟合函数的参数提供一个初始估计值,这些估计值可以根据数据的特点和先验知识来确定。

  4. 使用最小二乘法进行拟合:调用最小二乘法的算法,如 scipy.optimize.curve_fit,将谐波拟合函数、实际数据和初始参数估计值作为输入,通过最小化残差的平方和来确定参数的最优值。

  5. 获取拟合参数:最小二乘法确定参数后,将得到谐波拟合函数的振幅、周期、相位和偏移等参数。

  6. 绘制拟合曲线:使用得到的参数值,将谐波拟合函数应用于原始数据,绘制拟合曲线。

通过这些步骤,最小二乘法可以帮助我们找到最优的参数值,从而得到最佳的谐波拟合结果,使得拟合曲线与实际观测数据的拟合效果最好。

二、完整代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 定义谐波拟合函数
def harmonic_fit(x, amplitude, period, phase, offset):
    """谐波拟合函数"""
    return amplitude * np.sin(2 * np.pi * x / period + phase) + offset

# 构造示例数据
x_data = np.linspace(0, 10, 100)
y_data = 5 * np.sin(2 * np.pi * x_data / 3 + np.pi / 4) + 2 + np.random.normal(0, 0.5, 100)

# 进行谐波拟合
initial_guess = [1, 3, np.pi / 4, 0]  # 初始参数估计值
params, covariance = curve_fit(harmonic_fit, x_data, y_data, p0=initial_guess)

# 计算谐波拟合曲线和残差序列
fit_curve = harmonic_fit(x_data, *params)
residuals = y_data - fit_curve

# 绘图
plt.figure(figsize=(8, 6))

# 绘制原始数据和谐波拟合曲线
plt.subplot(211)  # 上半部分绘制原始数据和谐波拟合曲线
plt.plot(x_data, y_data, label='原始数据', color='blue')
plt.plot(x_data, fit_curve, label='谐波拟合', color='red')
plt.xlabel('时间')
plt.ylabel('幅值')
plt.title('原始数据与谐波拟合曲线')
plt.legend()

# 绘制残差序列
plt.subplot(212)  # 下半部分绘制残差序列
plt.plot(x_data, residuals, label='残差序列', color='green')
plt.xlabel('时间')
plt.ylabel('残差')
plt.title('残差序列')
plt.legend()

plt.tight_layout()  # 自动调整子图间距
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414342.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python算法100例-2.6 分糖果

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.运行结果 1.问题描述 10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块&…

C#,弗洛伊德-瑞文斯特(Floyd-Rivest)算法与源代码

Robert W. Floyd 1 Floyd-Rivest 算法 Floyd-Rivest 算法是一种选择算法,用于在不同元素的数组中找到第k个最小元素。它类似于快速选择算法,但在实际运行中有更好的运行时间。 和 QuickSelect 一样,该算法基于分区的思想工作。对数组进行分…

istio学习记录——VirtualService详解

上一篇使用VirtualService进行了简单的流量控制,并通过Gateway将流量导入到了集群内。这一篇将更加深入的介绍 VirtualService。 k8s中有service,service能够对流量进行负载均衡,那为什么istio又引入了VirtualService呢,因为serv…

最新IE跳转Edge浏览器解决办法(2024.2.26)

最新IE跳转Edge浏览器解决办法(2024.2.26) 1. IE跳转原因1.1. 原先解决办法1.2. 最新解决办法1.3. 最后 1. IE跳转原因 关于IE跳转问题是由于在2023年2月14日,微软正式告别IE浏览器,导致很多使用Windows10系统的电脑在打开IE浏览…

300分钟吃透分布式缓存-17讲:如何理解、选择并使用Redis的核心数据类型?

Redis 数据类型 首先,来看一下 Redis 的核心数据类型。Redis 有 8 种核心数据类型,分别是 : & string 字符串类型; & list 列表类型; & set 集合类型; & sorted set 有序集合类型&…

多线程与高并发(1)- 线程基础、并发特性、锁、JUC工具

文章目录 第一章、线程基础知识一、基础概念1、什么是程序?2、什么是进程?3、什么是线程?4、什么是线程的切换(Context Switch)?5、单核CPU 设定多线程是否有意义?6、工作线程数是不是设置的越大…

【Linux】部署单机项目(自动化启动)---(图文并茂详细讲解)

目录 一 准备工作 1.1 连接服务器拷贝文件 1.2 解压 二 JDK安装 2.1 配置坏境变量 2.2 查看版本 三 Tomcat(自启动) 3.1 复制启动命令的位置 3.2 添加命令相关配置文件 3.2.1 配置jdk及tomcat目录 3.2.2 添加优先级 3.3 设置自启动命令 3.4 开放端口 四 My…

行业交流 | “建筑工业化—创新型建筑技术的应用”主题沙龙

11月9日下午,由环同济知识经济圈发展推进领导小组办公室指导,上海市杨浦区科委、同济科技园核心园、同济EMBA设计协会联合主办,环同济发展促进会协办的“建筑工业化——创新型建筑技术的应用”主题沙龙在我园区顺利举办。优积建筑科技发展(上…

32单片机基础:TIM定时中断

STM32中功能最强大,结构最复杂的一个外设——定时器 因为定时器的内容很多,所以本大节总共分为4个部分,8小节。 第一部分:主要讲定时器基本的定时功能,也就是定一个时间,然后让定时器每隔这个时间产生一个中断&#…

鸿蒙ArkTs开发WebView问题总结

1. 加载WebView页面报错"Can not read properties of null (reading getltem)" 解决: 在加载webview的controller中加入.domStorageAccess(true) build() {Column() {Row().width(100%).height(50rpx)Web({ src: src, controller: this.controller }).javaScriptAc…

【2.3深度学习开发任务实例】(1)神经网络模型的特点【大厂AI课学习笔记】

从本章开始,我把标题的顺序变了一下,大厂AI课笔记,放到后面。因为我发现App上,标题无法显示完全。 从本章开始,要学习深度学习开发任务的全部过程了。 我们将通过小汽车识别赛道上的标志牌,给出检测框&am…

Leetcoder Day25| 回溯part05:子集+排列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入:[4, 7, 6, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [6, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数…

Camtasia 2023 v23.4.2.51146 (x64) 中文激活授权版(附安装教程+激活补丁) 喀秋莎(屏幕录制剪辑) 常用快捷键

目录 功能特性 常用快捷键 一、关于文件设置 二、关于编辑设置 三、关于视图设置 四、关于录制设置 破解说明 Camtasia 2023免费版是一款由TechSmith公司官方进行汉化推出的最新版本,该软件集屏幕录制和视频剪辑功能于一体的软件,提供屏幕录制、区域录…

Maya笔记 设置工作目录

Maya会把素材场景等自动保存在工作目录里,我们可以自己定义工作目录 步骤1 创建workspace.mel文件 文件/设置项目 ——>选择一个文件夹,点击设置——>创建默认工作区 这一个后,可以在文件夹里看到.mel文件 步骤2 自动创建文件夹…

Groovy(第九节) Groovy 之单元测试

JUnit 利用 Java 对 Song 类进行单元测试 默认情况下 Groovy 编译的类属性是私有的,所以不能直接在 Java 中访问它们,必须像下面这样使用 setter: 编写这个测试用例余下的代码就是小菜一碟了。测试用例很好地演示了这样一点:用 Groovy 所做的一切都可以轻易地在 Java 程序…

使用 Debezium 和 RisingWave 对 MongoDB 进行持续分析

MongoDB 和流式 Join 的挑战 谷歌趋势显示,有关 MongoDB 流式计算的搜索率不断上升 作为一种操作型数据库,MongoDB 在提供快速数据操作和查询性能方面表现十分出色。然而,在维护实时视图或执行流处理任务的内置支持方面,它确实存…

uni-app之android原生插件开发

官网 uni小程序SDK 一 插件简介 1.1 当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,可使用App离线SDK开发原生插件来扩展原生能力。 1.2 插件类型有两种,Module模式和Component模式 Module模式&…

51单片机 wifi连接

一、基本概念 ESP8266是一款集成了WiFi功能的高性能芯片,广泛应用于物联网设备、智能家居、传感器网络等领域。以下是ESP8266的详细讲解: 1. 功能特点:ESP8266集成了TCP/IP协议栈,支持STA(Station)和AP&am…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(八)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型,由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”(そら sora),即天空之意,以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

虚拟机安装+固定ip地址

一、下载CentOS 二、安装CentOS 1、打开你的VMware Workstation Pro,并点击“创建新的虚拟机” 2、点选典型(推荐)(T),并点击“下一步” 3、点选稍后安装操作系统(S),并点击“下一步” 4、点选Linux,并点击“下一步” 6、点击“…