如何从系数列表中建立多项式lambda函数?

2024-07-05 09:03:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对应于多项式表达式的系数列表,即:[1,2,0]对应于x^2 + 2x + 0。 我想把这些系数的任意长度数组放入一个lambda函数中。在

具体来说,我使用的是mpmath,我有一个用于polyval module的列表,即:

polyval(ctx, coeffs, x, derivative=False)

给定系数和一个数,polyval()计算多项式。在

我需要使用findroot module 这需要一个一维函数,即:

^{pr2}$

我如何从系数列表中构造lambda函数?在


Tags: lambda函数false列表表达式数组modulectx
3条回答

如果您真的需要lambda表达式,我可以想到的最简单的方法是使用reduce()

coeffs = [1, 2, 0]
f = lambda x: reduce(lambda y, a: x*y + a, coeffs, 0.0)
findroot(f, 2)

因为它也被标记为numpy,所以您也可以使用numpy.poly1d

^{pr2}$

你真的需要一个lambda函数吗?使用“正常”功能应该更容易:

def poly(coeffs):
   def calc(x):
      result = 0
      for c in coeffs:
         result = result*x + c
      return result
   return calc

findroot(poly([1,2,0]))

使用您提到的polyval()函数,应该可以这样做:

^{pr2}$

(对于适当的ctx值)

sth基于polyval()的方法看起来是最好的答案(因为您已经可以访问该函数),但是如果您想实现自己的等效函数,那么该函数看起来更像:

def poly(coeffs):
  def calc(x)
    result = 0
    for i,c in enumerate(reversed(coeffs)):
      result += c*(x**i)
    return result
  return calc

findroot(poly([1,2,0]))

相关问题 更多 >