Как получить коэффициенты многочлена в python

#python #numpy #polynomials #coefficients

Вопрос:

Мне нужно создать функцию get_polynom , которая возьмет список кортежей (x1, y1), (x2, y2), ..., (xn, yn) , представляющих точки, и найдет коэффициенты полинома c0, c1, ..., cn .

Мне не удается понять задачу, единственный совет, который у меня есть, — это предоставленная часть функции:

 import numpy as np


def get_polynom(coords):
    ...
    return np.linalg.solve(a, b)
 

Кто-нибудь делал что-то подобное? Просто небольшое объяснение того, что именно ожидается, было бы здорово!

Заранее спасибо!

Ответ №1:

Многочлен — это функция f(x) = cn x^n ... c1 x c0 . С помощью пары кортежей вы получаете n 1 уравнений вида f(xi) = yi для i, переходящих от 1 к n 1. Если вы подставите xi и yi в первое уравнение, вы получите линейную систему из n уравнений с неизвестными cn c0 . Записав это в виде матрицы, вы получите A*C = B .

a Аргумент np.linalg.solve представляет A матрицу, в данном случае «веса» полиномиальных коэффициентов — то есть степени x (например, будет одна строка [xi^n, xi^(n-1), ..., xi, 1] ). b Аргументом будет вектор yi .

Обратите внимание, что если ваш многочлен имеет степень n, вам нужно n 1 кортежей для решения его коэффициентов.

Комментарии:

1. Итак, в принципе, если у меня будет три пары (x, y) , у меня будет три уравнения, каждое из которых будет выглядеть так y = 1 * c0 x * c1 x^2 * c2 x^3 * c3 ?

2. Да, именно так. Просто обратите внимание, что вам нужно число уравнений, равное числу коэффициентов, чтобы иметь возможность решать линейную систему. Так что, если вы получите 3 кортежа, то уравнение будет справедливым y = 1 * c0 x * c1 x^2 * c2 . Я обновляю свой ответ, чтобы отразить это

3. О, ладно, понял. Большое спасибо!

4. В качестве примера, если у вас есть полином первой степени y = a * x b и точки (1, 2) и (2, 3) , вы получите 2 уравнения a b = 2 и 2a b = 3