Нахождение полиномиальной формулы для последовательности чисел - PullRequest
0 голосов
/ 30 июня 2019

Мне было интересно, есть ли способ в Python (или любом другом языке в этом отношении), где я могу предоставить список чисел и получить полином наименьшей степени, который приводит к этому списку чисел.

например. Если я поставлю последовательность 1,4,9,16, я должен получить обратно n**2 или n^2.

1 Ответ

2 голосов
/ 30 июня 2019

Вы можете кодировать подпрограмму самостоятельно, используя модуль sympy в Python.(Это популярный сторонний модуль для 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

что составляет x^2 в нотации Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...