метод Горнера
![]() | Эту статью может потребовать очистки Википедии , чтобы она соответствовала стандартам качества . Конкретная проблема: См . Обсуждение:Метод Хорнера#Эта статья о двух разных алгоритмах . ( Ноябрь 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 частей: где внутренние суммирования могут быть оценены с использованием отдельных параллельных экземпляров метода Хорнера. Это требует немного больше операций, чем базовый метод Хорнера, но позволяет k -way SIMD выполнять большинство из них . Современные компиляторы обычно оценивают полиномы таким образом, когда это выгодно, хотя для вычислений с плавающей запятой это требует включения (небезопасной) реассоциативной математики. [ нужна ссылка ] .
Приложение к умножению и делению с плавающей запятой
[ редактировать ]Метод Хорнера — это быстрый и эффективный с точки зрения кода метод умножения и деления двоичных чисел на микроконтроллере без аппаратного умножителя . Одно из двоичных чисел, подлежащих умножению, представляется в виде тривиального многочлена, где (используя приведенные выше обозначения) , и . Затем 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 находится, как показано черным на рисунке справа. Следующий делится на чтобы получить который на рисунке справа нарисован красным. Метод Ньютона используется для поиска наибольшего нуля этого многочлена с начальной догадкой 7. Самый большой нуль этого многочлена, который соответствует второму по величине нулю исходного многочлена, находится в позиции 3 и обведен красным. Полином 5-й степени теперь делится на чтобы получить который показан желтым цветом. Ноль для этого полинома снова находится в точке 2 с использованием метода Ньютона и обведен желтым кружком. Метод Горнера теперь используется для получения который показан зеленым цветом и имеет ноль при -3. Этот полином далее сводится к который показан синим цветом и дает ноль -5. Конечный корень исходного полинома можно найти либо используя последний ноль в качестве первоначального предположения для метода Ньютона, либо путем сокращения и решение линейного уравнения . Как можно видеть, ожидаемые корни -8, -5, -3, 2, 3 и 7 были найдены.
Деленная разность многочлена
[ редактировать ]Метод Горнера можно модифицировать для вычисления разделенной разности. Учитывая полином (как и раньше) действуйте следующим образом [ 10 ]
По завершении мы имеем Это вычисление разделенной разности подвержено меньшей ошибке округления, чем вычисление и отдельно, особенно когда . Замена в этом методе дает , производная от .
История
[ редактировать ]результат: х =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.
- ^ Перейти обратно: а б Горнер 1819 г.
- ^ Фуллер 1999 , стр. 29–51.
- ^ Каджори 1911 .
- ^ Перейти обратно: а б О'Коннор, Джон Дж.; Робертсон, Эдмунд Ф. , «Метод Хорнера» , Архив истории математики 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.