В математическом подразделе численного анализа численная устойчивость является, как правило, желательным свойством численных алгоритмов . Точное определение устойчивости зависит от контекста. Одно из них — численная линейная алгебра , а другое — алгоритмы для решения обыкновенных и частных дифференциальных уравнений с помощью дискретного приближения.
В числовой линейной алгебре основной проблемой является нестабильность, вызванная близостью к особенностям различного рода, таким как очень малые или почти сталкивающиеся собственные значения . С другой стороны, в числовых алгоритмах для дифференциальных уравнений проблемой является рост ошибок округления и/или небольших колебаний в исходных данных, которые могут вызвать большое отклонение окончательного ответа от точного решения. [ необходима цитата ]
Некоторые численные алгоритмы могут подавлять небольшие колебания (ошибки) во входных данных; другие могут увеличивать такие ошибки. Вычисления, которые, как можно доказать, не увеличивают ошибки аппроксимации, называются численно устойчивыми . Одна из распространенных задач численного анализа — попытаться выбрать алгоритмы, которые являются надежными , то есть не дают сильно отличающегося результата при очень малых изменениях во входных данных.
Противоположным явлением является нестабильность . Обычно алгоритм включает в себя аппроксимативный метод, и в некоторых случаях можно доказать, что алгоритм приблизится к правильному решению в некотором пределе (при использовании реальных действительных чисел, а не чисел с плавающей точкой). Даже в этом случае нет гарантии, что он сойдется к правильному решению, поскольку ошибки округления или усечения с плавающей точкой могут быть увеличены, а не затухнуты, в результате чего отклонение от точного решения будет расти экспоненциально. [1]
Существуют различные способы формализовать понятие устойчивости. Следующие определения прямой, обратной и смешанной устойчивости часто используются в числовой линейной алгебре .
Рассмотрим задачу, которую необходимо решить с помощью численного алгоритма, как функцию f , отображающую данные x в решение y . Результат алгоритма, скажем, y *, обычно будет отклоняться от «истинного» решения y . Основными причинами ошибок являются ошибка округления и ошибка усечения . Прямая ошибка алгоритма — это разница между результатом и решением; в этом случае Δ y = y * − y . Обратная ошибка — это наименьшее Δ x такое, что f ( x + Δ x ) = y * ; другими словами, обратная ошибка говорит нам, какую проблему на самом деле решил алгоритм. Прямая и обратная ошибки связаны числом условий : прямая ошибка по величине не превышает числа условий, умноженного на величину обратной ошибки.
Во многих случаях более естественно рассматривать относительную погрешность вместо абсолютной погрешности Δ x .
Алгоритм считается обратно устойчивым, если обратная ошибка мала для всех входных данных x . Конечно, «малая» — это относительный термин, и его определение будет зависеть от контекста. Часто мы хотим, чтобы ошибка была того же порядка, что и округление единицы , или, возможно, всего на несколько порядков больше .
Обычное определение численной устойчивости использует более общее понятие, называемое смешанной устойчивостью , которое объединяет прямую и обратную ошибки. Алгоритм устойчив в этом смысле, если он решает близлежащую задачу приблизительно, т. е. если существует Δ x, такое, что и Δ x мало, и f ( x + Δ x ) − y * мало. Следовательно, устойчивый в обратном направлении алгоритм всегда устойчив.
Алгоритм является устойчивым вперед, если его прямая ошибка, деленная на число условий проблемы, мала. Это означает, что алгоритм является устойчивым вперед, если его прямая ошибка имеет величину, близкую к некоторому устойчивому назад алгоритму.
Приведенные выше определения особенно актуальны в ситуациях, когда ошибки усечения не важны. В других контекстах, например, при решении дифференциальных уравнений , используется другое определение численной устойчивости.
В числовых обыкновенных дифференциальных уравнениях существуют различные концепции числовой устойчивости, например, A-устойчивость . Они связаны с некоторой концепцией устойчивости в смысле динамических систем , часто устойчивости по Ляпунову . Важно использовать устойчивый метод при решении жесткого уравнения .
Еще одно определение используется в числовых частных дифференциальных уравнениях . Алгоритм для решения линейного эволюционного частного дифференциального уравнения устойчив, если полная вариация численного решения в фиксированный момент времени остается ограниченной при стремлении размера шага к нулю. Теорема эквивалентности Лакса утверждает, что алгоритм сходится, если он последователен и устойчив (в этом смысле). Устойчивость иногда достигается путем включения числовой диффузии . Числовая диффузия — это математический термин, который гарантирует, что округление и другие ошибки в расчетах распределяются и не суммируются, вызывая «разрушение» расчетов. Анализ устойчивости по фон Нейману — это широко используемая процедура для анализа устойчивости конечно-разностных схем , применяемых к линейным частным дифференциальным уравнениям. Эти результаты неприменимы для нелинейных уравнений в частных производных, где общее, последовательное определение устойчивости осложняется многими свойствами, отсутствующими в линейных уравнениях.
Вычисление квадратного корня из 2 (что примерно равно 1,41421) является хорошо поставленной задачей . Многие алгоритмы решают эту задачу, начиная с начального приближения x 0 к , например, x 0 = 1,4, а затем вычисляя улучшенные догадки x 1 , x 2 и т. д. Одним из таких методов является знаменитый вавилонский метод , который задается как x k +1 = ( x k + 2/ x k )/2. Другой метод, называемый «методом X», задается как x k +1 = ( x k 2 − 2) 2 + x k . [примечание 1] Несколько итераций каждой схемы вычисляются в табличной форме ниже с начальными догадками x 0 = 1,4 и x 0 = 1,42.
Обратите внимание, что вавилонский метод сходится быстро независимо от начальной догадки, тогда как метод X сходится крайне медленно при начальной догадке x 0 = 1,4 и расходится при начальной догадке x 0 = 1,42. Следовательно, вавилонский метод численно устойчив, тогда как метод X численно неустойчив.
Числовая стабильность зависит от количества значимых цифр, которые сохраняет машина. Если используется машина, которая сохраняет только четыре самых значимых десятичных цифры, хорошим примером потери значимости могут служить две эквивалентные функции
Сравнивая два приведенных выше результата, становится ясно, что потеря значимости (вызванная здесь катастрофическим сокращением из-за вычитания приближений из соседних чисел и , несмотря на то, что вычитание вычисляется точно) оказывает огромное влияние на результаты, даже несмотря на то, что обе функции эквивалентны, как показано ниже.
Требуемое значение, вычисленное с бесконечной точностью, равно 11,174755... [примечание 2]