Processing math: 100%

Алгоритм Горнера

Для того чтобы понять принцип работы алгоритма (который также называют «схемой Горнера» или «методом Горнера»), разберемся, что с его помощью можно делать, откуда берется этот алгоритм, как именно и почему он работает.

    Алгоритм Горнера помогает решать две алгебраические задачи:

  1. Решение уравнений высших степеней;
  2. Работа с многочленами.

Все это можно делать и без использования алгоритма, однако его преимущество заключается в скорости.

Выведем схему Горнера

Пусть нам нужно найти корни многочлена P(x), то есть решить уравнение P(x)=0. P(x) представим в виде: ni=0aixi=anxn+an1xn1++ a1x+a0. Решение может осуществляться методами, которые используют производные (если нам нужно найти только действительные корни), а также любыми итерационными способами. Последний требует многократного вычисления значений многочлена.

По следствию из теоремы Безу, многочлен P(x) можно представить в виде: P(x)=(xx0)Q(x)+R(x), где Q(x)  результат деления P(x) на (xx0), R(x)  остаток от этого деления. Обозначим Q(x) как bn1xn1+bn2xn2++b0. Перепишем наш многочлен: anxn+an1xn1++a1x+a0P(x)(xx0)(bn1xn1+bn2xn2++b0)Q(x)+R(x). Для того чтобы вычислить значения многочлена, нам необходимо при заданном x=x0 найти степени xk0, (k=¯1,n), результаты умножить на коэффициенты (bn1,bn2,,b0), а получившееся сложить. Однако, чтобы ускорить процесс и вдвое сократить количество умножений, можно воспользоваться алгоритмом Горнера. Выведем его.

Алгоритм берет свое начало из теоремы Безу, которая звучит так: если многочлен P(x) разделить на двучлен (xx0), то остаток от этого деления будет равен значению P(x) на элементе x0, т.е. (остаток)R(x)=P(x0).

В тождестве (1) умножим (xx0) на Q(x). Получаем anxn+an1xn1++a1x+a0bn1xn+bn2xn1++b0xx0bn1xn1x0bn2xn2x0b0+R(x). Теперь приравняем коэффициенты при одинаковых степенях x: bn1=an; bn2=an1+x0bn1; ; R(x)=a0+x0b0. Приходим к исходному: R(x)=P(x0). Результаты оформим в виде таблицы:

an an1 a0
x0 bn1 bn2 R(x)

Эта таблица и есть схемой Горнера.

Замечание: помимо значения остатка R(x), алгоритм дает нам Q(x) (неполное частное). Также, если остаток R(x)=0, то x0 корень многочлена P(x).

Далее, с помощью примеров, рассмотрим, как алгоритм работает на практике.

Примеры решения задач

  1. Разделить многочлен P5(x)=x58x4+7x34x2+16x+24 на (x2).
    Решение
  2. Определить кратность корня x0=1 многочлена P5(x)=x58x3+14x29x+2.
    Решение
  3. При каких значениях A и B многочлен P4(x)=Ax4+Bx2+1 делится на (x1)2?
    Решение
  4. Дан многочлен P4(x)=x4(2+i)x3(3+2i)x+5 над полем \usepackageamsfontsC. Разделить его с остатком на (xx0), где x0=1i, попутно вычислив P4(x0).
    Решение

Почему алгоритм Горнера работает?

После ознакомления с примерами решения задач, можно приступить к изучению данного вопроса. Представим многочлен уже привычным нам образом P(x)=anxn+an1xn1++a1x+a0. Сделаем самое очевидное действие — вынесем x за скобки: x(anxn1+an1xn2++a1)+a0. Если мы повторим это действие n1 раз, то получим x(x(xn1(anx+an1)+)+a1)+a0. Алгоритм Горнера работает вне зависимости от того, какая степень у многочлена — схема универсальна. Посмотрим на примере. P7(x)=x7+5x62x5x4+3x28x+11==x(x6+5x52x4x3+3x8)+11==x(x(x5+5x42x3x2+3)8)+11==x(x(x(x4+5x32x2x+0)+3)8)+11==x(x(x(x(x3+5x22x1)+0)+3)8)+11==x(x(x(x(x(x2+5x2)1)+0)+3)8)+11==x(x(x(x(x(x(n1)=(71)=6(x+5)2)1)+0)+3)8)+11==x(x(x(x(x(x((1x)+5)2)1)+0)+3)8)+11. Отсюда видим, для того чтобы посчитать выражение (2), мы должны 1 (коэффициент перед x7) умножить на x, результат прибавить к 5 (коэффициент перед x6), опять умножить на x и т.д. То есть мы делаем все то, что и в схеме Горнера.

Почему разложение P(x)=(xx0)Q(x)+R(x) — верно? Начнем с арифметики. Возьмем какое-то натуральное число a. Как гласит нам основная теорема арифметики, его всегда можно представить в виде произведения двух других чисел с остатком, то есть a=sq+r. Например, 7=23+1, 8=42+0. Разложение такого типа единственно, причем 0r<s.

Тоже самое происходит и с многочленами. Допустим, мы хотим разделить многочлен P(x) на Q(x) с остатком. Значит P(x) можно записать как P(x)=S(x)Q(x)+R(x), где 0degR(x)<degQ(x).

Если Q(x)=(xx0) (линейный многочлен), то его степень — единица. Тогда результатом деления любого многочлена на линейный, будет какой-то новый многочлен степени на единицу меньше, и остаток — многочлен нулевой степени (любое число в степени 0  это 1). Следовательно, остатком всегда будет просто число. Именно его мы ищем в схеме Горнера в конце каждой строки.

Дополнительные примеры решения задач

  1. Разложить многочлен P6(x)=x6+6x5+3x428x39x2+54x27 по степеням (x1).
    Решение
  2. Найти все рациональные корни многочлена P7(x)=9x7+3x623x5+4x45x3+23x213x+2.
    Решение

Алгоритм Горнера

Тест на проверку знаний по теме «Алгоритм Горнера»

Смотрите также

  1. Алгебра: Теоремы и алгоритмы: учеб. пособие / Н. И. Яцкин. — Иваново: Иван. гос. ун-т, 2006. — 506с. (c.383-394, 501-503)
  2. Основы численных методов: Учебник для вузов/В.М.Вержбицкий. — М.: Высш. шк., 2002. — 840c. (с.272-275)
  3. Личный конспект, составленный на основе лекций Белозерова Г.С.

Решение задач на делимость многочленов. Применение алгоритма Горнера


Определим ключевые понятие для решения задач.

Определение 1

f(x),g(x)P[x],g(x)0. f(x) делится на g(x)
(f(x) g(x)) , если f представимо в следующем виде: f(x)=g(x)h(x),гдеh(x)P[x].

Определение 2

Пусть f(x),g(x),h(x)P[x], если h(x) | f(x) и h(x) | g(x), то h(x) называется общим делителем f(x), g(x).

Алгоритм Горнера

Алгоритм вычисления значения многочлена, записанного в виде суммы мономов, при заданном значении переменной.
f(x)=anxn+an1xn1++a1x+a0
q(x)=bn1xn1+bn2xn2++b1x+b0
f(x)=(xα)q(x)+f(α)
Умножаем q(x) на xα и приравниваем:

f(x)=(xα)q(x)+f(α)
n an=bn1 bn1=an
n1 an1=bn2αbn1 bn2=an1+αbn1
n2 an2=bn3αbn2 bn3=an2+αbn2
1 a1=b0αb1 b0=a1+αb1
0 a0=f(α)αb0 f(α)=a0+αb0

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

an an1 an2 a1 a0
α bn1 bn2 bn3 b0 f(α)

Комбинируя алгоритм Горнера и занося результаты в схему Горнера получаем простой алгоритм нахождения остатка и частного, при делении на заданный линейный двухчлен.

Задача 1

Указать делит ли многочлен g(x) многочлен f(x).

Алгоритм:

  1. Делим первый элемент делимого на старший элемент делителя, помещаем результат под чертой.
  2. Умножаем делитель на полученный выше результат деления. Записываем результат под первыми двумя элементами делимого.
  3. Вычитаем полученный после умножения многочлен из делимого, записываем результат под чертой.
  4. Если степень полученного многочлена в пункте 3 меньше степени делителя – завершаем процесс, в противном случае – перейти к пункту 5.
  5. Повторяем предыдущие 4 шага, используя в качестве делимого многочлен, записанный под чертой.
  • f(x)=x312x242g(x)=x3
    x3 12x2 + 0x 42 x 3
    x3 3x2 x2 9x 27
    9x2 + 0x 42
    9x2 + 27x
    27x 42
    27x + 81
    123

    Ответ: r(x)=123g(x) не делит f(x).

  • f(x)=x2+3x+2g(x)=x+2
    x2 + 3x + 2 x + 2
    x2 + x x + 1
    2x + 2
    2x + 2
    0

    Ответ: r(x)=0g(x) делит f(x).

 

Задача 2

Найти частное и остаток от деления на линейный двучлен используя метод Горнера.
f(x)=2x43x3x2+4x+13 Линейныйдвучлен:x1
Применим предложенный выше алгоритм:

a4=2 a3=3 a2=1 a1=4 a0=13
α=1 b3=a4
b3=2
b2=a3+αb3
b2=1
b1=a2+αb2
b1=2
b0=a1+αb1
b0=2
f(α)=15

Ответ: q(x)=2x3x22x+2,f(α)=15.

Список литературы:

  1. Конспект по линейной алгебре и геометрии. 1 курс. Геннадий Сергеевич Белозеров. Глава 3.
  2. Сканави М. И. Элементарная математика. — 2-е изд., перераб. и доп. — М.: Наука, 1972. — 142—147 c.
  3. Волков Е. А. § 2. Вычисление значений многочлена. Схема Горнера — Учеб. пособие для вузов. — 2-е изд., испр. — М.: Наука, 1987. — 248 с.

Тест на тему: Решение задач на делимость многочленов. Применение алгоритма Горнера.