stringtranslate.com

метод Горнера

В математике и информатике метод Горнера (или схема Горнера ) — это алгоритм полиномиальной оценки . Хотя этот метод назван в честь Уильяма Джорджа Хорнера , этот метод намного старше, поскольку он был приписан Жозефу-Луи Лагранжу самим Хорнером и может быть прослежен на многие сотни лет назад китайскими и персидскими математиками. [1] После появления компьютеров этот алгоритм стал фундаментальным для эффективных вычислений с полиномами.

Алгоритм основан на правиле Горнера , в котором многочлен записывается во вложенной форме :

Это позволяет оценивать полином степени n только с помощью умножения и сложения. Это оптимально, поскольку существуют многочлены степени n , которые невозможно вычислить с помощью меньшего количества арифметических операций. [2]

Альтернативно, метод Хорнера также относится к методу аппроксимации корней многочленов, описанному Хорнером в 1819 году. Это вариант метода Ньютона -Рафсона, который стал более эффективным для ручных вычислений за счет применения правила Горнера. Он широко использовался до тех пор, пока компьютеры не стали широко использоваться примерно в 1970 году.

Полиномиальная оценка и длинное деление

Учитывая полином

где – постоянные коэффициенты, проблема состоит в том, чтобы оценить полином при определенном значении

Для этого новая последовательность констант определяется рекурсивно следующим образом:

Тогда значение .

Чтобы понять, почему это работает, полином можно записать в виде

Таким образом, итеративно подставляя в выражение,

Теперь это можно доказать;

Это выражение представляет собой практическое применение Хорнера, поскольку оно предлагает очень быстрый способ определения результата;

где (который равен ) является остатком от деления, как показано в примерах ниже. Если является корнем , то (это означает, что остаток равен ), что означает, что вы можете факторизовать как .

Чтобы найти последовательные значения, вы начинаете с определения , которое просто равно . Затем вы работаете рекурсивно, используя формулу;

пока вы не приедете .

Примеры

Оцените за .

Мы используем синтетическое деление следующим образом:

 х 0х 3  х 2  х 1  х 0 3 │ 2 −6 2 −1 │ 6 0 6 └───────────────────────── 2 0 2 5

Записи в третьей строке представляют собой сумму записей в первых двух. Каждая запись во второй строке представляет собой произведение значения x (3 в этом примере) с записью в третьей строке сразу слева. Записи в первой строке представляют собой коэффициенты оцениваемого многочлена. Тогда остаток от деления на равен5 .

Но по теореме о полиномиальном остатке мы знаем, что остаток равен . Таким образом, .

В этом примере, если мы это видим , записи в третьей строке. Итак, синтетическое деление основано на методе Горнера.

Как следствие теоремы об остатках полинома, записи в третьей строке являются коэффициентами полинома второй степени, частного при делении на . Остаток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 :

1. Регистр, содержащий промежуточный результат, инициализируется значением d .
2. Начните с младшего (крайнего правого) ненулевого бита в m .
2б. Подсчитайте (слева) количество битовых позиций до следующего по значимости ненулевого бита. Если более значимых битов нет, то берем значение текущей битовой позиции.
2в. Используя это значение, выполните операцию сдвига влево на это количество бит в регистре, содержащем промежуточный результат.
3. Если все ненулевые биты были подсчитаны, то в регистре промежуточного результата теперь хранится окончательный результат. В противном случае добавьте d к промежуточному результату и перейдите к шагу 2 со следующим старшим битом m .

Вывод

В общем, для двоичного числа с битовыми значениями ( ) произведение равно

На этом этапе алгоритма требуется, чтобы члены с нулевыми коэффициентами отбрасывались, чтобы учитывались только двоичные коэффициенты, равные единице, поэтому проблема умножения или деления на ноль не является проблемой, несмотря на это следствие в алгоритме. факторизованное уравнение:

Все знаменатели равны единице (или член отсутствует), поэтому это сводится к

или эквивалентно (в соответствии с «методом», описанным выше)

В двоичной математике (с основанием 2) умножение на степень 2 — это просто операция сдвига регистра . Таким образом, умножение на 2 вычисляется в системе счисления по основанию 2 путем арифметического сдвига . Множитель (2-1 ) представляет собой арифметический сдвиг вправо , a (0) не приводит к выполнению операции (поскольку 2 0 = 1 является мультипликативным единичным элементом ), а (2 1 ) приводит к арифметическому сдвигу влево. Произведение умножения теперь можно быстро вычислить, используя только арифметические операции сдвига, сложения и вычитания.

Этот метод особенно быстр на процессорах, поддерживающих операцию сдвига и сложения с одной командой. По сравнению с библиотекой чисел с плавающей запятой C, метод Хорнера жертвует некоторой точностью, однако номинально он работает в 13 раз быстрее (в 16 раз быстрее, когда используется форма « канонической знаковой цифры » (CSD)) и использует только 20% пространства кода. [7]

Другие приложения

Метод Хорнера можно использовать для преобразования между различными позиционными системами счисления - в этом случае x является основанием системы счисления, а коэффициенты a i - это цифры представления по основанию x данного числа - а также может использоваться, если xматрица , и в этом случае выигрыш в вычислительной эффективности еще больше. Однако для таких случаев известны более быстрые методы . [8]

Поиск корня полинома

Используя алгоритм деления в столбик в сочетании с методом Ньютона , можно аппроксимировать действительные корни многочлена. Алгоритм работает следующим образом. Учитывая полином степени с нулями, сделайте первоначальное предположение такое, что . Теперь повторите следующие два шага:

  1. Используя метод Ньютона , найдите наибольший ноль , используя предположение .
  2. Используя метод Горнера, разделите , чтобы получить . Вернитесь к шагу 1, но используйте полином и начальное предположение .

Эти два шага повторяются до тех пор, пока для многочлена не будут найдены все действительные нули. Если аппроксимированные нули недостаточно точны, полученные значения можно использовать в качестве начальных предположений для метода Ньютона, но с использованием полного полинома, а не уменьшенных полиномов. [9]

Пример

Поиск корня полинома с использованием метода Горнера

Рассмотрим полином

который можно расширить до

Из вышесказанного мы знаем, что наибольший корень этого многочлена равен 7, поэтому мы можем сделать первоначальное предположение, равное 8. Используя метод Ньютона, первый ноль числа 7 находится, как показано черным на рисунке справа. Далее делится на, чтобы получить

который на рисунке справа нарисован красным. Метод Ньютона используется для поиска наибольшего нуля этого многочлена с начальной догадкой 7. Самый большой нуль этого многочлена, который соответствует второму по величине нулю исходного многочлена, находится в позиции 3 и обведен красным. Полином 5-й степени теперь делится на, чтобы получить

который показан желтым цветом. Ноль для этого полинома снова находится в точке 2 с использованием метода Ньютона и обведен желтым кружком. Метод Горнера теперь используется для получения

который показан зеленым цветом и имеет ноль при -3. Этот полином далее сводится к

который показан синим цветом и дает ноль -5. Конечный корень исходного многочлена можно найти либо с помощью конечного нуля в качестве первоначального предположения для метода Ньютона, либо путем сокращения и решения линейного уравнения . Как можно видеть, ожидаемые корни -8, -5, -3, 2, 3 и 7 были найдены.

Деленная разность многочлена

Метод Хорнера можно модифицировать для вычисления разделенной разности. Учитывая полином (как и раньше)

действуйте следующим образом [10]

По завершении мы имеем

Это вычисление разделенной разности подвержено меньшей ошибке округления, чем вычисление и отдельно, особенно когда . Подстановка в этом методе дает производную от .

История

Алгоритм Цинь Цзюшао для решения квадратного полиномиального уравнения : x=840 [11]

Статья Хорнера под названием «Новый метод решения числовых уравнений всех порядков методом непрерывной аппроксимации» [12] была зачитана перед Лондонским королевским обществом на его заседании 1 июля 1819 года с продолжением в 1823 году. [12] ] Статья Хорнера во второй части « Философских трудов Лондонского королевского общества» за 1819 год была тепло и широко встречена рецензентом [ постоянная мертвая ссылка ] в выпуске The Monthly Review: или Literary Journal за апрель 1820 года; для сравнения, техническая статья Чарльза Бэббиджа в этом обзоре категорически отвергается. В серии обзоров в « Ежемесячном обзоре» за сентябрь 1821 года делается вывод, что Холдред был первым человеком, открывшим прямое и общее практическое решение числовых уравнений. Фуллер [13] показал, что метод, описанный в статье Хорнера 1819 года, отличается от того, что впоследствии стало известно как «метод Горнера», и что, следовательно, приоритет этого метода должен принадлежать Холдреду (1820).

В отличие от своих английских современников, Хорнер опирался на континентальную литературу, особенно на произведения Арбогаста . Известно также, что Хорнер внимательно прочитал книгу Джона Бонникасла по алгебре, хотя и пренебрег работами Паоло Руффини .

Хотя Хорнеру приписывают создание этого метода доступным и практичным, он был известен задолго до Хорнера. В обратном хронологическом порядке метод Горнера уже был известен:

Цинь Цзюшао в своем «Шу Шу Цзю Чжан» ( «Математический трактат в девяти разделах» ; 1247) представляет портфель методов типа Горнера для решения полиномиальных уравнений, который был основан на более ранних работах математика Цзя Сяня из династии Сун XI века ; например, один метод специально подходит для биквинтик, пример которого приводит Цинь, в соответствии с тогдашней китайской традицией изучения конкретных случаев. Ёсио Миками в книге «Развитие математики в Китае и Японии» (Лейпциг, 1913 г.) писал:

«...кто может отрицать тот факт, что выдающийся процесс Горнера был использован в Китае, по крайней мере, почти на шесть долгих веков раньше, чем в Европе... Мы, конечно, никоим образом не намерены приписывать изобретение Горнера китайскому происхождению, но по прошествии времени вполне возможно, что европейцы могли знать о китайском методе прямым или косвенным образом». [20]

Ульрих Либбрехт заключил: «Очевидно, что эта процедура — китайское изобретение… этот метод не был известен в Индии» . Он сказал, что Фибоначчи, вероятно, узнал об этом от арабов, которые, возможно, позаимствовали у китайцев. [21] Извлечение квадратных и кубических корней аналогичным образом уже обсуждалось Лю Хуэем в связи с задачами IV.16 и 22 в Цзю Чжан Суань Шу , в то время как Ван Сяотун в 7-м веке предполагал, что его читатели могут решать кубики с помощью аппроксимации. метод описан в его книге Цзигу Суаньцзин .

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

Примечания

  1. ^ 600 лет назад, китайский математик Цинь Цзюшао и 700 лет назад, персидский математик Шараф ад-Дин ат-Туси.
  2. ^ Пан 1966
  3. ^ Панкевич 1968.
  4. ^ Островский 1954.
  5. ^ Пан 1966.
  6. ^ Кнут 1997.
  7. ^ Крипасагар 2008, с. 62.
  8. ^ Хайэм 2002, раздел 5.4.
  9. ^ Кресс 1991, с. 112.
  10. ^ Фейтман и Кахан 2000
  11. ^ Либбрехт 2005, стр. 181–191.
  12. ^ аб Хорнер 1819.
  13. ^ Фуллер 1999, стр. 29–51.
  14. ^ Каджори 1911.
  15. ^ Аб О'Коннор, Джон Дж.; Робертсон, Эдмунд Ф. , «Метод Хорнера», Архив истории математики MacTutor , Университет Сент-Эндрюс
  16. ^ Анализ по количественной серии, Fluctiones ac Differentias: Cum Enumeratione Linearum Tertii Ordinis, Londini. Экс Officina Pearsoniana. Анно MDCCXI, с. 10, 4-й абзац.
  17. Сборник статей Ньютона, издание 1779 г., в сноске, т. я, с. 270-271
  18. ^ Берггрен 1990, стр. 304–309.
  19. ^ Темпл 1986, с. 142.
  20. ^ Миками 1913, с. 77
  21. ^ Либбрехт 2005, с. 208.

Рекомендации

Внешние ссылки