使用Scipy将一组数据点拟合到任意曲线时出现问题

时间:2019-07-01 10:32:18

标签: python numpy optimization scipy

我有一组数据点,根据我要实现的模型,可以用特定曲线(在这种情况下,是指数函数和互补误差函数之间的乘积)来建模。

为了将这些数据拟合到这样的曲线中,我尝试过:

import numpy as np
from scipy.optimize import curve_fit
from scipy import special

x_fit = np.linspace(0,1,1000)
def fitted_function(x_fit, c, d, S):
    return c*np.exp(((S*d/2)**2)-x_fit*d)*special.erfc(S*d/2-x_fit/S)
FitParameters, FitCovariance = curve_fit(fitted_function, x_data, y_data, maxfev = 100000)

它没有给我任何特别的错误,但是拟合的结果显然是错误的。我强烈怀疑这与部分x_fit/S有关,其中拟合参数S作为分母出现。

例如,在拟合一个简单的指数时遇到了相同的问题:如果我用以下方式定义拟合曲线

    return a*np.exp(-x_fit/b)

具有ab个拟合参数;由于拟合参数b显示为分母,因此我发现了相同的问题(即由于某种原因,所得拟合曲线为一条水平线)。 对于简单的指数,我可以通过这样做简单地绕过

    return a*np.exp(-b*x_fit)

使得b不再是分母,并且拟合曲线实际上是指数曲线。对于我目前的情况,我无法执行此操作,因为S在表达式的不同部分出现了一个分子和一个分母。 有任何想法吗?预先谢谢你!

0 个答案:

没有答案