Scipy 优化曲线拟合与真实数据不正确拟合
Scipy Optimize Curve fit not properly fitting with real data
我正在尝试将衰减指数函数拟合到真实世界的数据中。我在将函数与实际数据对齐时遇到问题。
这是我的代码:
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)
我的信号和拟合函数
我的问题:为什么拟合函数不是在我的数据幅度开始增加的地方开始?
正如我在评论中所说,问题是您的函数没有考虑到指数曲线可以移动。如果将此偏移作为附加参数包括在内,拟合可能会收敛。
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()
示例输出
我正在尝试将衰减指数函数拟合到真实世界的数据中。我在将函数与实际数据对齐时遇到问题。
这是我的代码:
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)
我的信号和拟合函数
我的问题:为什么拟合函数不是在我的数据幅度开始增加的地方开始?
正如我在评论中所说,问题是您的函数没有考虑到指数曲线可以移动。如果将此偏移作为附加参数包括在内,拟合可能会收敛。
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()
示例输出