Python中6个变量的复杂函数的序贯曲线拟合

时间:2014-12-07 12:29:18

标签: python recursion lambda curve-fitting sequential

我面临着一个使我的数据符合函数的主要问题。为了解释这个任务,这里有一个早期拟合版本的数据图表:

似乎需要至少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每次只需要适合很少的变量

我非常感谢对这个问题的任何帮助。也许有人甚至知道一种完全不同的方法,或者我可以做得更好。

0 个答案:

没有答案