Задача 29. Вычисление значения полинома
Условие задачи. Для заданного x вычислить значение полинома по схеме Горнера.
В общем случае полином степени n представляет собой многочлен P (x) = a 0 xn + a 1 xn -1 + a 2 xn -2 + … + akxn - k + … + an -2 x 2 + an -1 x 1 + an . Для вычисления его значения при заданном х по схеме Горнера предварительно выполняется деление исходного полинома с остатком на x, в результате чего он приводится к виду:
P(x) = ((…(…(((a0 ) x + a1) x+ a2 ) x + … +ak )x + …+ an-3 )x + an-2) x + an-1) x + an
При такой форме представления полинома для вычисления его значения при конкретном значении x можно, начав с самой внутренней пары скобок, задать
p 0 = a 0,
а далее в результате повторения однотипных действий последовательно вычислять
p 1 = p 0 x + a 1
p 2 = p 1 x + a 2
…
pk = pk-1x + ak
…
pn = pn -1 x + an
Значение pn будет значением полинома при конкретном значении x. Такой прием позволяет избежать трудоемких операций по возведению х в разные степени.В общем виде такой вычислительный процесс можно записать как рекуррентную зависимость:
p 0 = a 0
pk = pk-1x + ak, k = 1,2, …, n
Тогда для задания и хранения коэффициентов полинома удобно использовать массив (указывая 0 для коэффициентов при отсутствующих степенях, например, при степени 1 в условии данной задачи), причем удобнее, если его элементы будут иметь индексы от 0 до n, если это позволяет язык программирования, на котором реализуется алгоритм. Для полинома, заданного в условии данной задачи, , степеньполинома n=4, а коэффициенты имеют значения 2, 3, -1, 0 и 5, следовательно, элементы массива а от a[0] до a [4] должны иметь перечисленные значения. Для вычисления собственно значения полинома можно использовать единственную переменную p, так как вычисляемое на каждом шаге значение pk зависит только от предыдущего значения pk -1, очередного коэффициента полинома ak и заданного значения x.
Структурированная запись алгоритма 29
1. n = 4
2. Создать массив коэффициентов полинома a из n + 1 элементов, проиндексированный от 0 до n, и инициализировать его значениями согласно заданию.
3. Ввести значение x
4. p = a[0]
5. Повторить для k от 1 до n:
5.1. p = p * x + a[k]
6. Вывести сообщение «Значение полинома при заданном x равно:» и значение p
Схема алгоритма

Текст программы на языке Си
#include <stdio.h>
#include <stdlib.h>
#define n 4
double a[n+1]={2.0, 3, -1.0, 0, 5.0};
int main(int argc, char *argv[])
{
int k;
double p, x;
printf("Введите значение параметра x: ");
scanf("%lf",&x);
p=a[0];
for(k=1;k<=n;k++)
p = p*x + a[k]);
printf("Значение полинома P(%lg) = %lg ",x,p);
system("pause");
return 0;
}
Текст программы на языке Паскаль
Program Pr_29;
Const
n = 4;
a: array [0..n] of real = (2, 3, -1, 0, 5);
Var
x, p: real;
k: integer;
begin
writeln(ʹВведите х’);
readln(x);
p:=a[0];
for k:=1 to n do
p:=p*x+a[k];
writeln(ʹЗначение полинома = ’, p:5:2)
end.
|