#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