Файл: Элементы математического моделирования в программных средах MATLAB 5 и Scilab (Андриевский Фрадков).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.04.2024
Просмотров: 440
Скачиваний: 1
ближаются все ее удаленные члены. Применимость основного понятия высшей математики - предела - также ставится под сомнение ... Лля выяснения границ применимости привычных понятий удобно ввести следующее определение.
О п р е д е л е н и е . Машинным эпсилоном называется наименьшее представимое в компьютере число е, удовлетво-
ряющее условию 1 + е > 1, т.е. € т |
= min{e : 1 + е > 1}. |
||||
П |
р а в и л о |
1. |
Величина |
ет характеризует |
наимень- |
шую |
относительную |
погрешность |
вычислений и зависит от |
||
конкретного экземпляра |
компьютера. |
|
|||
Величина ет может быть вычислена с помощью |
простой |
программы. Такая программа содержится в современных пакетах программ и производит настройку внутренних параметров пакета под данный компьютер. Например, в системе MATLAB, чтобы узнать величину ет Для данного компьютера, достаточно просто набрать команду eps). Лля версии MATLAB 5 PC Windows, £m « 2.22 • 10"16. В микрокалькуляторах и персональных компьютерах величина ет колеблется вблизи 10"7, в зависимости от конкретного компьютера
(при |
обычной |
точности |
вычислений). |
Очевидно, что если |
€ т > |
10""*, то |
на данном |
компьютере |
нельзя гарантировать, |
что в результатах будет содержаться не менее к верных значащих цифр. Напомним, что цифра числа называется верной, если абсолютная погрешность числа не превосходит половины единицы того разряда, в котором эта цифра находится.
Лва следующих примера показывают, что эквивалентные математические формулы могут быть неэквивалентными по
точности вычислений. |
|
|
|
|
|
|
|
|
|
|||
П р и м е р 4.5.3. Пусть ет = |
10~2 |
и требуется |
решить |
урав- |
||||||||
нение х2 + 9.9х - 1 |
= 0. |
Очевидно, все |
|
результаты |
можно |
|||||||
округлять до двух значащих |
цифр. Если |
применять для ре- |
||||||||||
шения уравнения х2 |
+рх |
+ q = |
0 формулу х1 2 = |
^ ^ |
где |
|||||||
D2 |
= р2 - 4 т о |
получим \[Ъ « |
10, хх |
« 0.05, х2 « |
-9.95. |
|||||||
Однако верный ответ для хх будет хх |
|
« |
0.1. |
Ошибка по- |
||||||||
лучена при вычитании близких чисел. |
|
Если |
же |
вычислять |
||||||||
Xi по эквивалентной |
формуле хх 2 |
= —2 |
|
|
^ ,—, то |
получаем |
||||||
|
о |
|
|
|
|
|
р ± V D |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
x i ^ |
9 Q + Ю ~ |
0-1- |
Правда, по этой формуле х2 будет вычи- |
|||||||||
слено уже с двукратной |
погрешностью. |
|
|
|
|
|
|
167
Пример 4.5.4. Известно, что при статистических |
рас- |
||
четах оценку дисперсии случайной величины по |
измерени- |
||
2 |
г д е |
® |
= |
ям можно вычислить по формуле <т = |
|
|
|
2 |
|
Х |
|
jfX^x®»» или по эквивалентной формуле <7 = ^ |
|
~~ У- |
Попробуем оценить дисперсию выборки хх = 1234.1, х2 =
1234.2, х3 = 1234.3. |
Вычисляя на |
микрокалькуляторе, |
име- |
|||||||||||||
ем: х |
= |
1234.2, |
|
х2 = 1.5232496, jEx? |
= 15232496 и по пер- |
|||||||||||
вой формуле <72 = 0. |
По второй формуле получаем |
результат |
||||||||||||||
<72 = |(0 . 1 2 +0 2 + 0.12) « |
0.67 • 10"2, который |
легко получить и |
||||||||||||||
устно. |
|
|
|
|
При |
выборе |
формулы |
и порядка |
|
вычи- |
||||||
П р а в и л о |
2. |
|
||||||||||||||
слений |
избегать |
вычитания |
близких |
чисел |
и деления |
на |
малые |
|||||||||
величины. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример 4.5.5. |
Найдем |
решение двух |
очень |
похожих си- |
||||||||||||
стем из двух линейных уравнений: |
|
|
|
|
|
|
|
|
||||||||
|
|
Система 1: |
|
|
Решение: |
|
|
|
|
|
||||||
|
|
Г х + 5у |
= |
17, |
|
|
Г х = |
17, |
|
|
|
|
|
|||
|
|
\ |
1.5х + 7.501 у =25.5. |
\ у = 0. |
|
|
|
|
|
|||||||
|
|
Система 2: |
|
|
Решение: |
|
|
|
|
|
||||||
|
|
Г х + 5у = |
17, |
|
|
Г х = 32, |
|
|
|
|
|
|||||
|
|
\ |
1.5® + 7.499у |
= 25.5. |
\ у = - 3 . |
|
|
|
|
|
||||||
Столь большие различия в ответах |
возникли |
из-за то- |
||||||||||||||
го, что |
матрицы |
коэффициентов |
систем |
Л;,г |
= |
1,2 |
п л о х о |
|||||||||
о б у с л о в л е н ы : |
величины Д, = (letЛ; малы. |
Действитель- |
||||||||||||||
но, Дх = |
0.001, |
Д2 |
= -0.001 (Д = апа22 |
- ai2a2i). |
|
|
|
|
|
|||||||
П р а в и л о |
3. |
Избегать плохо |
обусловленных |
|
матриц. |
|||||||||||
Если |
это не удается, |
то использовать |
для работы |
с ними |
спе- |
|||||||||||
циальные |
методы |
[112, |
104, 20]. |
|
|
|
|
|
|
|
|
|
||||
Пример 4.5.6. |
Числа, представимые, |
например, |
в типич- |
ном микрокалькуляторе, лежат в диапазоне 10~88 < |х| < 1086. При выходе результата действия за левую границу диапазона выдается сообщение "underflow" ("исчезновение порядка"), при выходе за правую границу - "overflow" ("переполнение"). 1 При переполнении обычно говорят, что плохи исход-
1 В пакете MATLAB при исчезновении порядка переменной присваивается нулевое значение, а при переполнении - значение Inf
("бесконечность").
168
ные данные, а при исчезновении порядка полагают результат равным нулю. Но не следует торопиться. Пусть, например, вычисляется величинах при а = Ю""30,Ь= Ю"6 0 ,с= Ю~40, d = Ю-50. Если выполнять действия в следующем порядке: х = а • b/c/d, то компьютер сообщит об исчезновении порядка; если вычислить х = \ jcjd • а • Ь, то получим переполнение. Если же вычислить, например, х = а/с - fc/d, то получим правильный ответ х = 1. Этот же ответ можно получить, если отмасштабировать переменные, например, умножив на Ю40.
П р а в и л о |
4. |
При переполнении |
или исчезновении |
||||
порядка |
следует |
попытаться |
изменить |
последовательность |
|||
действий, |
ввести |
масштабные |
множители |
и т.д. При исчез- |
|||
новении порядка не всегда |
следует |
обнулять результат. |
|||||
Пример 4.5.7. |
Пусть |
снова е т |
= 10"2 |
и требуется вычи- |
|||
слить сумму |
|
|
|
|
|
|
|
|
|
5 = |
100 + 0.1 + |
... + 0.1 |
|
||
|
|
|
|
2000 слагаемых |
|
Если вести суммирование слева направо, то получим 5 = 100, поскольку с учетом округления до двух значащих цифр 100+ +0.1 = 100. Если вычислять справа налево, то после сложения тысячи слагаемых получим 100, дальнейшее прибавление по 0.1 ничего не изменит и результат окажется: 5 = 200, что, конечно, уже ближе к истине. Но правильный результат 5 = 300 можно получить, только если сложить 1000 чисел по 0.1, затем еще 1000 чисел по 0.1, а после этого сложить промежуточные суммы.
П р а в и л о |
5. При сложении следует располагать слага- |
||||
емые |
в порядке |
возрастания абсолютных |
величину |
стараясь, |
|
чтобы |
при каждом сложении |
порядки |
величин |
различались |
|
мало. |
При необходимости цикл |
суммирования разбивается на |
|||
несколько более |
коротких. |
|
|
|
Аналогичное правило действует при перемножении большого числа сомножителей.
Пример 4.5.8. При расчетах методами последовательных приближений часто ведут вычисления до тех пор, пока поправка (разность между текущими значениями и последующими приближениями) не станет меньше заданного порога. При этом, как правило, не обеспечивается заданная погрешность результата.
169
Пусть, например, требуется |
вычислить |
величину |
S = |
= YlkLi р" с точностью до Ю-3. |
Если вести |
вычисления до |
|
тех пор, пока общии член ряда -К не станет меньше 10 |
, т.е. |
||
к |
|
|
|
до г = 32, то получим 5 = 1.610, в то время как на самом |
|||
деле S = -g2- = 1.650... Если же попытаться вычислить |
таким |
||
образом приближенную сумму ряда J^jfcLi р |
т о погрешность |
останется бесконечной, как бы мала ни становилась величина
р поскольку ряд расходится. |
|
|
|
|
|||||
П р а в и л о |
6. Нужно |
помнить, что остановка |
итераци- |
||||||
онного процесса |
хх, х2 ,... |
по косвенному |
критерию |
(например, |
|||||
по критерию |
\хп |
— xn-i| |
< е или |
|F^rn)| |
< е - в задаче |
решения |
|||
уравнения |
F(x) |
= 0, по критерию |
| | ^ ( £ п)|| < s - в задаче опти- |
||||||
мизации |
f(x) |
и т. д.) |
не гарантирует |
достижения |
заданной |
||||
погрешности |
\хп — limn^oo хп\ < е. |
|
|
|
|||||
П р и м е р 4.5.9. [104]. Пусть требуется вычислить |
интегра- |
||||||||
лы |
|
^ |
|
|
|
|
|
|
|
Еп= |
I |
xnex'ldx) |
|
п = 1,2,..., 10 при em = |
10"7. |
||||
|
|
Jо |
|
|
|
|
|
|
|
Для величин Еп можно получить рекуррентное соотноше- |
|||||||||
ние |
|
|
|
Еп |
= 1-пЕп-х. |
|
|
(4.44) |
|
|
|
|
|
|
|
Попытавшись вычислить интегралы рекуррентно, пользуясь (4.44), получим: Ех = 0.367879,..., Е7 = 0.110160, Es = 0.118720, Eq = —0.0684800, т.е. уже для Е9 получен бессмысленный результат. Причина в том, что начальная ошибка округления быстро накапливается: при вычислении Е2 она умножается на 2, затем наЗ, 4,... ,9. Попробуем переписать формулу (4.44) в другом виде:
Еп.г = |
(4.45) |
и будем вычислять в обратном порядке, начав с произвольно-
го начального приближения для Еп, |
п > 10. Например, начав |
||
с Е2о = 0, получим: |
|
|
|
£,9 = 0.0500000, |
Еи= |
0.0627322, |
|
Ец |
= 0.0500000, |
£ 1 3 = |
0.0669477, |
Е17 |
= 0.0527778, |
Еи= |
0.0717733, |
Еи |
= 0.0557190, |
£ „ = |
0.0773523, |
Ехь |
= 0.0590176, |
£ 1 0 = |
0.0838771, |
|
|
Е9= |
0.0916123. |
170