是否可以(在 Python 中)定义具有不断变化的参数数量的多项式函数?参数数量应根据我输入文件中的数据系列数量而变化。
目前我有这样的事情:
def y(x, a0, x2, x3, x4):
y = a0 + a1*x + a2*x**2 + a3*x**3
return y
我当然可以通过额外的参数将高阶参数设置为零,但会有更好的方法。
是否可以(在 Python 中)定义具有不断变化的参数数量的多项式函数?参数数量应根据我输入文件中的数据系列数量而变化。
目前我有这样的事情:
def y(x, a0, x2, x3, x4):
y = a0 + a1*x + a2*x**2 + a3*x**3
return y
我当然可以通过额外的参数将高阶参数设置为零,但会有更好的方法。
您可以使用Horners 方法遍历参数并评估多项式,这是非常有效的。
def y(x, *args):
y = 0
for a in reversed(args):
y = y*x+a
return y
您可以在此问题中找到有关可变数量参数的更多详细信息。
使用生成器表达式的更简单的版本
def y(x, *args):
return sum(a * x ** i for i, a in enumerate(args))
和使用 reduce 的 Horner 版本
def horn(x, *args):
return reduce(lambda y, a: y * x + a, reversed(args))
def y(x, *args):
y = 0
i = 0
for a in args:
y += a * x ** i
i += 1
return y
print y(2, 1, 2) # 2 * 2 ^ 0 + 2 * 2 ^ 1 = 5
如果您正在处理数据文件并评估多项式,您可能会受益于使用numpy
,其中还包括numpy.polyval
用于评估多项式。
在这种特殊情况下,将多项式作为单个参数提供会更简洁,即系数列表:
def eval_poly(x, poly):
....
eval_poly(10, [1, 2, 3]) # evaluate (1 + 2x + 3x^2)(10)
这样您就可以像处理普通值一样处理多项式,例如:
def add_poly(p1, p2):
"""Add two polynomials together"""
...
p1 = [1,2,3]
p2 = [4,5,6]
print eval_poly(10, add_poly(p1, p2))