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. Личный конспект, составленный на основе лекций Белозерова Г.С.

М1803. О суммарной площади треугольников

Задача из журнала «Квант» (2002 год, 1 выпуск)

Условие

В квадрате ABCD взяты точки P и Q такие, что PAQ=QCP=45 (рис.1). Докажите, что суммарная площадь треугольников PAQ,PCB и QCD равна суммарной площади треугольников QCP,QAD и PAB.

Рис.1

Доказательство

Симметрично отразим APB относительно прямой AP, а AQD — относительно прямой AQ. При этом отраженные точки B и D «склеятся» в одну точку M (рис.2).

Рис.2
Значит, суммарная площадь треугольников QCP,QAD и PAB равна площади четырехугольника APCQ плюс площадь треугольника PQM. Симметрично отразим CPB относительно прямой CP, а CQD — относительно прямой CQ. При этом отраженные точки B и D «склеятся» в одну точку N. Значит, суммарная площадь треугольников PAQ,PCB и QCD равны площади четырехугольника APCQ плюс площадь треугольника PQN.
Остается заметить, что площади треугольников PQM и PQN равны, поскольку сами треугольники равны.

В.Произволов

M1804. Об иррациональных неравенствах

Задача из журнала «Квант» (2002 год, 1 выпуск)

Условие

Докажите, что aa2+8bc+bb2+8ca+cc2+8ab1 для любых положительных чисел a, b и c.

Доказательство

Так как выражение в левой части однородно относительно a, b и c (т.е. f(a,b,c)=f(λa,λb,λc)), то мы можем считать, что abc=1. Из равенства abc=1 следует, что aa2+8bc=11+8abca3=11+8a3 . Пусть 1+8a3=x , 1+8b3=y , 1+8c3=z , тогда нужно доказать неравенство 1(x+1(y+1(z1  (xy+(xz+(yz(xyz  xy+xz+yz+2x2yz+2xy2z+2xyz2xyz xy+xz+yz+2(xyz((x+(y+(z)xyz . Теперь, применив неравенство о среднем арифметическом и среднем геометрическом, находим x=1+1a3++1a38 раз991(1a3)8=9a83 , поэтому (x3a43 . Аналогично, (y3b43 , (z3c43 , следовательно, (xyz27(abc)43=27 и (x+(y+(z33(xyz33(27=9 . Поэтому для доказательства неравенства (1) достаточно показать, что xy+xz+yz+2279xyz . Положим 8a3=A , 8b3=B , 8c3=C , тогда (2) примет вид (1+A)(1+B)+(1+A)(1+C)+(1+B)(1+C)+486(1+A)(1+B)(1+C) A+B+C+488ABC .
Но ABC=83(abc)3=83 , отсюда A+B+C33(ABC=24 , и, значит, A+B+C+488512=83=ABC . Утверждение доказано.

(Южная Корея)