- •Глава 2
- •2.1. Введение
- •Относительные и абсолютные ошибки
- •2.3. Ошибки, содержащиеся в исходной информации
- •2.4. Ошибки ограничения
- •2.5. Ошибки округления
- •2.6. Распространение ошибок
- •2 .7. Графы вычислительных процессов
- •Пример 1
- •2.9. Памятка программисту
- •Упражнения
- •Численное решение уравнений
- •5.1. Введение
- •5.2. Метод последовательных приближений
- •5.3.Усовершенствованный метод последовательных приближений
- •5.4. Метод ньютона — рафсона
- •5.5. Случай почти равных корней
- •5.6. Сравнение методов и их ошибок округления
- •5.7. Корни многочленов
- •5.8. Влияние неточности коэффициентов многочлена
- •5.9. Системы уравнений
- •5.10. Комплексные корни
- •5.11. Нахождение исходного приближения
- •Упражнения
- •Глава 8
- •8.1. Введение
- •8.3. Ошибки округления
- •8.5. Влияние погрешностей коэффициентов. Достижимая точность решения
- •8.6. Итерационные методы решения систем линейных уравнений
- •8.7. Сравнение методов
- •8.8. Практический пример 10: проведение кривой методом наименьших квадратов
- •Лекция №1 Численное интегрирование
- •Лекция №2
- •Правило Симпсона.
- •Метод Гаусса
- •Методы прогноза и коррекции
- •Анализ ошибок при использовании метода прогноза и коррекции
Пример 1
Сложение положительных чисел, расположенных в порядке возрастания их величин. Рассмотрим задачу сложения четырех положительных чисел:
y=x1+x2+x3+x4,
где
0 < x1 < x2 < x3 < x4.
Граф этого процесса изображен на рис. 2.3. Предположим, что все исходные величины заданы точно и не имеют ошибок, и пусть
r1 , r2 и r3 являются относительными ошибками округления после каждой следующей операции
сложения. Последовательное применение правила для подсчета полной ошибки окончательного результата приводит к формуле
Рис.
2.3. Граф
вычислительного процесса для сложения
y
=
x1+
x2
+ +x3+
x4
, причем О
<
x1
< x2
< x3
< x4.
Сокращая сумму x1+x2+x3 в первом члене и умножая все
выражение на y=x1+x2+x3+x4 , получаем
ey=r1(x1+x2)+r2(x1+x2+x3)+r3(x1+x2+x3+x4).
Учитывая, что ошибка округления равна 5-10-t, окончательно
имеем
|ey|(3x1+3x2+2x3+x4)*5*10-t.
Из этой формулы ясно, что максимально возможная ошибка (абсолютная или относительная), обусловленная округлением, становится меньше, если сначала складывать меньшие числа.
Результат довольно удивительный, так как вся классическая математическая подготовка инженера или ученого основана на предположении, что при перемене мест слагаемых или их группировке сумма не изменяется, причем зачастую эти свойства операции сложения просто постулируются. Разница, если она до сих пор не очевидна читателю, заключается в том, что ЭЦВМ не может производить вычисления с. бесконечно большой точностью, а именно такие вычисления рассматриваются в классической математике. Любое число в ЭЦВМ должно быть представлено с помощью конечного набора значащих цифр, и вот это-то простое ограничение может самым неожиданным образом изменить многие «само собой разумеющиеся» математические правила.
Для сложения п чисел, не имеющих первоначально никаких ошибок, общая формула для ошибки округления запишется так:
|ey|[(n-1)x1+(n-1)x2+(n-2)x3+ … 2xn-1+xn]*5*10-t.
Рассмотрим численный пример. Предположим, что необходимо найти сумму следующих чисел:
0.2897*100
0.4976*100
0.2488*101
0.7259*101
0.1638*102
0.6249*102
0.2162*103
0.5233*103
0.1403*104
0.5291*104
Если сложение производится, начиная с наименьшего числа в порядке возрастания чисел, то последовательно получающиеся частичные суммы будут такими, как показано ниже. (Первая частичная сумма есть сумма первых двух чисел, вторая частичная сумма есть сумма первой частичной суммы и третьего числа и т. д.) Необходимо помнить, что «применяемая» нами ЭЦВМ имеет четыре значащих цифры в мантиссе каждого числа, а все числа, мантиссы которых имеют более четырех значащих цифр, должны быть округлены. Это условие лежит в основе всех выкладок данного параграфа, хотя для реальных ЭЦВМ была бы более типичной мантисса, содержащая восемь значащих цифр.
0.7873*100
0.3275*101
0.1053*102
0.2691*102
0.8940*102
0.3056*103
0.8289*103
0.2232*104
0.7523*104
С другой стороны, если сложить те же 10 чисел в обратном порядке, от самого большого к самому малому, то частичные суммы будут следующими:
0.6694*104
0.7217*104
0.7433*104
0.7495*104
0.7511*104
0.7518*104
0.7520*104
0.7520*104
0.7520*104
Если при каждом сложении сохранять все значащие цифры, то можно найти точную сумму, равную 0.75229043*104. Ошибка при вычислении суммы от меньшего числа к большему равна
-0.1*100 , в то время как при обратном порядке вычислений ошибка равна 2.9.10°, или почти в 30 раз больше.
Максимально возможные ошибки составляют 5.5*10° для первого варианта и 33*10° для второго варианта. В обоих случаях действительные ошибки гораздо меньше максимально возможных. Максимально возможная ошибка могла бы получиться, например, если бы при округлении каждой частичной суммы пришлось бы отбрасывать величину, близкую к половине единицы младшего разряда, но так случается очень редко.
З аметим также, что если не суммировать два наименьших числа, а суммировать только восемь больших чисел, то сумма, вычисленная от меньших чисел к большим, слегка изменяется и становится равной 0.7522*104, в то время как сумма, вычисленная от больших чисел к меньшим, остается неизменной и равной 0.7520*104. Дело в том, что во втором варианте оба последних числа слишком малы для того, чтобы повлиять на последнюю значащую цифру суммы, если их прибавлять по одному. В первом же варианте эти числа складываются в самом начале и их сумма уже достаточно велика, чтобы изменить последнюю значащую цифру окончательной суммы.
Пример 2
Сложение почти равных положительных чисел. Предположим, что мы снова складываем четыре положительных числа, но на этот раз они почти равны одно другому. Можно написать
xi = x0 + i , i = 1 , 2 , 3 , 4 ,
где
|i| << x0.
(Символ «<<» означает «много меньше».) Применяя выведенную в предыдущем примере формулу для ошибки округления для сложения четырех чисел, имеем
|ey| ( 9x0 + 3|1| + 3|2| + 2|3| + |4| ) * 5*10-t.
Так как |i| малы по сравнению с x0, то приблизительно можно написать |ey| 4.5*10-t+1*x0.
Таков будет верхний предел для ошибки округления, если сложение ведется согласно графу, изображенному на рис. 2.3. Рассмотрим другой путь вычисления той же суммы, согласно графу, изображенному на рис. 2.4. Здесь y = ( x1 + x2 ) + ( x3 + x4 ), и операции в скобках
Р и с. 2.4. Другой вид графа для сложения четырех чисел.
Порядок сложения определяется числами, поставленными рядом с кружками сложения.
необходимо выполнить вначале. Если обозначить ошибки округления через r1 , r2 и r3 соответственно порядку выполнения операций сложения, то получим
Преобразуя последнюю формулу, получаем
|ey|(2x1+2x2+2x3+2x4)*5*10-t.
Подставляя xi = x0 + i и пренебрегая | i | по сравнению с x0 , окончательно имеем
| ey | 4*10-t+1*x0.
Сравнивая верхние пределы ошибки округления для двух способов вычисления одной и той же суммы, замечаем, что второй способ имеет несколько меньший верхний предел для ошибки. Результат вовсе не очевидный.
В общем случае если имеется п2 положительных чисел приблизительно одинаковой величины, то общая ошибка округления уменьшается, если числа сложить сначала группами по п чисел, а потом сложить п частичных сумм. Для больших п верхний предел ошибки округления при таком способе составляет всего 1/n от соответствующего предела при сложении чисел друг за другом (см. рис. 2.3).
Рассмотрим численный пример. Требуется сложить четыре числа:
x1 = 0.5243*100
x2= 0.5262*100
xз= 0.5226*100
x4= 0.5278*100
Можно положить x0 = 0. 5200; вычисления по-прежнему производятся с четырьмя значащими цифрами. Складывая числа одно за другим и округляя, получаем у = 0.2102*101. С другой стороны, вычисляя x1 + x2 = 0.1051*101 и x3 + x4 = 0.1050*101 , получаем у = 0.2101*101. Точное значение суммы равно 0.21009*101.
У неискушенного читателя может возникнуть вопрос, стоят ли эти маленькие усовершенствования того труда, который на них затрачивается. Дело в том, что в этой главе мы рассматриваем примеры, содержащие не больше десятка операций. Впоследствии нам придется рассматривать вычислительные процессы, которые требуют сотен и даже тысяч арифметических операций. В этих условиях даже небольшая ошибка может быть сильно увеличена последующими операциями. Поэтому методы уменьшения верхних пределов ошибок, разбираемые в этой главе, несомненно представляют ценность для практики.
Пример 3
Вычитание двух почти равных чисел. Предположим, что необходимо вычислить z = x - y. Тогда
из формулы для распространения ошибки при вычитании имеем
П
редположим,
кроме того, что х
и у
являются соответствующим образом
округленными положительными числами
,
так что
Если разность х - у мала, то относительная ошибка z может стать большой, даже если абсолютная ошибка мала. Так как в дальнейших вычислениях эта большая относительная ошибка будет распространяться, то она может поставить под сомнение точность окончательного результата вычислений. Рассмотрим простой пример:
x = 0.5628*104
y = 0.5631*104
Тогда
z = - 0.0003*104
Зная x и y , мы можем написать
К
ак
видим, относительные ошибки х
и у
малы. Однако
Эта относительная ошибка очень велика, и, что важнее всего, она будет распространяться в ходе последующих вычислений. Если, например, следующей операцией будет умножение полученной разности на 0.7259*104, то результат составит 0.2178*105 этот результат имеет четыре десятичные значащие цифры, и неискушенный программист может счесть этот результат точным до 4-го знака, хотя в нем можно доверять не более чем одному знаку.
