Схема Горнера

Материал из testwiki
Перейти к навигации Перейти к поиску

Схе́ма Го́рнера (или правило Горнера, метод Горнера, метод Руффини-Горнера) — алгоритм вычисления значения многочлена, записанного в виде суммы мономов (одночленов), при заданном значении переменной. Метод Горнера позволяет найти корни многочлена[1], а также вычислить производные полинома в заданной точке. Схема Горнера также является простым алгоритмом для деления многочлена на бином вида xc. Метод назван в честь Уильяма Джорджа Горнера, однако Паоло Руффини опередил Горнера на 15 лет, а китайцам этот способ был известен еще в XIII веке.

Описание алгоритма

Задан многочлен

P(x)=a0+a1x+a2x2+a3x3++anxn,ai.

Пусть требуется вычислить значение данного многочлена при фиксированном значении x=x0. Представим многочлен P(x) в следующем виде:

P(x)=a0+x(a1+x(a2+x(an1+anx))).

Определим следующую последовательность:

bn=an,
bn1=an1+bnx0,
bi=ai+bi+1x0,
b0=a0+b1x0.

Искомое значение P(x0) есть b0. Покажем, что это так.

В полученную форму записи P(x) подставим x=x0 и будем вычислять значение выражения, начиная с внутренних скобок. Для этого будем заменять подвыражения через bi:

P(x0)=a0+x0(a1+x0(a2+x0(an1+anx0)))==a0+x0(a1+x0(a2+x0bn1))==a0+x0b1==b0.

Использование схемы Горнера для деления многочлена на бином

При делении многочлена a0xn+a1xn1++an1x+an на xc получается многочлен b0xn1+b1xn2++bn2x+bn1 с остатком bn (см. теорема Безу).

При этом коэффициенты результирующего многочлена удовлетворяют рекуррентным соотношениям

b0=a0,bk=ak+cbk1.

Таким же образом можно определить кратность корней (использовать схему Горнера для нового полинома). Также схему можно использовать для нахождения коэффициентов при разложении полинома по степеням (xc):

P(x)=bn+bn1(xc)+bn2(xc)2++b0(xc)n.

Схема Горнера может использоваться для нахождения производных многочлена:

P(k)(c)=k!bnk.

Примеры использования

Рассчитать f(x)=2x36x2+2x1 для x=3. Используем синтетическое деление:


 x₀│   x³    x²    x¹    x⁰
 3 │   2    −6     2    −1
   │         6     0     6
   └────────────────────────
       2     0     2     5

Здесь в первой строке записаны значение x0 и коэффициенты многочлена.

Значения (по столбцам) в третьей строке соответствуют сумме значений первой и второй строки (bn1=an1+bnx0), а значения второй строки произведению x на значение в третьей строке предыдущего столбца (bnx0).

Например, если a3=2,a2=6,a1=2,a0=1 мы видим, что b3=2,b2=0,b1=2,b0=5 — значения в третьей строке. Так синтетическое деление базируется на методе Горнера.

Разделим x36x2+11x6 на x2:

 2 │   1    −6    11    −6
   │         2    −8     6
   └────────────────────────
       1    −4     3     0

Новый многочлен x24x+3.

Пусть f1(x)=4x46x3+3x5 и f2(x)=2x1. Разделим f1(x) на f2(x), используя метод Горнера.

  2 │  4    −6    0    3   │   −5
────┼──────────────────────┼───────
  1 │        2   −2   −1   │    1
    └──────────────────────┼───────
       2    −2   −1    1   │   −4

Третья строка — сумма первых двух, деленная на два. Каждое значение второй строки совпадает с значением третьей строки в предыдущем столбце. Ответ на деление:

f1(x)f2(x)=2x32x2x+142x1.


Также с помощью схемы Горнера можно вычислять значение числа в позиционной системе исчисления.

Примечания

Шаблон:Примечания

См. также

Литература

Ссылки

  1. Если целочисленный многочлен обладает целыми корнями, то они будут найдены среди делителей свободного члена. Шаблон:Книга