查找数字序列的多项式公式

时间:2019-06-30 11:51:29

标签: python math sequence

我想知道Python(或与此相关的任何一种语言)中是否有一种方法,可以提供数字列表,然后返回最小次数的多项式来生成该数字列表。

例如如果提供序列1,4,9,16,我应该返回n**2n^2

1 个答案:

答案 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