Алгоритмы поиска корней - Root-finding algorithms

В математика и вычисление, а алгоритм поиска корней является алгоритм для поиска нули, также называемые «корнями», непрерывные функции. А ноль функции ж, от действительные числа к действительным числам или из сложные числа к комплексным числам, это число Икс такой, что ж(Икс) = 0. Поскольку, как правило, нули функции не могут быть точно вычислены или выражены в закрытая форма, алгоритмы поиска корней обеспечивают приближение к нулю, выраженное либо как плавающая точка числа или как маленькие изолирующие интервалы, или диски для сложных корней (интервал или вывод на диск эквивалентен приблизительному выводу вместе с границей ошибки).

Решение уравнения ж(Икс) = г(Икс) это то же самое, что найти корни функции час(Икс) = ж(Икс) – г(Икс). Таким образом, алгоритмы поиска корней позволяют решать любые уравнение определяется непрерывными функциями. Однако большинство алгоритмов поиска корней не гарантируют, что они найдут все корни; в частности, если такой алгоритм не находит корня, это не означает, что корня не существует.

Большинство численных методов поиска корней используют итерация, производя последовательность чисел, которые, надеюсь, сходятся к корню как предел. Им требуется один или несколько первоначальные догадки корня в качестве начальных значений, то каждая итерация алгоритма дает все более точное приближение к корню. Поскольку в какой-то момент итерация должна быть остановлена, эти методы дают приближение к корню, а не точное решение. Многие методы вычисляют последующие значения, оценивая вспомогательную функцию для предыдущих значений. Таким образом, предел равен фиксированная точка вспомогательной функции, которая выбирается так, чтобы корни исходного уравнения были фиксированными точками, и для быстрого схода к этим фиксированным точкам.

Поведение общих алгоритмов поиска корней изучается в численный анализ. Однако для полиномов поиск корней обычно относится к компьютерная алгебра, поскольку алгебраические свойства многочленов являются фундаментальными для наиболее эффективных алгоритмов. Эффективность алгоритма может сильно зависеть от характеристик данных функций. Например, многие алгоритмы используют производная функции ввода, а другие работают над каждым непрерывная функция. В общем, численные алгоритмы не гарантируют нахождение всех корней функции, поэтому неспособность найти корень не доказывает, что корня нет. Однако для многочлены, существуют специальные алгоритмы, которые используют алгебраические свойства для подтверждения того, что ни один корень не пропущен, и поиска корней в отдельных интервалах (или диски для комплексных корней), которые достаточно малы, чтобы гарантировать сходимость численных методов (обычно Метод Ньютона ) к уникальному корню, так расположенному.

Методы брекетинга

Методы скобок определяют последовательно меньшие интервалы (скобки), содержащие корень. Когда интервал достаточно мал, значит, корень найден. Обычно они используют теорема о промежуточном значении, который утверждает, что если непрерывная функция имеет значения противоположных знаков в конечных точках интервала, то функция имеет хотя бы один корень в интервале. Следовательно, они требуют начинать с интервала, так что функция принимает противоположные знаки в конечных точках интервала. Однако в случае многочлены есть другие методы (Правило знаков Декарта, Теорема Будана и Теорема Штурма ) для получения информации о количестве корней в интервале. Они приводят к эффективным алгоритмам для изоляция реального корня многочленов, обеспечивающих нахождение всех действительных корней с гарантированной точностью.

Метод бисекции

Самый простой алгоритм поиска корней - это метод деления пополам. Позволять ж быть непрерывная функция, для которого известен интервал [а, б] такой, что ж(а) и ж(б) имеют противоположные знаки (скобка). Позволять c = (а +б)/2 быть серединой интервала (середина или точка, которая делит интервал пополам). Тогда либо ж(а) и ж(c), или ж(c) и ж(б) имеют противоположные знаки, и один разделил на два размер интервала. Хотя метод деления пополам надежен, он дает один и только один немного точности с каждой итерацией. Другие методы, при соответствующих условиях, могут быстрее повысить точность.

Ложное положение (Regula Falsi)

В метод ложной позиции, также называемый Regula Falsi метод похож на метод деления пополам, но вместо использования поиска в середине интервала он использует Икс-перехват линии, которая соединяет построенные значения функции в конечных точках интервала, то есть

Ложная позиция похожа на секущий метод, за исключением того, что вместо сохранения двух последних точек он сохраняет по одной точке по обе стороны от корня. Метод ложного положения может быть быстрее, чем метод деления пополам, и никогда не будет расходиться, как метод секущей; однако он может не сойтись в некоторых наивных реализациях из-за ошибок округления, которые могут привести к неправильному знаку для ж(c); обычно это может произойти, если скорость изменения из ж большая в окрестности корня.

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

Интерполяция

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

Два значения позволяют интерполировать функцию полиномом первой степени (т.е. аппроксимировать график функции линией). Это основа секущий метод. Три значения определяют квадратичная функция, который аппроксимирует график функции парабола. Это Метод Мюллера.

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

Итерационные методы

Хотя все алгоритмы поиска корней основываются на итерация, итеративный Метод поиска корня обычно использует определенный тип итерации, состоящий из определения вспомогательной функции, которая применяется к последним вычисленным приближениям корня для получения нового приближения. Итерация останавливается, когда фиксированная точка (вплоть до требуемая точность) вспомогательной функции достигается, то есть когда новое вычисленное значение достаточно близко к предыдущим.

Метод Ньютона (и аналогичные методы, основанные на производных)

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

Секущий метод

Замена производной в методе Ньютона на конечная разница, мы получаем секущий метод. Этот метод не требует вычисления (или наличия) производной, но цена сходимости медленнее (порядок составляет примерно 1,6 (Золотое сечение )). Обобщение метода секущих в более высоких измерениях: Метод Бройдена.

Метод Стеффенсена

Если мы воспользуемся полиномиальной аппроксимацией, чтобы удалить квадратичную часть конечной разности, используемой в методе Секанта, чтобы она лучше аппроксимировала производную, мы получим Метод Стеффенсена, который имеет квадратичную сходимость и поведение которого (как хорошее, так и плохое) по существу такое же, как у метода Ньютона, но не требует производной.

Обратная интерполяция

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

Комбинации методов

Метод Брента

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

Корни многочленов

Поиск корней многочлен это давняя проблема, которая на протяжении всей истории была объектом многих исследований. Свидетельством этого является то, что вплоть до XIX века алгебра означал по существу теория полиномиальных уравнений.

Поиск корня линейный полином (первая степень) проста и требует только одного деления. Для квадратичные многочлены (степень два), квадратичная формула дает решение, но его численная оценка может потребовать некоторой осторожности для обеспечения числовая стабильность. Для степеней третьей и четвертой существуют решения в замкнутой форме в терминах радикалы, которые обычно не удобны для численной оценки, так как слишком сложны и требуют вычисления нескольких пкорни вычисление которого не проще, чем прямое вычисление корней многочлена (например, выражение действительных корней многочлена кубический многочлен может включать ненастоящие кубические корни ). Для полиномов пятой степени и выше Теорема Абеля – Руффини утверждает, что в целом нет радикального выражения корней.

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

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

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

Чтобы найти один корень, Метод Ньютона и другие общие итерационные методы работают в целом хорошо.

Самый старый метод поиска всех корней - это когда корень р было найдено, чтобы разделить многочлен на Икср, и итеративно перезапустите поиск корня факторного полинома. Однако, за исключением низких степеней, это не работает из-за числовая нестабильность: Полином Уилкинсона показывает, что очень небольшое изменение одного коэффициента может резко изменить не только значение корней, но и их характер (действительный или комплексный). Кроме того, даже при хорошем приближении, когда кто-то оценивает многочлен с приближенным корнем, можно получить результат, который далеко не будет близким к нулю. Например, если полином степени 20 (степень полинома Уилкинсона) имеет корень, близкий к 10, производная полинома в корне может иметь порядок это означает, что ошибка от значения корня может дать значение полинома в приближенном корне, которое имеет порядок

Чтобы избежать этих проблем, были разработаны методы, которые вычисляют все корни одновременно с любой желаемой точностью. В настоящее время наиболее эффективным методом является Метод Аберта. А свободный реализация доступна под названием MPSolve. Это эталонная реализация, которая может регулярно находить корни многочленов степени более 1000 с более чем 1000 значащими десятичными знаками.

Методы вычисления всех корней можно использовать для вычисления действительных корней. Однако может быть трудно решить, является ли корень с небольшой мнимой частью реальным или нет. Более того, поскольку количество реальных корней в среднем является логарифмом степени, вычисление нереальных корней является пустой тратой компьютерных ресурсов, когда кто-то интересуется действительными корнями.

Самый старый метод вычисления количества действительных корней и количества корней в интервале является результатом Теорема Штурма, но методы, основанные на Правило знаков Декарта и его расширения -Будана и Теоремы Винсента - в целом более эффективны. Для нахождения корней все действуют путем уменьшения размера интервалов, в которых ищутся корни, до получения интервалов, содержащих ноль или один корень. Тогда интервалы, содержащие один корень, можно дополнительно сократить для получения квадратичной сходимости Метод Ньютона к изолированным корням. Главный системы компьютерной алгебры (Клен, Mathematica, SageMath, PARI / GP ) имеют каждый вариант этого метода в качестве алгоритма по умолчанию для действительных корней многочлена.

Поиск одного корня

Наиболее широко используемый метод вычисления корня - это Метод Ньютона, который состоит из итераций вычисления

начиная с хорошо подобранного значения Если ж является полиномом, вычисления выполняются быстрее при использовании Правило Хорнера для вычисления полинома и его производной.

Сходимость обычно квадратичный, он может сойтись очень медленно или даже не сойтись совсем. В частности, если многочлен не имеет действительного корня и реально, то метод Ньютона не может сходиться. Однако, если у многочлена есть действительный корень, который больше, чем больший действительный корень его производной, то метод Ньютона квадратично сходится к этому наибольшему корню, если больше, чем этот больший корень (есть простые способы вычисления верхней границы корней, см. Свойства полиномиальных корней ). Это отправная точка Метод Хорнера для вычисления корней.

Когда один корень р был найден, можно использовать Евклидово деление для устранения фактора Икср от полинома. Вычисление корня из полученного частного и повторение этого процесса в принципе обеспечивают способ вычисления всех корней. Однако эта итерационная схема численно нестабильна; ошибки аппроксимации накапливаются во время последовательных факторизаций, так что последние корни определяются с помощью полинома, который сильно отличается от множителя исходного полинома. Чтобы уменьшить эту ошибку, для каждого найденного корня можно перезапустить метод Ньютона с исходным полиномом и этим приблизительным корнем в качестве начального значения.

Однако нет гарантии, что это позволит найти все корни. На самом деле, проблема нахождения корней многочлена по его коэффициентам, в общем, очень важна. плохо воспитанный. Это иллюстрируется Полином Уилкинсона: корни этого многочлена степени 20 - первые 20 натуральных чисел; изменение последнего бита 32-битного представления одного из его коэффициентов (равного –210) дает полином только с 10 действительными корнями и 10 комплексными корнями с мнимой частью больше 0,6.

Тесно связаны с методом Ньютона Метод Галлея и Метод Лагерра. Оба используют полином и его два первых вывода для итеративного процесса, который имеет кубическая сходимость. Объединяя два последовательных шага этих методов в один тест, мы получаем скорость сходимости из 9, за счет 6 полиномиальных оценок (с правилом Хорнера). С другой стороны, объединение трех шагов метода Ньютона дает скорость сходимости 8 за счет того же количества полиномиальных вычислений. Это дает небольшое преимущество этим методам (менее ясно для метода Лагерра, поскольку квадратный корень должен вычисляться на каждом шаге).

При применении этих методов к многочленам с действительными коэффициентами и действительными начальными точками методы Ньютона и Галлея остаются внутри линии действительных чисел. Чтобы найти сложные корни, нужно выбрать сложные отправные точки. Напротив, метод Лагерра с квадратным корнем в своей оценке сам по себе оставляет действительную ось.

Другой класс методов основан на преобразовании задачи нахождения корней многочлена в задачу нахождения собственных значений сопутствующая матрица полинома. В принципе можно использовать любые алгоритм собственных значений найти корни многочлена. Однако из соображений эффективности предпочтение отдается методам, использующим структуру матрицы, т.е. которые могут быть реализованы в безматричной форме. Среди этих методов есть силовой метод, применение которой к транспонированию сопутствующей матрицы является классическим Метод Бернулли найти корень наибольшего модуля. В метод обратной мощности со сдвигами, который сначала находит наименьший корень, - вот что движет комплексом (cpoly) вариант Алгоритм Дженкинса – Трауба и придает ему числовую стабильность. Кроме того, он нечувствителен к множественным корням и имеет быструю сходимость с порядком. (где это Золотое сечение ) даже при наличии кластерных корней. Эта быстрая сходимость требует трех вычислений полиномов за шаг, что приводит к невязке О(|ж(Икс)|2+3φ), то есть сходимость медленнее, чем при трехшаговом методе Ньютона.

Поиск корней в парах

Если данный полином имеет только действительные коэффициенты, можно избежать вычислений с комплексными числами. Для этого нужно найти квадратичные множители для пар сопряженных комплексных корней. Применение многомерный метод Ньютона к этой задаче приводит Метод Бэрстова.

Реальный вариант Алгоритм Дженкинса – Трауба является усовершенствованием этого метода.

Найти все корни сразу

Простой Дюран-Кернер и немного более сложный Метод Аберта одновременно найти все корни, используя только простые комплексное число арифметика. Ускоренные алгоритмы многоточечной оценки и интерполяции, аналогичные быстрое преобразование Фурье может помочь ускорить их для больших степеней полинома. Желательно выбирать асимметричный, но равномерно распределенный набор начальных точек. Реализация этого метода в свободное программное обеспечение MPSolve является эталоном его эффективности и точности.

Другой метод с этим стилем - Метод Данделина – Греффе (иногда также приписывается Лобачевский ), который использует полиномиальные преобразования многократно и неявно возводить корни в квадрат. Это значительно увеличивает отклонения в корнях. Применение Формулы Вьете, можно легко аппроксимировать модуль корней и, с некоторыми дополнительными усилиями, сами корни.

Методы исключения и вложения

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

Все эти методы включают нахождение коэффициентов сдвинутой и масштабированной версий многочлена. Для больших степеней, БПФ становятся возможными ускоренные методы.

О настоящих корнях см. Следующие разделы.

В Алгоритм Лемера – Шура использует Тест Шура – ​​Кона для кружков; вариант, Алгоритм глобального деления пополам Уилфа использует вычисление числа витков для прямоугольных областей на комплексной плоскости.

В метод разделения круга использует полиномиальные преобразования на основе БПФ, чтобы найти факторы большой степени, соответствующие кластерам корней. Точность факторизации максимизируется с помощью итерации типа Ньютона. Этот метод полезен для поиска корней многочленов высокой степени с произвольной точностью; в этой настройке он имеет почти оптимальную сложность.[нужна цитата ]

Изоляция реального корня

Нахождение действительных корней многочлена с действительными коэффициентами - проблема, которой уделялось много внимания с начала 19 века, и которая до сих пор остается активной областью исследований. Большинство алгоритмов поиска корней могут найти некоторые настоящие корни, но не могут подтвердить, что нашли все корни. Методы поиска всех сложных корней, такие как Метод Аберта может дать настоящие корни. Однако из-за численной неустойчивости многочленов (см. Полином Уилкинсона ) им может понадобиться арифметика произвольной точности для определения того, какие корни настоящие. Более того, они вычисляют все комплексные корни, когда только некоторые из них настоящие.

Отсюда следует, что стандартный способ вычисления действительных корней состоит в вычислении первых непересекающихся интервалов, называемых изолирующие интервалы, каждый из которых содержит ровно один действительный корень, а вместе они содержат все корни. Это вычисление называется изоляция реального корня. Имея интервал выделения, можно использовать быстрые численные методы, такие как Метод Ньютона для повышения точности результата.

Самый старый полный алгоритм изоляции реального корня является результатом Теорема Штурма. Однако он оказывается намного менее эффективным, чем методы, основанные на Правило знаков Декарта и Теорема Винсента. Эти методы делятся на два основных класса, один из которых использует непрерывные дроби а другой - с делением пополам. Оба метода были значительно усовершенствованы с начала 21 века. Благодаря этим улучшениям они достигают вычислительная сложность это похоже на лучшие алгоритмы для вычисления всех корней (даже если все корни действительны).

Эти алгоритмы реализованы и доступны в Mathematica (метод непрерывной дроби) и Клен (метод пополам). Обе реализации могут регулярно находить действительные корни многочленов степени выше 1000.

Нахождение кратных корней многочленов

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

Бесквадратная факторизация многочлена п это факторизация где каждый либо 1, либо многочлен без кратных корней, и два разных не имеют общего корня.

Эффективный метод вычисления этой факторизации - Алгоритм Юна.

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

использованная литература

  • Press, W. H .; Теукольский, С. А .; Vetterling, W. T .; Фланнери, Б. П. (2007). «Глава 9. Поиск корня и нелинейные системы уравнений». Числовые рецепты: искусство научных вычислений (3-е изд.). Нью-Йорк: Издательство Кембриджского университета. ISBN  978-0-521-88068-8.