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()

示例输出