2

是否可以(在 Python 中)定义具有不断变化的参数数量的多项式函数?参数数量应根据我输入文件中的数据系列数量而变化。

目前我有这样的事情:

def y(x, a0, x2, x3, x4):
    y = a0 + a1*x + a2*x**2 + a3*x**3
    return y

我当然可以通过额外的参数将高阶参数设置为零,但会有更好的方法。

4

5 回答 5

3

您可以使用Horners 方法遍历参数并评估多项式,这是非常有效的。

def y(x, *args):
  y = 0
  for a in reversed(args):
    y = y*x+a
  return y

您可以在此问题中找到有关可变数量参数的更多详细信息。

于 2012-08-21T07:26:17.067 回答
3

使用生成器表达式的更简单的版本

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))
于 2012-08-21T07:54:21.757 回答
1
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
于 2012-08-21T07:28:55.263 回答
0

如果您正在处理数据文件并评估多项式,您可能会受益于使用numpy,其中还包括numpy.polyval用于评估多项式。

于 2013-09-18T12:10:41.693 回答
0

在这种特殊情况下,将多项式作为单个参数提供会更简洁,即系数列表:

 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))
于 2012-08-21T08:17:09.153 回答