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

问题描述 投票:0回答:2

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

例如如果我提供序列

1,4,9,16
我应该返回
n**2
n^2

python math sequence
2个回答
4
投票

您可以使用 Python 中的

sympy
模块自行编写例程。 (这是一个流行的 Python 第三方模块。)此代码使用拉格朗日多项式 的基本公式,即产生给定序列的最小次数多项式。除了
x
值之外,此代码还允许您定义自己的
y
值:如果您不定义
x
值,此例程将使用
1, 2, ...
。请注意,还有其他方法可以获取此多项式 - 我在链接中使用了维基百科中使用的公式。

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


0
投票

这是个好问题。但在写之前,你需要先了解一个概念。世界上的每个序列都有无穷多个多项式公式。这不像序列只有一个多项式公式。一个奇怪的例子可以帮助你理解它。做: 1 4 9 16 我们都知道它的公式是n**2,但是: https://onlinegdb.com/rhoNgC3bv 你可以看看这个公式是如何打印出来的! 您应该编写一个程序来打印尽可能人性化的图案。我已经写了,但我不会发布它

© www.soinside.com 2019 - 2024. All rights reserved.