Нахождение полиномов в Python
Написал функцию для нахождения полиномов 3-го и 4-го порядка:
def polynomial(n, coef):
def inp_int(x):
if len(coef) == 3:
p = coef[0] + coef[1] * x + coef[2] * x**n
return p
elif len(coef) == 4:
p = coef[0] + coef[1] * x + coef[2] * x**(n-1) + coef[3] * x**n
return p
return inp_int
что для условий:
n = 2
coef = [1,2,3]
pol2 = polynomial(n=n, coef=coef)
for i in range(3):
print(pol2(i))
выведет:
1
6
17
Но мне нужна функция, которая не ограничивается полиномами 3-го и 4-го порядка. Как можно это реализовать? (без использования готовых библиотек)
Ответы (3 шт):
Автор решения: Harry
→ Ссылка
Ну не доходит, вижу, что такое схема Горнера...
def polynomial(x, coef):
n = len(coef)
s = 0
for i in range(0,n):
s = s*x+coef[i]
return s
cf = [1,2,3,4,5]
# 2^4+2*2^3+3*2^2+4*2+5
print(polynomial(2,cf))
Все. Полином определяется коэффициентами при степенях с высшей до низшей, в порядке убывания и без пропусков. Например,
x**3+3*x-3
записываем как
coeff = [1,0,3,-1]
Автор решения: Denis
→ Ссылка
Так же использовал вложенную функцию:
def polynomial(n, coef):
def pol(x):
p = 0
for i in range(len(coef)):
p += coef[i] * x**i
return p
return pol
Автор решения: Sergei
→ Ссылка
from functools import reduce
def evaluate(coef, x):
return reduce(lambda x, y: x + y, map(lambda a, x, n: a * x ** n, coef, [x] * len(coef), range(len(coef) - 1, - 1, - 1)), 0)