Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2939

.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
2.65 Mб
Скачать

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

 

 

 

a

.

a

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример. ( 2.3)

0.05

0.022 (2.2%) . Так как погреш-

 

 

2.3

 

 

 

 

ность всегда округляется в сторону увеличения, то ( 2.3) 0.03.

Приведенные оценки погрешностей приближенных чисел справедливы, если в записи этих чисел все значащие цифры верные.

Значащими цифрами

считаются все цифры данного числа,

начиная с первой ненулевой цифры

 

 

 

 

 

 

Пример.

1)

в числе

0.037 - две значащие цифры: 3 и 7 .

 

 

2)

в числе 14.80 - все четыре цифры значащие.

При записи числа

в форме с плавающей точкой число знача-

щих цифр не должно меняться,

т.е.

нужно соблюдать равносиль-

ность преобразований.

 

 

 

 

 

 

 

 

 

 

Пример.

Записи

7500

0.7500 104

и

0.110 102

11.0 -

равносильные,

а записи

7500

0.75 104

и

0.110 102

11.0 -

неравносильные.

 

 

 

 

 

 

 

 

 

 

 

Действия над приближенными числами.

 

 

1)

При

сложении или вычитании чисел их абсолютные по-

грешности складываются:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(a

b)

a

b .

 

 

2)

При умножении или делении чисел друг на друга их отно-

сительные погрешности складываются:

 

 

 

 

 

(a b)

 

 

b ;

 

 

 

a

 

b .

 

 

 

 

a

 

 

 

 

 

a

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

3) При возведении в степень приближенного числа его отно-

сительная погрешность умножается на показатель степени:

 

 

 

 

 

 

(a k )

k

a .

 

 

 

Пример 1. Найти относительную погрешность функции:

11

 

 

 

 

 

y

 

 

a

b

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3 (1

 

x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Решение. По приведенным формулам имеем:

 

 

 

 

 

 

 

 

 

1

(a

b)

3 x

(1 x)

 

1

 

 

a

 

b

3

 

 

 

x

 

(1)

 

x

.

y

2

2

 

 

a

b

 

 

 

 

x

 

 

 

1 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ясно,

что

при x

1 может получиться очень большая

по-

грешность.

Рассмотрим более подробно случай вычитания близких чисел. Запишем выражение для относительной погрешности разности:

(a b)

 

 

(a

b)

 

 

a

 

 

b

.

При этом погрешность

 

 

 

 

a

b

 

 

 

a

b

 

 

a

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

может быть

сколь угодно большая.

 

 

 

 

 

 

Пример 2.

 

Пусть

a

2520, b

2518.

 

 

 

Решение.

 

В

этом

случае

a

b

0.5 и относительные

погрешности

 

 

 

 

 

 

0.5

 

 

0.0002

0.02% . Относительная

 

a

b

 

 

 

 

 

 

2518

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

погрешность разности равна

(a

b)

0.5

0.5

0.5

 

50% .

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

Пример. 38.723 4.9 43.6 ; 425.4 0.047 425.4 .

При умножении и делении приближенных чисел количество значащих цифр выравнивается по наименьшему из них.

1.4. ПОГРЕШНОСТИ ВЫЧИСЛЕНИЙ. УМЕНЬШЕННИЕ ПОГРЕШНОСТИ

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

Рассмотрим источники погрешностей на отдельных этапах

12

решения задачи.

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

2)Исходные данные задачи часто являются основными источниками погрешностей. Это так называемые неустранимые погрешности, т.к. они не могут быть уменьшены вычислителем ни до начала решения задачи, ни в процессе ее решения. Здесь следует стремиться к тому, чтобы все исходные данные были примерно одинаковой точности.

3) Численный метод также является источником погрешностей. Это связано, например, с заменой интеграла суммой, усечением рядов при вычислении значений функций, интерполированием табличных данных и т.п.

Как правило, погрешность численного метода регулируема, т.е. она может быть уменьшена до любого размерного значения путем изменения некоторого параметра (например, шага интегрирования, числа членов усеченного ряда и т.п.).

Погрешность метода обычно стараются довести до величины, в несколько раз меньше погрешности исходных данных. Дальнейшее снижение погрешности метода не приведет к повышению точности результатов, а лишь приведет к необоснованному увеличению объема вычислений (стоимости).

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

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

Максимальная относительная погрешность при округлении

равна

max

0.5 1 k

, где

- основание системы счисления,

 

 

 

 

k - количество разрядов мантиссы числа. При простом отбрасывании лишних разрядов эта погрешность увеличивается вдвое.

13

 

В современных машинах с памятью, измеряемой в байтах,

принята шестнадцатиричная

 

система счисления и любое число с

плавающей точкой содержит

шесть значащих цифр, т.е.

16 ,

k 6

 

и

максимальная

погрешность

округления

max

0.5 16

5

0.5 10

8 .

 

 

 

 

 

 

 

 

 

 

 

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

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

Пример. Важной функцией анализа является e x . Так как

она используется часто, важно иметь возможность вычислять e x машинной программой для любого числа с плавающей точкой x .

Существует множество методов вычисления e x . Известно, что для

любых

x

число e x может быть представлено в виде сходящегося

ряда:

 

 

 

 

 

 

 

 

 

 

 

 

e x

 

x 2

 

x3

x 4

 

 

 

1 x

 

 

 

 

 

... .

 

 

 

2!

3!

 

4!

 

 

 

 

 

 

 

 

Попробуем воспользоваться этим рядом для вычисления

e x .

Пусть плавающая система характеризуется параметрами

10

и k

5 . Возьмем x

5.5 . Вот числа,

которые получаются:

e 5.5

1.0000

38.446

1.5997

 

 

 

 

 

5.5000

30.208

 

 

 

 

 

 

15.125

20.768

 

 

 

 

 

 

27.730

12.692

 

 

 

 

 

38.129

6.9803

0.0026363.

 

 

 

 

41.942

3.4902

 

 

 

 

 

 

 

14

 

Мы ограничиваемся 25 членами, так как последующие сла-

гаемые уже не меняют сумму. Удовлетворительный

ли ответ полу-

чаем?

На самом деле (истинный результат) e 5.5

0.00408677.

 

То есть, вычисление с помощью ряда привело к ответу, не

имеющему верных цифр.

 

 

Что же было не правильно?

 

 

1)

Некоторые члены, и, следовательно, промежуточные сум-

мы,

на

несколько порядков больше конечного результата. При

этом такие члены, как 38.09, уже сдержат ошибку округления, почти равную окончательному результату.

2) Кроме того, четыре старших разряда (наиболее значимых) каждого из восьми членов, превышающих по модулю 10, были потеряны. Эти восемь членов следовало бы брать с десятью значащими цифрами, чтобы получить шесть значащих цифр в ответе. Более того, потребовалась бы еще одиннадцатая цифра, чтобы можно было надеяться получить верную шестую цифру в ответе.

Это явление иногда называют катастрофической потерей верных знаков. Оно часто встречается в плохо продуманных вычислениях. Однако не эта потеря знаков является причиной ошибки в ответе; она попросту увеличивает ошибки, уже присутствующие в слагаемых. Хотя, иной раз возможно удерживать в вычислениях больше число значащих цифр с целью избежать катастрофической потери верных знаков, это всегда обходится дорого как по времени ис-

полнения,

так и по памяти и

зачастую требует специальных про-

граммных средств.

 

 

 

Для рассматриваемой задачи есть гораздо лучшая возмож-

ность вычислить сумму для

x

5.5 и затем взять обратное число:

e

5.5

1

 

 

 

1

0.0040865

 

 

 

 

 

 

e5.5 1

5.5

15.125 ...

 

 

 

(в нашем пятизначном десятичном примере). При таком способе вычислений ошибка снижается до 0.007% .

Вывод: даже короткая последовательность вычислений

может быть связана с серьезным ошибками округления.

Еще хуже

обстояло бы дело для x

100.

 

3) Кроме того, перевод чисел из одной системы счисления в

другую также может быть источником погрешности из-за

того, что

основание одной системы

счисления не является степенью основа-

15

ния другой (например, 10 и 2 ). Это может привести к тому, что в новой системе счисления число становится иррациональным.

Пример. Число 0.1 при переводе в двоичную систему при-

мет вид:

 

 

 

 

0.1

0.00011001100...

Может оказаться, что с шагом

0.1 нужно при вычислениях

пройти отрезок 0.1

от

x 1 до

x 0 . Десять шагов не да-

дут точного значения

x

0 .

 

Уменьшение погрешностей. Рассмотрим случай, когда правильной организацией вычислений можно избежать потери точности. Пусть надо найти сумму пяти четырехразрядных чисел:

S 0.2764 0.3944 1.475 26.46 1364.

Складывая числа и округляя результат до четырех значащих цифр, получим S 1393. Однако при вычислении на машине округление происходит после каждого сложения. Предполагая условно сетку четырехразрядной, проследим вычисление на машине суммы чисел от наименьшего к наибольшему:

0.2764 0.3944 0.6708; 0.6708 1.475 2.156;

 

 

2.156 26.46 28.62;

28.62 1364

1393.

т.е.

S1

1393 - верный результат.

Теперь вычислим в обратном

порядке:

 

 

 

 

 

 

1364 26.46 1390; 1390 1.475 1391;

 

 

 

1391 0.3944 1391; 1391 0.2764 1391.

 

S2

1393 менее точно. Потеря точности здесь происходит из-за

того,

что прибавления к большему числу малых чисел не происхо-

дит, так как они выходят за рамки разрядной сетки ( a

b

a , если

a

b ).

Здесь необходимо придерживаться правила:

сложение

чисел следует проводить по мере их возрастания.

В машинной арифметике из-за погрешности округления важен порядок выполнения операций. Известные законы коммутативности (и дистрибутивности) здесь не всегда выполняются. Т.о., при решении задачи на ЭВМ нужно использовать "маленькие хитрости".

 

Пример 1.

При вычислении (a x)2

может оказаться

x

a

и

a

x a . В этом случае может

помочь замена

(a x)2

a2

2ax x2 .

 

16

0,1 .

 

 

x3

 

x5

 

x7

Пример 2.

s i nx x

 

 

 

 

 

. . .. По теореме

3!

5!

7!

 

 

 

Лейбница остаток сходящегося знакочередующегося ряда, не превышает значения первого из отброшенных членов (по абсолютной величине).

 

Вычислим значение sin x

при

 

x

0.5236 (300 ) . Члены

ряда,

меньшие

10 4 не будем учитывать. Вычисления

проведем с

четырьмя верными знаками:

 

 

 

 

 

sin 0.5236

0.5236

0.2393 10 1

0.3281 10 3

0.500.

 

В рамках принятой точности это отличный результат. По-

скольку ряд сходится при

 

x

,

используем его для вычис-

ления

функции

при

x

6.807

(3900 ) .

Получим

sin6.807 0.5493.

Относительная погрешность здесь составляет

10% (вместо ожидаемого значения

 

0.01% по теореме Лейбни-

ца).

 

 

 

 

 

 

 

 

 

Это объясняется погрешностями округлений и способом суммирования ряда (слева направо без учета величины членов).

Не всегда помогает и повышенная точность вычислений. Например, при x 25.66 (14700 4 360 300 ) даже при учете

членов до 10 8 и вычислениях с 8 значащими цифрами в результате аналогичных вычислений (суммирование слева направо ) получается абсурд:

sin 25.66 24.

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

годаря чему аргумент будет находиться на отрезке

При вычислении экспоненты аргумент можно разбить на сумму целой и дробной частей

ex en a en ea

использовать разложение в ряд только для ea , а en выполнить умножением.

17

1.5. УСТОЙЧИВОСТЬ. КОРРЕКТНОСТЬ. СХОДИМОСТЬ

Задача вычисления e 5 показывает, как плохо продуманный алгоритм может привести к неудовлетворительному результату даже для хорошо поставленной задачи. Трудность была преодолена путем изменения алгоритма.

Для некоторых задач "хорошие" ответы нельзя получить никаким алгоритмом, потому что задача чувствительна к малым ошибкам, допущенным при представлении данных и в арифметике.

Очень важно различать эти два типа ловушек, поскольку неустойчивые алгоритмы и чувствительные задачи встречаются почти во всех областях вычислительной математики.

Однако если известны их “симптомы”, то диагностировать эти задачи уже довольно просто.

Устойчивость. Рассмотрим погрешности исходных данных. Это так называемые неустранимые погрешности и вычислитель не может с ними бороться. Поэтому нужно хотя бы иметь представление об их влиянии на точность окончательных результатов.

Мы вправе надеяться на то, что погрешность результатов имеет порядок погрешности исходных данных. Всегда ли это так? К сожалению нет. Некоторые задачи весьма чувствительны к неточностям в исходных данных. Эта чувствительность характеризуется так называемой устойчивостью.

Этот аспект численного анализа не зависит от плавающей системы или выбранного алгоритма.

Пусть в результате решения задачи по исходному значению

величины x находится значение исходной величины

y . Если ис-

ходная величина имеет абсолютную погрешность x ,

то решение

имеет погрешность y .

 

Задача называется устойчивой по исходному параметру x ,

если решение y

непрерывно от него зависит, т.е. малые прираще-

ние исходной величины

x приводит к малому приращению ис-

ходной величины

y .

 

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

18

исходных данных приводит к большим погрешностям в решении или вовсе к неверному результату.

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

Пример 1. Отыскание действительных корней многочленов

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

a)n

 

 

 

 

 

 

 

 

 

 

 

вида

(x

(0

 

1) . Его корни:

x

a

 

n

( n -

четное).

(x 2)2

10

6 ,

x

2

10

3 .

 

 

 

 

 

 

 

 

 

 

 

1,2

 

 

 

 

 

 

 

 

 

 

 

 

Изменение правой части на величину

 

приводит к измене-

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

нию корней (погрешности) порядка

 

n .

Иллюстрацией неустойчи-

вой задачи является пример (1963).

 

 

 

 

 

 

 

 

 

 

 

Пример 2. Рассматривается многочлен

 

 

 

 

 

 

 

P(x) (x

1)(x

2)...(x

20)

 

x20

210x19 ... .

 

 

Его

корни:

x1

1;

x2

 

2 ; …; x20

20

хорошо разде-

лены.

Этот пример возник на фоне плавающей системы с

2 и

k 30. Чтобы ввести тот или иной коэффициент в машину, его необходимо округлить до 30 - значного двоичного числа.

Предположим, что лишь для одного из двадцати коэффициентов делается ошибка в младшем двоичном разряде. Пусть коэф-

фициент при x19 изменяется с 210 на 2 23 (около 10 7 ):

210 2 23 . Как повлияет это малое изменение на корни многочлена? В результате вычислений даже с точностью до 11 значащих цифр получаются совершенно другие значения корней (для наглядности приведем с округлением до трех знаков):

x1

1.00 ;

x2

2.00 ;

x3

3.00 ;

x4

5.00

;

x6

6.00 ;

x7

7.00 ;

x8

8.01;

x9

8.92 ;

x10,11 10.1 0.644i ;

x12,13

11.8

1.65i ;

x14,15

14

2.52i ;

x16,17

 

16.7

2.81i ;

 

 

x18,19

19.5

1.94i ;

x20

2.08.

 

 

 

То есть, половина корней стали комплексными. Причинане- устойчивость самой задачи.

Корректность. Задача называется поставленной корректно, если для любых значений исходных данных (из некоторого класса)

19

ее решение существует, единственно и устойчиво по исходным данным.

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

Вместе с тем отметим, что в настоящее время развиты методы решения некоторых некорректных задач. Это в основном так называемые методы регуляризации.

Они основываются на замене исходной задачи корректно поставленной. Последняя содержит некоторый параметр при стремлении которого к нулю решение этой задачи переходит в решение исходной задачи.

Неустойчивость некоторых алгоритмов. Иногда при решении корректно поставленной задачи может оказаться неустойчивым ме-

тод ее решения (примеры

для

 

e x , sin x ). В частности, было полу-

чено,

что

sin 25.66

24.

 

 

 

 

 

 

 

 

 

 

 

 

Еще один пример неустойчивого алгоритма. Пусть надо вы-

числить интегралы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

J n

xne x

1dx ,

n

1,2,... .

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

Интегрируя по частям

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(u

xn , du

 

nxn

1,

 

dv

 

 

ex 1dx,

v

ex 1) , получим

 

 

1

n

 

x 1

 

n

 

x 1

 

1

1

n 1 x 1

 

 

 

 

 

 

 

 

x

e

x

e

 

nx

 

 

 

 

dx

 

 

 

 

0

 

e

dx

 

 

0

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

или:

J n

1 nJn

1 ,

(n

2,3,...) , где

J1

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

Пусть

 

10 и

k 6 . Пользуясь рекуррентным соотно-

шением, получим:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

J1

0.367879

 

 

J 6

 

0.127120

 

 

 

 

J 2

0.263242

 

J 7

 

0.110160

 

 

 

 

J3

0.207274

 

J8

 

0.118720

 

 

 

20

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