我面临着一个使我的数据符合函数的主要问题。为了解释这个任务,这里有一个早期拟合版本的数据图表:
似乎需要至少10个声誉来发布图片,所以这是图片链接... ---> Picture in here <---
绿线是拟合的区域中的拟合函数,红线是相同的函数外推,以查看它将去往何处。 x> 0的最后一位与拟合无关,可以忽略。重要的只是S曲线和两侧的两个斜坡。
我使用python和curve_fit来适应这些功能。 我现在要做的是适合这样的功能:
f(x) = s*g(x) + t*(1-h(x))
使用:
g(x) = (m1*x + n1) / (1-10^(a1*x - b1))
h(x) = (m2*x + n2) / (1-10^(-a2*x - b2))
但是由于这个函数总共有10个变量,所以非常不稳定。 现在我通常使用curve_fit来拟合它:
def function(x, a1, a2, b1, b1, m1, m2, n1, n2, s, t):
g = (m1*x + n1) / (1-10^(a1*x - b1))
h = (m2*x + n2) / (1-10^(-a2*x - b2))
f = s*g + t*(1-h)
return f
...
popt, pcov = curve_fit(function, xdata, ydata, maxfev=100000)
现在我的实际问题是:是否可以单独使用这些功能? 例如:
1: fit left slope. m1*x + n1
2: fit right slope. m2*x + n2
3: fit g(x) according to the pre-fitted slopes
4: fit h(x) according to the pre-fitted slopes
5: fit f(x)
输入这个,我只想到了某种递归,但我不知道如何将一步的预定参数传递到下一步并保持固定,使得curve_fit每次只需要适合很少的变量
我非常感谢对这个问题的任何帮助。也许有人甚至知道一种完全不同的方法,或者我可以做得更好。