有没有办法根据具有任意数量因变量的函数构造一个lmfit模型?例如:
from lmfit import Model
def my_poly(x, *params):
func = 0
for i in range(len(params)):
func+= params[i]*z**i
return func
#note: below does not work
my_model = Model(my_poly, independent_vars = ['x'], param_names = ['A','B','C'])
如果我对多项式系列感兴趣并希望在系列增长或缩小时测试性能,那么类似于上面的内容将是很棒的。
答案 0 :(得分:3)
由于Model()
使用函数参数名称来构建参数名称,因此使用*params
将无法轻松工作(如何称呼它们A
,B
,{ {1}},而不是C
,coeff0
,coeff1
或其他什么?)。
我不知道可以支持真正的任意数,但是应该可以做很大的数字。多项式模型(参见http://lmfit.github.io/lmfit-py/builtin_models.html#polynomialmodel和https://github.com/lmfit/lmfit-py/blob/master/lmfit/models.py#L126实现)最多支持7个系数。将它扩展到更大的数字应该没有问题。它可能很容易导致计算问题,但我认为这是你期望探索的内容。
如果您愿意进行一些小改动, 可能会做出类似于您正在寻找的事情。这使用关键字参数而不是位置参数,并依赖于参数名称顺序(即coeff2
)来指示哪个系数与指数相关,而不是位置参数的顺序。这可能接近你正在寻找的东西:
sort
希望有所帮助。