【问题标题】:Polynomy function with changing number of parameters参数数量变化的多项式函数
【发布时间】:2012-08-16 12:17:24
【问题描述】:

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

目前我有这样的事情:

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

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

【问题讨论】:

    标签: python function dynamic parameters


    【解决方案1】:

    您可以遍历参数并使用Horners method 计算多项式,这非常有效。

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

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

    【讨论】:

    • 查看wikipedia 了解霍纳的方法
    • 根据问题中的签名,您必须还原 args...如果您从 a_n 循环到 a_0,您的算法将有效
    • @TheodrosZelleke 正确。我现在通过添加“reversed”来解决这个问题。
    【解决方案2】:

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

    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))
    

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        【解决方案4】:

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

         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))
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-10
            • 1970-01-01
            相关资源
            最近更新 更多