Мой учебник дает псевдокод для метода Хорнера следующим образом:Используя метод Хорнера найти Р (х) и Р '(х)
P(x) = a_n x n + a_n−1 x n−1 + ··· + a_1 x + a_0 = (x−x0)Q(x) + b0
INPUT degree n; coefficients a_0 , a_1 , . . . , a_n ; x0 .
OUTPUT y = P(x 0); z = P (x 0).
Step 1 Set y = a_n ; (Compute b n for P.)
z = a_n . (Compute b n−1 for Q.)
Step 2 For j = n − 1, n − 2, . . . , 1
set y = x0 * y + a_j ; (Compute b_j for P.)
z = x0 * z + y. (Compute b_j−1 for Q.)
Step 3 Set y = x0 + y + a_0 .
Step 4 OUTPUT (y, z);
STOP.
Теперь проблема у меня в том, что индекс в псевдо код, кажется, не соответствуют индексы в формуле
Я сделал реализацию питона, но ответы, которые я получил, казалось, не так, поэтому я изменил его немного
def horner(x0, *a):
'''
Horner's method is an algorithm to calculate a polynomial at
f(x0) and f'(x0)
x0 - The value to avaluate
a - An array of the coefficients
The degree is the polynomial is set equal to the number of coefficients
'''
n = len(a)
y = a[0]
z = a[0]
for j in range(1, n):
y = x0 * y + a[j]
z = x0 * z + y
y = x0 * y + a[-1]
print('P(x0) =', y)
print('P\'(x0) =', z)
Она работает довольно хорошо, но Мне нужен кто-то, у кого больше опыта в этом отношении, чтобы дать ему один раз.
В качестве очень простого теста я взял многочлен 2x^4 со значением -2 для x.
Чтобы использовать его в метод, который я называю его как таковой
horner(-2, 2, 0, 0 ,0)
Выход действительно выглядит правильно для этого очень простой задачей. Поскольку f (x) = 2x^4, то f (-2) = -32, но это то, где моя реализация дает другой результат, мой ответ положительный
Можете ли вы предоставить пример ввода и желаемый результат? – vaultah
http://en.wikipedia.org/wiki/Horner%27s_method#Python_implementation ваш вход и ожидаемый результат помогут –
Спасибо @PadraicCunningham, я прочитал wiki-страницу и посмотрел на их алгоритм. Небольшое различие заключается в том, что я пытаюсь решить производную одновременно – Leon