为numpy curve_fit

时间:2015-11-24 09:53:48

标签: python numpy curve-fitting

我想使用curve_fit函数在python中拟合数据。为此,我使用的是基本功能

def a(x):
    return x*x

def b(x):
    return x*x*x

并将它们组合成多个函数:

def fit_func(x, n1, n2, n3):
    return n1*a(x)+n2*b(x)+n3*a(x)

现在我想知道是否有办法编写这样的函数:

def fit_multi_func(x, n1, b1, n2, b2, n3, b3):
    tmp = 0
    if(b1 == 1):
        tmp += n1*a(x)
    else:
        tmp += n1*b(x)
    if(b2 == 1):
        tmp += n2*a(x)
    else:
        tmp += n2*b(x)
    if(b3 == 1):
        tmp += n3*a(x)
    else:
        tmp += n3*b(x)

我告诉curve_fit它可以将b1b2b3设置为10。当然,另一种可能性是为a(x)b(x)中的每个组合创建单独的函数,但如果我不仅有三个参数和两个函数,而且更多,那么这个函数会快速爆发。或者还有另一种更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

如上所述,您的数据中没有足够的信息来解决您感兴趣的所有参数。请考虑您拥有的简单案例

n1*a(x) + n2*a(x)

说输入为n1, n2 = (1, 1)。然后,同样有效的输出为n1, n2 = (0, 2)n1, n2 = (-1000000, 1000002)或沿着n1 + n2 = 2行的无数个精确解中的任何其他输出。

这被称为退化模型,最佳前进方式可能是重新表达您的问题,例如: f(x) = n1 * a(x) + n2 * b(x)并解析n1n2。它不会以您想要的形式提供解决方案,但您希望的形式具有无限的等效解决方案空间,并且无法与任何求解器相提并论。