В области численного анализа численная устойчивость является весьма желательным свойством математических алгоритмов. Точное определение устойчивости зависит от контекста, особенно в числовой линейной алгебре и алгоритмах решения обыкновенных и частных дифференциальных уравнений с помощью дискретных приближений. р>
«Стабильность гарантирует, что небольшие изменения входных данных не приведут к большим колебаниям конечного результата».
В числовой линейной алгебре интерес в первую очередь представляют неустойчивости, возникающие вблизи почти сингулярных задач, таких как очень малые или почти совпадающие собственные значения. В численных алгоритмах решения дифференциальных уравнений существует проблема, связанная с тем, что ошибки округления или небольшие колебания исходных данных могут привести к большим отклонениям между окончательным ответом и точным решением. Некоторые численные алгоритмы могут сглаживать небольшие колебания и ошибки во входных данных, в то время как другие могут усиливать эти ошибки. Вычисления, которые, как можно доказать, не увеличивают погрешности аппроксимации, называются численно устойчивыми. р>
Обычной задачей в численном анализе является выбор надежных алгоритмов, то есть таких, результаты которых не будут существенно меняться при незначительном изменении входных данных. Противоположное явление — алгоритмическая нестабильность. Часто алгоритм включает в себя метод аппроксимации, и в некоторых случаях можно показать, что алгоритм будет приближаться к правильному решению при использовании действительных чисел вместо чисел с плавающей точкой. Однако в этом случае нет гарантии, что решение будет сходиться к правильному, поскольку ошибки округления или усечения в числах с плавающей точкой могут быть увеличены, что приведет к экспоненциальному росту отклонения от правильного решения. р>
В числовой линейной алгебре понятие устойчивости можно формализовать несколькими различными способами. В этой области часто встречаются общепринятые определения прямой, обратной и смешанной устойчивости. Рассмотрим задачу, решаемую с помощью численного алгоритма, где функция f отображает данные x в решение y. Результат алгоритма y* обычно будет отклоняться от «истинного» решения y. Основными причинами ошибки являются ошибка округления и ошибка усечения. р>
«Прямая ошибка алгоритма — это разница между его результатом и решением; обратная ошибка — это наименьшее значение Δx, такое что f(x + Δx) = y*».
Прямая ошибка — это разница между y* и y; обратная ошибка — это минимальное значение Δx, такое что f(x + Δx) = y*. Между прямой ошибкой и обратной ошибкой существует связь числа условий: размер прямой ошибки не превышает произведения числа условий и обратной ошибки. Во многих случаях более естественно учитывать относительные погрешности. Когда обратная ошибка мала для всех входных данных x, мы называем алгоритм обратно устойчивым. Конечно, «маленький» — это относительный термин, и его определение будет зависеть от конкретного контекста. р>
Часто дается более общее определение численной устойчивости, называемое гибридной устойчивостью, которая объединяет прямую и обратную ошибки. Алгоритм устойчив, если он приблизительно решает соседнюю задачу, то есть существует такое малое Δx, что f(x + Δx) - y* также мало. Поэтому обратно устойчивый алгоритм всегда устойчив. Что касается прямой устойчивости, алгоритм является прямой устойчивостью, если его прямая ошибка, деленная на число обусловленности задачи, относительно мала. р>
При решении дифференциальных уравнений устойчивость определяется по-разному. В числовых обыкновенных дифференциальных уравнениях существуют различные понятия численной устойчивости, например, А-устойчивость. Эти концепции часто связаны с определенными понятиями устойчивости динамических систем, в частности с устойчивостью по Ляпунову. При решении жестких уравнений очень важно использовать устойчивый метод. р>
«Иногда стабильность достигается путем введения числовой диффузии, которая гарантирует, что ошибки округления в расчетах не будут накапливаться до опасных уровней».
Алгоритм решения уравнений в частных производных типа линейной эволюции считается устойчивым, если общее изменение численного решения остается ограниченным при приближении размера шага к нулю. Теорема эквивалентности Лакса утверждает, что если алгоритм последователен и стабилен, он будет сходиться. Однако для нелинейных уравнений в частных производных определение устойчивости гораздо сложнее, поскольку многие свойства нелинейных уравнений отсутствуют в их линейных аналогах. р>
Вычисление квадратного корня из 2 (приблизительно 1,41421) — это четко определенная задача. Многие алгоритмы решают эту проблему, начиная с начального приближения x0, например, x0 = 1,4, а затем непрерывно вычисляя улучшенные предположения x1, x2 и так далее. Типичным методом, который можно использовать, является знаменитый вавилонский метод, формула которого xk+1 = (xk + 2/xk) / 2. р>
Другой метод называется «Метод X», и его формула — xk+1 = (xk^2 − 2)² + xk. Несколько итераций каждого метода записаны под таблицей, и мы видим, что вавилонский метод сходится быстро независимо от первоначального предположения, в то время как метод X сходится очень медленно при x0 = 1,4 и странно расходится при x0 = 1,42. Поэтому вавилонский метод считается численно устойчивым, а метод X — численно неустойчивым. р>
Числовая стабильность также зависит от количества значащих цифр, сохраняемых машиной. Машина, которая сохраняет только четыре значащие цифры, может служить хорошим примером последствий, которые могут возникнуть в результате потери значимости. Например, рассмотрим эквивалентные функции f(x) и g(x). При вычислении f(500) и g(500), даже если эти две функции равны, они дают совершенно разные результаты, показывая, как небольшие ошибки могут привести к большим отклонениям. р>
Подводя итог, можно сказать, что численная стабильность имеет решающее значение в численном анализе, поскольку она влияет на точность и эффективность решения задач. Однако, по вашему мнению, какой алгоритм или метод может оставаться стабильным в нестабильных условиях?