微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scipy Optimize曲线拟合未正确拟合实际数据

如何解决Scipy Optimize曲线拟合未正确拟合实际数据

我正在尝试将衰减的指数函数拟合到现实世界的数据中。我在将函数与实际数据对齐时遇到问题。

这是我的代码

def test_func(x,a,b,c):
    return a*np.exp(-b*x)*np.sin(c*x)

my_time = np.linspace(0,2.5e-6,25000)
p0 = [60000,700000,2841842]

params,params_covariance = curve_fit(test_func,my_time,my_amp,p0)

我的信号和合适的功能

My signal and fitted function

我的问题:为什么拟合函数不能从我的数据振幅开始增加的地方开始?

解决方法

正如我在评论中说的那样,问题在于您的函数没有考虑指数曲线可以移动的问题。如果将此移位作为附加参数包括在内,则拟合可能会收敛。

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

def test_func(x,a,b,c,d):  
    return a*np.exp(-b*(x+d))*np.sin(c*(x+d))

my_time = np.linspace(0,2.5e-6,25000)

#generate fake data
testp0 = [66372,765189,2841842,-1.23e-7]
test_amp = test_func(my_time,*testp0)
my_amp = test_func(my_time,*testp0)
my_amp[:2222] = my_amp[2222]

p0 = [600,700000,2000,-2e-7]
params,params_covariance = curve_fit(test_func,my_time,test_amp,p0)
print(params)
fit_amp = test_func(my_time,*params)

plt.plot(my_time,my_amp,label="data")
plt.plot(my_time,fit_amp,label="fit")
plt.legend()

plt.show()

样本输出

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。