我想使用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
它可以将b1
,b2
和b3
设置为1
或0
。当然,另一种可能性是为a(x)
和b(x)
中的每个组合创建单独的函数,但如果我不仅有三个参数和两个函数,而且更多,那么这个函数会快速爆发。或者还有另一种更简单的方法吗?
答案 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)
并解析n1
和n2
。它不会以您想要的形式提供解决方案,但您希望的形式具有无限的等效解决方案空间,并且无法与任何求解器相提并论。