使用任意数量的参数创建python lmfit模型

时间:2015-09-03 22:04:59

标签: python curve-fitting polynomials lmfit

有没有办法根据具有任意数量因变量的函数构造一个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'])

如果我对多项式系列感兴趣并希望在系列增长或缩小时测试性能,那么类似于上面的内容将是很棒的。

1 个答案:

答案 0 :(得分:3)

由于Model()使用函数参数名称来构建参数名称,因此使用*params将无法轻松工作(如何称呼它们AB,{ {1}},而不是Ccoeff0coeff1或其他什么?)。

我不知道可以支持真正的任意数,但是应该可以做很大的数字。多项式模型(参见http://lmfit.github.io/lmfit-py/builtin_models.html#polynomialmodelhttps://github.com/lmfit/lmfit-py/blob/master/lmfit/models.py#L126实现)最多支持7个系数。将它扩展到更大的数字应该没有问题。它可能很容易导致计算问题,但我认为这是你期望探索的内容。

如果您愿意进行一些小改动, 可能会做出类似于您正在寻找的事情。这使用关键字参数而不是位置参数,并依赖于参数名称顺序(即coeff2)来指示哪个系数与指数相关,而不是位置参数的顺序。这可能接近你正在寻找的东西:

sort

希望有所帮助。