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

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 эта производная равна

.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]