Устойчивость и неустойчивость алгоритмов

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

Алгоритм, в котором погрешность, допущенная в начальных данных или допускаемая при вычислениях, с каждым шагом не увеличивается или увеличивается незначительно, называется устойчивым. В противном случае, если погрешность существенно увеличивается от шага к шагу, алгоритм называется неустойчивым.

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

Пример. Известно, что ряд Тейлора для функции Устойчивость и неустойчивость алгоритмов - student2.ru

Устойчивость и неустойчивость алгоритмов - student2.ru

сходится для всех Устойчивость и неустойчивость алгоритмов - student2.ru . Рассмотрим один из возможных алгоритмов суммирования этого ряда:

Шаг 1. Задать Устойчивость и неустойчивость алгоритмов - student2.ru . Устойчивость и неустойчивость алгоритмов - student2.ru Устойчивость и неустойчивость алгоритмов - student2.ru ; Устойчивость и неустойчивость алгоритмов - student2.ru .

Шаг 2. Устойчивость и неустойчивость алгоритмов - student2.ru

Шаг 3. Если Устойчивость и неустойчивость алгоритмов - student2.ru Устойчивость и неустойчивость алгоритмов - student2.ru = Устойчивость и неустойчивость алгоритмов - student2.ru ,

то вычисления закончены, результат - Устойчивость и неустойчивость алгоритмов - student2.ru

иначе Устойчивость и неустойчивость алгоритмов - student2.ru = Устойчивость и неустойчивость алгоритмов - student2.ru Устойчивость и неустойчивость алгоритмов - student2.ru , Устойчивость и неустойчивость алгоритмов - student2.ru ,

переход на шаг 2.

Проверка на шаге 3 учитывает то обстоятельство, что машинная арифметика является приближенной. Выражение Устойчивость и неустойчивость алгоритмов - student2.ru Устойчивость и неустойчивость алгоритмов - student2.ru будет иметь то же значение, что и Устойчивость и неустойчивость алгоритмов - student2.ru , если число Устойчивость и неустойчивость алгоритмов - student2.ru достаточно мало. Если провести вычисления по этому алгоритму для различных значений Устойчивость и неустойчивость алгоритмов - student2.ru , получим числа, представленные в табл.1. Для Устойчивость и неустойчивость алгоритмов - student2.ru эти числа соответствуют истинным значениям, но для Устойчивость и неустойчивость алгоритмов - student2.ru картина неудовлетворительная: в некоторых случаях неверны даже знаки результатов. Это говорит о неустойчивости рассмотренного алгоритма.

Таблица1 –

Устойчивость и неустойчивость алгоритмов - student2.ru Устойчивость и неустойчивость алгоритмов - student2.ru Устойчивость и неустойчивость алгоритмов - student2.ru
-1 -5 -10 -15 -20 2.718282 148.4132 22026.47 3269017. 4.8516531*108 0.3678794 6.7377836*10-3 -1.6408609*10-4 -2.2377001*10-2 1.202966 2.718282 148.4132 22026.46 3269017. 4.8516520*108 0.3678795 6.7379470*10-3 4.5399930*10-5 3.0590232*10-7 2.0611537*10-9

Пример. Необходимо вычислить Устойчивость и неустойчивость алгоритмов - student2.ru

При вычислении интеграла по частям получим:

Устойчивость и неустойчивость алгоритмов - student2.ru ,

т.е. Устойчивость и неустойчивость алгоритмов - student2.ru . (10)

Предположим, что вычисления проводятся в системе чисел с плавающей точкой, для которой Устойчивость и неустойчивость алгоритмов - student2.ru :

Устойчивость и неустойчивость алгоритмов - student2.ru

Поскольку для любого Устойчивость и неустойчивость алгоритмов - student2.ru при Устойчивость и неустойчивость алгоритмов - student2.ru : Устойчивость и неустойчивость алгоритмов - student2.ru , то истинное значение Устойчивость и неустойчивость алгоритмов - student2.ru . Что привело к ошибке? Единственная ошибка округления, сделанная в приведенных выше вычислениях, - это ошибка в Устойчивость и неустойчивость алгоритмов - student2.ru , когда Устойчивость и неустойчивость алгоритмов - student2.ru округляется до шести значащих цифр. Последующие значения Устойчивость и неустойчивость алгоритмов - student2.ru получены округлением результатов, вычисленных точно по содержащему ошибку округления значению Устойчивость и неустойчивость алгоритмов - student2.ru . Формула (10) точна для действительной арифметики, следовательно явная ошибка в Устойчивость и неустойчивость алгоритмов - student2.ru всецело обязана ошибке округления в Устойчивость и неустойчивость алгоритмов - student2.ru . Ошибка в Устойчивость и неустойчивость алгоритмов - student2.ru - Устойчивость и неустойчивость алгоритмов - student2.ru ,

Устойчивость и неустойчивость алгоритмов - student2.ru ,

т.е. ошибка в Устойчивость и неустойчивость алгоритмов - student2.ruУстойчивость и неустойчивость алгоритмов - student2.ru . Аналогично, ошибка в Устойчивость и неустойчивость алгоритмов - student2.ruУстойчивость и неустойчивость алгоритмов - student2.ru и т.д. Ошибка в Устойчивость и неустойчивость алгоритмов - student2.ruУстойчивость и неустойчивость алгоритмов - student2.ru . Истинное значение Устойчивость и неустойчивость алгоритмов - student2.ru . Таким образом, возникающая вследствие неустойчивости алгоритма ошибка – абсолютная погрешность – при вычислении Устойчивость и неустойчивость алгоритмов - student2.ru значительно больше искомого значения Устойчивость и неустойчивость алгоритмов - student2.ru , что не даст возможности получить ни одного верного знака в записи числа Устойчивость и неустойчивость алгоритмов - student2.ru , что и наблюдается при вычислении по абсолютно точной с точки зрения обычной арифметики формуле (10).

Преобразуем формулу (10) эквивалентным образом:

Устойчивость и неустойчивость алгоритмов - student2.ru . (20)

Теперь на каждом шаге вычислений ошибка в Устойчивость и неустойчивость алгоритмов - student2.ru умножается на множитель Устойчивость и неустойчивость алгоритмов - student2.ru . Таким образом, если начать вычисления с некоторого Устойчивость и неустойчивость алгоритмов - student2.ru для Устойчивость и неустойчивость алгоритмов - student2.ru и проводить вычисления в обратном порядке, то любая начальная ошибка или промежуточные ошибки округлений будут уменьшаться на каждом шаге, что говорит об устойчивости алгоритма, отвечающего (20).

Оценим значения Устойчивость и неустойчивость алгоритмов - student2.ru в общем виде. Поскольку при Устойчивость и неустойчивость алгоритмов - student2.ru : Устойчивость и неустойчивость алгоритмов - student2.ru , то на сегменте Устойчивость и неустойчивость алгоритмов - student2.ru : Устойчивость и неустойчивость алгоритмов - student2.ru , а значит:

Устойчивость и неустойчивость алгоритмов - student2.ru , (25)

а это значит, что Устойчивость и неустойчивость алгоритмов - student2.ru .

Таким образом, если в качестве стартового значения для вычислений в соответствии с формулой (20) взять, например, Устойчивость и неустойчивость алгоритмов - student2.ru , значение которого положить равным нулю

Устойчивость и неустойчивость алгоритмов - student2.ru , (30)

то начальная ошибка, допущенная при этом в (30), не превосходит в соответствии с (25) Устойчивость и неустойчивость алгоритмов - student2.ru . Эта ошибка умножится на Устойчивость и неустойчивость алгоритмов - student2.ru при вычислении Устойчивость и неустойчивость алгоритмов - student2.ru , так что ошибка в Устойчивость и неустойчивость алгоритмов - student2.ru - Устойчивость и неустойчивость алгоритмов - student2.ru .

Вычисления, проведенные по ормуле (20), приведут к следующему результату:

Устойчивость и неустойчивость алгоритмов - student2.ru ,

что говорит об устойчивости алгоритма (20).

Наши рекомендации