我想知道Python(或与此相关的任何一种语言)中是否有一种方法,可以提供数字列表,然后返回最小次数的多项式来生成该数字列表。
例如如果提供序列1,4,9,16
,我应该返回n**2
或n^2
。
答案 0 :(得分:2)
您可以使用Python中的sympy
模块自己编写例程。 (这是用于Python的流行的第三方模块。)此代码使用Lagrange polynomial的基本公式,它是产生给定序列的最小次数的多项式。该代码允许您除了定义x
值之外,还定义自己的y
值:如果不定义x
值,则该例程将使用1, 2, ...
。请注意,还有其他方法可以获取此多项式-我在链接中使用了Wikipedia中使用的公式。
import sympy
x = sympy.symbols('x')
zeropoly = x - x
onepoly = zeropoly + 1
def lagrangepoly(yseq, xseq=None):
"""Build a Lagrange polynomial from a sequence of `y` values.
If no sequence of `x`s is given, use x = 1, 2, ..."""
if xseq is None:
xseq = list(range(1, len(yseq) + 1))
assert len(yseq) == len(xseq)
result = zeropoly
for j, (xj, yj) in enumerate(zip(xseq, yseq)):
# Build the j'th base polynomial
polyj = onepoly
for m, xm in enumerate(xseq):
if m != j:
polyj *= (x - xm) / (xj - xm)
# Add in the j'th polynomial
result += yj * polyj
return sympy.expand(result)
通过该例程,执行print(lagrangepoly([1, 4, 9, 16]))
可获得打印输出
x**2
Python表示法中的x^2
。