Jump to content

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

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

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

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

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

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

[ редактировать ]

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

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

( 1 )

Затем это ценность .

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

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

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

( 2 )

Это выражение представляет собой практическое применение Хорнера, поскольку оно предлагает очень быстрый способ определения результата; с (что равно ), являющийся остатком от деления, как показано в примерах ниже. Если является корнем , затем (это означает, что остаток ), что означает, что вы можете учитывать как .

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

Оценивать для .

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

 x0x3    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 :

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

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

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

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

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

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

См. также

[ редактировать ]

Примечания

[ редактировать ]
  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. ^ Анализ с помощью количественных рядов, потоков и различий: с линейным перечислением третьего порядка, Лондон. Из мастерской Пирсона. В 1811 году с. 10, 4-й абзац.
  17. Сборник статей Ньютона, издание 1779 г., в сноске, т. я, с. 270-271
  18. ^ Берггрен 1990 , стр. 304–309.
  19. ^ Темпл 1986 , с. 142.
  20. ^ Миками 1913 , стр. 77.
  21. ^ Либбрехт 2005 , с. 208.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: acca6f397d130614de6144467dc5adc4__1720873440
URL1:https://arc.ask3.ru/arc/aa/ac/c4/acca6f397d130614de6144467dc5adc4.html
Заголовок, (Title) документа по адресу, URL1:
Horner's method - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)