Нахождение полиномов в 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)
→ Ссылка