Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл 1 Погрешности вычислений.doc
Скачиваний:
23
Добавлен:
08.02.2015
Размер:
441.34 Кб
Скачать

1.6. Примеры неустойчивости алгоритмов

Пример 1.4. Вычисление экспоненты с помощью ряда Маклорена:

. (1.1)

Как известно, этот ряд сходится на всей числовой оси, однако, при использовании реальных систем представления чисел могут возникнуть ошибки. Рассмотрим вычисления в десятичной системе с длиной мантиссы t=4. Система с усечением: остальные разряды просто отбрасываются.

Найдем . Суммирование закончим, как только абсолютная величина очередного слагаемого станет меньше, чем 0.0001 от суммы ряда. Дальнейшее суммирование бессмысленно. В данном случае в сумме оказывается 25 слагаемых. Выпишем несколько слагаемых:

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

Если слегка изменить значение x, получим вообще парадоксальный результат: значение экспоненты равно 0.004087, в то время как сумма ряда в нашей системе оказывается отрицательной.

Видим, что алгоритм непосредственного суммирования ряда (1.1) в нашей системе оказывается неустойчивым. Однако алгоритм может быть легко улучшен. Чтобы избежать потери точности при вычитании, вычислим и найдем обратную величину. В этом случае вычисления с помощью ряда Маклорена дают неплохой результат:

.

1.7. Пример Уилкинсона

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

Пример 1.5.

Введем многочлен двадцатой степени:

.

Корнями многочлена , естественно, являются натуральные числа от 1 до 20.

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

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

1.

6.00

2.

7.00

3.

7.99

4.

9.11

5.

9.57

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

.

Найдем отсюда производную :

.

При x = k эта производная равна

.

Результаты расчетов по этой формуле представлены в таблице.