метод Горнера
![]() | Эту статью может потребовать очистки Википедии , чтобы она соответствовала стандартам качества . Конкретная проблема: См . Обсуждение:Метод Хорнера#Эта статья о двух разных алгоритмах . ( Ноябрь 2018 г. ) |
В математике и информатике ( метод Горнера или схема Горнера ) — это алгоритм полиномиальной оценки . Хотя этот метод назван в честь Уильяма Джорджа Хорнера , этот метод намного старше, поскольку сам Хорнер приписал его Жозефу-Луи Лагранжу , и его можно проследить на многие сотни лет назад у китайских и персидских математиков. [1] После появления компьютеров этот алгоритм стал фундаментальным для эффективных вычислений с полиномами.
Алгоритм основан на правиле Горнера , в котором многочлен записывается во вложенной форме :
Это позволяет оценить полином степени n только с помощью умножения и дополнения. Это оптимально, поскольку существуют полиномы степени n , которые невозможно вычислить с помощью меньшего количества арифметических операций. [2]
Альтернативно, метод Хорнера также относится к методу аппроксимации корней многочленов, описанному Хорнером в 1819 году. Это вариант метода Ньютона-Рафсона, который стал более эффективным для ручных вычислений за счет применения правила Горнера. Он широко использовался до тех пор, пока компьютеры не стали широко использоваться примерно в 1970 году.
Полиномиальная оценка и деление в столбик [ править ]
Учитывая полином
Для этого новая последовательность констант определяется рекурсивно следующим образом:
( 1 ) |
Затем это ценность .
Чтобы понять, почему это работает, полином можно записать в виде
Таким образом, итеративно заменяя в выражение,
Теперь это можно доказать;
( 2 ) |
Это выражение представляет собой практическое применение Хорнера, поскольку оно предлагает очень быстрый способ определения результата;
Чтобы найти последовательные -ценности, вы начинаете с определения , что просто равно . Затем вы работаете рекурсивно, используя формулу:
Примеры [ править ]
Оценивать для .
Мы используем синтетическое деление следующим образом:
x0│ x3 x2 x1 x0 3 │ 2 −6 2 −1 │ 6 0 6 └──────────────────────── 2 0 2 5
Записи в третьей строке представляют собой сумму записей в первых двух. Каждая запись во второй строке представляет собой произведение значения x ( в данном примере 3 ) на запись третьей строки слева. Записи в первой строке представляют собой коэффициенты оцениваемого многочлена. Тогда остаток при делении на это 5 .
Но по теореме о полиномиальном остатке мы знаем, что остаток равен . Таким образом, .
В этом примере, если мы можем это видеть , записи в третьей строке. Итак, синтетическое деление (которое на самом деле было изобретено и опубликовано Руффини за 10 лет до публикации Хорнера) проще в использовании; Можно показать, что он эквивалентен методу Горнера.
Как следствие полиномиальной теоремы об остатках, элементы в третьей строке представляют собой коэффициенты многочлена второй степени, частное при делении на . Остаток 5 . Это делает метод Горнера полезным для деления полинома в длину .
Разделять к :
2 │ 1 −6 11 −6 │ 2 −8 6 └──────────────────────── 1 −4 3 0
Фактор .
Позволять и . Разделять к используя метод Горнера.
0.5 │ 4 −6 0 3 −5 │ 2 −2 −1 1 └─────────────────────── 2 −2 −1 1 −4
Третья строка представляет собой сумму первых двух строк, разделенную на 2 . Каждая запись во второй строке представляет собой произведение 1 на запись третьей строки слева. Ответ:
Эффективность [ править ]
Оценка с использованием мономиальной формы степени полином требует не более дополнения и умножения, если степени вычисляются путем многократного умножения и каждый моном оценивается индивидуально. Стоимость может быть снижена до дополнения и умножения, оценивая степени путем итерации.
Если числовые данные представлены в виде цифр (или битов), то наивный алгоритм также предполагает хранение приблизительно раз количество битов : оцененный полином имеет приблизительную величину , и нужно также хранить сам. Напротив, метод Горнера требует только дополнения и умножения, и его требования к хранению составляют только раз количество битов . Альтернативно, метод Хорнера можно вычислить с помощью слитое умножение – сложение . Метод Горнера также можно расширить для оценки первого производные многочлена с сложения и умножения. [3]
Метод Хорнера оптимален в том смысле, что любой алгоритм вычисления произвольного полинома должен использовать как минимум столько же операций. Александр Островский доказал в 1954 году, что количество необходимых дополнений минимально. [4] Виктор Пан доказал в 1966 году, что число умножений минимально. [5] Однако, когда является матрицей, метод Горнера не является оптимальным .
Это предполагает, что полином оценивается в мономиальной форме и никакое предварительное обусловливание представления не допускается, что имеет смысл, если полином оценивается только один раз. Однако если разрешено предварительное условие и полином необходимо вычислять много раз, то возможны более быстрые алгоритмы . Они включают в себя преобразование представления многочлена. В общем, степень- полином можно вычислить, используя только ⌊ n /2 ⌋ +2 умножения и дополнения. [6]
Параллельная оценка [ править ]
Недостатком правила Горнера является то, что все операции являются последовательно зависимыми , поэтому на современных компьютерах невозможно воспользоваться преимуществами параллелизма на уровне команд . В большинстве приложений, где важна эффективность оценки полиномов, множество полиномов низкого порядка оцениваются одновременно (для каждого пикселя или многоугольника в компьютерной графике или для каждого квадрата сетки в численном моделировании), поэтому нет необходимости находить параллелизм внутри одиночная полиномиальная оценка.
Однако если оценивается один полином очень высокого порядка, может быть полезно разбить его следующим образом:
В более общем смысле суммирование можно разбить на k частей:
Приложение к умножению и делению чисел с плавающей запятой [ править ]
Метод Хорнера — это быстрый, эффективный с точки зрения кода метод умножения и деления двоичных чисел на микроконтроллере без аппаратного умножителя . Одно из двоичных чисел, подлежащих умножению, представляется в виде тривиального многочлена, где (используя приведенные выше обозначения) , и . Затем x (или x в некоторой степени) многократно вычитается. В этой двоичной системе счисления (основание 2) , поэтому степени 2 многократно вычитаются.
Пример [ править ]
Например, чтобы найти произведение двух чисел (0,15625) и m :
Метод [ править ]
Чтобы найти произведение двух двоичных чисел d и m :
- Регистр, содержащий промежуточный результат, инициализируется значением d .
- Начните с младшего (крайнего правого) ненулевого бита в m .
- Подсчитайте (слева) количество битовых позиций до следующего по значимости ненулевого бита. Если более значимых битов нет, то берем значение текущей битовой позиции.
- Используя это значение, выполните операцию сдвига влево на это количество бит в регистре, содержащем промежуточный результат.
- Если все ненулевые биты были подсчитаны, то в регистре промежуточного результата теперь хранится окончательный результат. В противном случае добавьте d к промежуточному результату и перейдите к шагу 2 со следующим старшим битом m .
Вывод [ править ]
В общем, для двоичного числа с битовыми значениями ( ) продукт
Все знаменатели равны единице (или член отсутствует), поэтому это сводится к
В двоичной математике (с основанием 2) умножение на степень 2 — это просто операция сдвига регистра . Таким образом, умножение на 2 вычисляется в системе счисления по основанию 2 путем арифметического сдвига . Фактор (2 −1 вправо ) — арифметический сдвиг , a (0) не приводит к выполнению операции (поскольку 2 0 = 1 – мультипликативный единичный элемент ), а a (2 1 ) приводит к арифметическому сдвигу влево. Произведение умножения теперь можно быстро вычислить, используя только арифметические операции сдвига, сложения и вычитания.
Этот метод особенно быстр на процессорах, поддерживающих операцию сдвига и сложения с одной командой. По сравнению с библиотекой чисел с плавающей запятой C, метод Хорнера жертвует некоторой точностью, однако номинально он работает в 13 раз быстрее (в 16 раз быстрее, когда используется форма « канонической знаковой цифры » (CSD)) и использует только 20% пространства кода. [7]
Другие приложения [ править ]
Метод Хорнера можно использовать для преобразования между различными позиционными системами счисления - в этом случае x является основанием системы счисления, а коэффициенты a i - это цифры представления по основанию x данного числа - а также может использоваться, если x — матрица , и в этом случае выигрыш в вычислительной эффективности еще больше. Однако для таких случаев более быстрые методы . известны [8]
Поиск корня полинома [ править ]
Используя алгоритм деления в столбик в сочетании с методом Ньютона , можно аппроксимировать действительные корни многочлена. Алгоритм работает следующим образом. Учитывая полином степени с нулями сделать первоначальное предположение такой, что . Теперь повторите следующие два шага:
- Используя метод Ньютона , найдите наибольший ноль из используя предположение .
- Используя метод Горнера, разделите чтобы получить . Вернитесь к шагу 1, но используйте полином и первоначальное предположение .
Эти два шага повторяются до тех пор, пока для многочлена не будут найдены все действительные нули. Если аппроксимированные нули недостаточно точны, полученные значения можно использовать в качестве начальных предположений для метода Ньютона, но с использованием полного полинома, а не уменьшенных полиномов. [9]
Пример [ править ]

Рассмотрим полином
Из вышесказанного мы знаем, что наибольший корень этого многочлена равен 7, поэтому мы можем сделать первоначальное предположение, равное 8. Используя метод Ньютона, первый ноль числа 7 находится, как показано черным на рисунке справа. Следующий делится на чтобы получить
Деленная разность многочлена [ править ]
Метод Горнера можно модифицировать для вычисления разделенной разности. Учитывая полином (как и раньше)
По завершении мы имеем
История [ править ]
результат: х =840 [11]
Статья Хорнера под названием «Новый метод решения числовых уравнений всех порядков методом непрерывной аппроксимации» [12] был прочитан перед Лондонским королевским обществом на его заседании 1 июля 1819 года с продолжением в 1823 году. [12] Статья Хорнера во второй части «Философских трудов Лондонского королевского общества» за 1819 год была тепло и широко встречена рецензентом . [ постоянная мертвая ссылка ] в номере «Ежемесячного обзора: или Литературного журнала» за апрель 1820 г.; для сравнения, техническая статья Чарльза Бэббиджа в этом обзоре категорически отвергается. В серии обзоров в «Ежемесячном обзоре» за сентябрь 1821 года делается вывод, что Холдред был первым человеком, открывшим прямое и общее практическое решение числовых уравнений. Фуллер [13] показал, что метод, описанный в статье Горнера 1819 года, отличается от того, что впоследствии стало известно как «метод Горнера», и что, следовательно, приоритет этого метода должен принадлежать Холдреду (1820).
В отличие от своих английских современников, Хорнер опирался на континентальную литературу, особенно на произведения Арбогаста . Известно также, что Хорнер внимательно прочитал книгу Джона Бонникасла по алгебре, хотя и пренебрег работами Паоло Руффини .
Хотя Хорнеру приписывают создание этого метода доступным и практичным, он был известен задолго до Хорнера. В обратном хронологическом порядке метод Горнера уже был известен:
- Паоло Руффини в 1809 году (см. правило Руффини ) [14] [15]
- Исаак Ньютон в 1669 году. [16] [17]
- китайский математик Чжу Шицзе в 14 веке. [15]
- китайский математик Цинь Цзюшао в своем «Математическом трактате в девяти разделах» XIII века.
- персидский в математик Шараф ад-Дин аль-Туси XII веке (первый, кто применил этот метод в общем случае кубического уравнения) [18]
- китайский математик Цзя Сянь в 11 веке ( династия Сун )
- «Девять глав математического искусства» , китайская работа династии Хань (202 г. до н.э. – 220 г. н.э.) под редакцией Лю Хуэя (ок. III век). [19]
Цинь Цзюшао в своем «Шу Шу Цзю Чжан» ( «Математический трактат в девяти разделах» ; 1247) представляет портфель методов типа Горнера для решения полиномиальных уравнений, который был основан на более ранних работах математика Цзя Сяня из династии Сун XI века ; например, один метод специально подходит для би-квинтик, пример которого приводит Цинь, в соответствии с тогдашней китайской традицией изучения конкретных случаев. Ёсио Миками в книге «Развитие математики в Китае и Японии» (Лейпциг, 1913 г.) писал:
«...кто может отрицать тот факт, что выдающийся процесс Горнера был использован в Китае, по крайней мере, почти на шесть долгих веков раньше, чем в Европе... Мы, конечно, никоим образом не намерены приписывать изобретение Горнера китайскому происхождению, но по прошествии времени вполне возможно, что европейцы могли знать о китайском методе прямым или косвенным образом». [20]
Ульрих Либбрехт заключил: «Очевидно, что эта процедура — китайское изобретение… этот метод не был известен в Индии» . Он сказал, что Фибоначчи, вероятно, узнал об этом от арабов, которые, возможно, позаимствовали у китайцев. [21] Извлечение квадратных и кубических корней аналогичным образом уже обсуждалось Лю Хуэем в связи с задачами IV.16 и 22 в «Цзю Чжан Суань Шу» , тогда как Ван Сяотун в VII веке предполагал, что его читатели могут решать кубики с помощью метода аппроксимации, описанного в его книга Цзигу Суаньцзин .
См. также [ править ]
- Алгоритм Кленшоу для вычисления полиномов в форме Чебышева
- Алгоритм Де Бура для оценки сплайнов в B-сплайна форме
- Алгоритм Де Кастельжо для оценки полиномов в форме Безье
- Схема Эстрина для облегчения распараллеливания на современных компьютерных архитектурах
- Метод Лилля для графического приближения корней
- Правило Руффини и синтетическое деление для деления многочлена на бином формы x - r
Примечания [ править ]
- ^ 600 лет назад, китайский математик Цинь Цзюшао и 700 лет назад, персидский математик Шараф ад-Дин ат-Туси.
- ^ Пан 1966
- ^ Панкевич 1968 .
- ^ Островский 1954 .
- ^ Пан 1966 .
- ^ Кнут 1997 .
- ^ Крипасагар 2008 , с. 62.
- ^ Хайэм 2002 , Раздел 5.4.
- ^ Кресс 1991 , с. 112.
- ^ Фейтман и Кахан 2000
- ^ Либбрехт 2005 , стр. 181–191.
- ^ Jump up to: Перейти обратно: а б Горнер 1819 г.
- ^ Фуллер 1999 , стр. 29–51.
- ^ Каджори 1911 .
- ^ Jump up to: Перейти обратно: а б О'Коннор, Джон Дж.; Робертсон, Эдмунд Ф. , «Метод Хорнера» , Архив истории математики MacTutor , Университет Сент-Эндрюс
- ^ Анализ с помощью количественных рядов, потоков и различий: с линейным перечислением третьего порядка, Лондон. Из мастерской Пирсона. В 1811 году с. 10, 4-й абзац.
- ↑ Сборник статей Ньютона, издание 1779 г., в сноске, т. я, с. 270-271
- ^ Берггрен 1990 , стр. 304–309.
- ^ Темпл 1986 , с. 142.
- ^ Миками 1913 , стр. 77.
- ^ Либбрехт 2005 , с. 208.
Ссылки [ править ]
- Берггрен, Дж. Л. (1990). «Инновации и традиции в Муадалате Шарафа ад-Дина ат-Туси». Журнал Американского восточного общества . 110 (2): 304–309. дои : 10.2307/604533 . JSTOR 604533 .
- Каджори, Флориан (1911). «Метод аппроксимации Горнера, предсказанный Руффини» . Бюллетень Американского математического общества . 17 (8): 409–414. дои : 10.1090/s0002-9904-1911-02072-9 . Архивировано из оригинала 4 сентября 2017 г. Проверено 4 марта 2012 г. Прочтите перед Юго-западной секцией Американского математического общества 26 ноября 1910 года.
- Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Штейн 10.1016/0315-0860(81)90069-0, Клиффорд (2009). «Введение в алгоритмы» . История Математики . 8 (3) (3-е изд.). Массачусетский технологический институт Пресс: 277–318. дои : 10.1016/0315-0860(81)90069-0 .
{{cite journal}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - Фейтман, Р.Дж .; Кахан, В. (2000). Улучшение точных интегралов из систем символьной алгебры (PDF) (Отчет). ПАМ. Калифорнийский университет в Беркли: Центр чистой и прикладной математики. Архивировано из оригинала (PDF) 14 августа 2017 г. Проверено 17 мая 2018 г.
- Фуллер, AT (1999). «Хорнер против Холдреда: эпизод в истории корневых вычислений» . История Математики . 26 : 29–51. дои : 10.1006/hmat.1998.2214 .
- Хайэм, Николас (2002). Точность и устойчивость численных алгоритмов . СИАМ. ISBN 978-0-89871-521-7 .
- Холдред, Т. (1820). Новый метод решения уравнений с легкостью и скоростью; с помощью которого находится истинное значение неизвестной величины без предварительного уменьшения. С дополнением, содержащим два других метода решения уравнений, основанных на том же принципе (PDF) . Ричард Уоттс. Архивировано из оригинала (PDF) 6 января 2014 г. Проверено 10 декабря 2012 г.
- Метод Холдреда находится в приложении на следующей странице под номером 45 (52-я страница PDF-версии).
- Хорнер, Уильям Джордж (июль 1819 г.). «Новый метод решения численных уравнений всех порядков методом непрерывной аппроксимации». Философские труды . 109 . Лондонское королевское общество: 308–335. дои : 10.1098/rstl.1819.0023 . JSTOR 107508 . S2CID 186210512 .
- Доступен напрямую в Интернете по ссылке, но также перепечатан с оценкой в DE Smith: A Source Book in Mathematics , McGraw-Hill, 1929; Перепечатка Дувра, 2 тома, 1959 г.
- Кнут, Дональд (1997). Искусство компьютерного программирования . Том. 2: Получисловые алгоритмы (3-е изд.). Аддисон-Уэсли. стр. 486–488 в разделе 4.6.4. ISBN 978-0-201-89684-8 .
- Кресс, Райнер (1991). Численный анализ . Спрингер.
- Крипасагар, Венкат (март 2008 г.). «Эффективная микроматематика - методы умножения и деления для микроконтроллеров». Журнал Circuit Cellar (212).
- Либбрехт, Ульрих (2005). «Глава 13» . Китайская математика в тринадцатом веке (2-е изд.). Дувр. ISBN 978-0-486-44619-6 . Архивировано из оригинала 6 июня 2017 г. Проверено 23 августа 2016 г.
- Миками, Ёсио (1913). «Глава 11. Цинь Цзю-Шао» . Развитие математики в Китае и Японии (1-е изд.). Переиздание Chelsea Publishing Co. стр. 74–77.
- Островский, Александр М. (1954). «О двух задачах абстрактной алгебры, связанных с правилом Горнера» . Исследования по математике и механике, представленные Рихарду фон Мизесу . Академическая пресса. стр. 40–48. ISBN 978-1-4832-3272-0 . Архивировано из оригинала 15 апреля 2019 г. Проверено 23 августа 2016 г.
- Пан, Ю. Джа (1966). «О средствах вычисления значений полиномов». Русская математика. Опросы . 21 : 105–136. дои : 10.1070/rm1966v021n01abeh004147 . S2CID 250869179 .
- Панкевич, В. (1968). «Алгоритм 337: вычисление значений полинома и его производных по схеме Горнера» . Коммуникации АКМ . 11 (9). ACM: 633. дои : 10.1145/364063.364089 . S2CID 52859619 .
- Шпигель, Мюррей Р. (1956). Очерк теории и проблем студенческой алгебры Шаума . МакГроу-Хилл. ISBN 9780070602267 .
- Темпл, Роберт (1986). Гений Китая: 3000 лет науки, открытий и изобретений . Саймон и Шустер. ISBN 978-0-671-62028-8 .
- Уиттакер, ET ; Робинсон, Г. (1924). Исчисление наблюдений . Лондон: Блэки.
- Уайли, Александр (1897). «Заметки о науке китайской арифметики» . Китайские исследования . Шанхай. стр. 159–194.
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )- Перепечатано из номеров The North China Herald (1852 г.).
Внешние ссылки [ править ]

- «Схема Хорнера» , Математическая энциклопедия , EMS Press , 2001 [1994]
- Цю Цзинь-Шао, Шу Шу Цзю Чжан (изд. Цун Шу Цзи Чэн)
- Дополнительную информацию о приложении для поиска корней см. в [1]. Архивировано 28 сентября 2018 г. на Wayback Machine.