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

1.4.Погрешность произвольной функции

Пусть задана произвольная функция u = f(x1, x2, …,xn), где x1, x2, …,xn — приближенные величины, а — их известные предельные абсолютные погрешности. Тогда предельная абсолютная погрешность результата — функции u для малых вычисляется по формуле [7]:

(1.17)

Как видно из формулы (1.17), для ее применения требуется, чтобы функция f(x1, x2, …,xn) была дифференцируемой по всем переменным.

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

Решение. Применяя формулу (1.17), имеем

Для функции u находим . Учитывая предельную абсолютную погрешность u ≈ 0,04, получаем, что результат имеет две верные значащие цифры в узком смысле. Ответ можно записать в виде u = 1,4 ± 0,04.

1.5.Представление чисел в компьютере и погрешность

Так как для записи числа в компьютере выделяется ограниченная область памяти, то числовые значения ограничены. Границы значений зависят от типа числа и конкретной среды программирования или математического пакета. В таблице 1.1 представлены диапазоны значений чисел различных типов в языке программирования C.

Табл. 1.1

Тип

Размер памяти в байтах

Диапазон возможных значений

short int

2

–32768 <= n <= 32767

long int

4

–2147483648 <= n <= 2147483647

unsigned short int

2

0 <= n <= 65535

unsigned long int

4

0 <= n <= 4294967295

float

4 байта = 32 бита

1— знак, 8 — экспонента, 23 — мантисса

Приблизительно 1,17∙10–38 < x < 3,4∙10+38

double

8 байт = 64 бита

1— знак, 11 — экспонента, 52 — мантисса

Приблизительно

2,22∙10–308 < x < 1,79∙10+308

long double

10 байт = 80 бит

3,4∙104932 < x < 3,4∙10+4932

Если при вычислениях для переменной типа float будет получено число с порядком меньшим чем –38, оно будет заменено нулем, а если порядок числа превысит 38, то произойдет так называемый «аварийный останов» (система прекратит выполнение программы пользователя) и выведено сообщение о переполнении порядка. Для переменной типа float число с порядком меньшим чем –38 является нулем, а число с порядком большим, чем 38 — бесконечностью. Для переменной типа double нулем являются значения с порядком меньшим чем –308, а бесконечностью — значения с порядком большим, чем 308.

В таблице 1.2 приведены константы для чисел с плавающей точкой стандартной библиотеки языка программирования C.

Табл. 1.2

Константа

Описание константы

Значение

FLT_DIG

Количество верных десятичных цифр в объекте типа float

6

FLT_EPSILON

Минимально возможное значение переменной типа float, такое, что 1.0 + FLT_EPSILON ≠ 1.0

1.192093e–07

FLT_MAX

Максимальное число с плавающей точкой типа float

3.402823e+38

FLT_MIN

Минимальное число с плавающей точкой типа float

1.175494e–38

DBL_DIG

Количество верных десятичных цифр в объекте типа double

15

DBL _EPSILON

Минимально возможное значение переменной типа double, такое, что 1.0 + DBL_EPSILON ≠ 1.0

2.220446e–16

DBL _MAX

Максимальное число с плавающей точкой типа double

1.797693e+308

DBL _MIN

Минимальное число с плавающей точкой типа double

2.225074e–308

LDBL_DIG

Количество верных десятичных цифр в объекте типа long double

18

LDBL _EPSILON

Минимально возможное значение переменной типа long double, такое, что 1.0 + LDBL_EPSILON ≠ 1.0

LDBL _MAX

Максимальное число с плавающей точкой типа long double

LDBL _MIN

Минимальное число с плавающей точкой типа long double

В программах OpenOffice Calc, Microsoft Excel и Mathcad границы значений числа приблизительно соответствуют типу double языка C. Мантисса может содержать до 15 десятичных цифр. Например, число десятичных знаков числа с плавающей точкой в программе Excel можно найти очень простым способом: записать в ячейку формулу =1/3 и с помощью команды меню «формат ячейки» определить формат «числовой с 20 знаками после запятой». Мы увидим, что мантисса числа содержит 15 (значащих) десятичных цифр, остальные цифры равны нулю.

Если в программах Excel и Mathcad вычислить значение 1 + 10 –15, то получим ноль, а значение выражения 1 + 10–14 будет равно 1,00000000000001. Это число содержит 15 значащих цифр. Предельной относительной погрешностью представления числа с плавающей точкой в программах Excel и Mathcad можно считать 10 –14.

Относительная погрешность представления чисел с плавающей точкой («машинное эпсилон») определяется как наименьшее положительное число ε, при сложении которого с единицей получается отличное от единицы число. Это значение зависит от количества знаков, которые можно записать в мантиссе числа.

Для приблизительной оценки значения относительной погрешности представления можно предложить следующий алгоритм:

1) ε = 1;

2) ε = ε /2;

3) Если 1 < 1 + ε, то переходим к 2), иначе — переходим к 4);

4) Выводим значение 2ε.

Вычислим по этому алгоритму в программе Excel значение ε. Для этого вводим в ячейке A1 значение 1, в ячейке A2 формулу = A1/2, а в ячейке B2 — формулу = 1 + A2. Выделим две ячейки A2:B2 и маркером заполнения протянем вниз до строки 50. В столбце B получим результаты сложения с единицей убывающих чисел из столбца A. В таблице 1.2 приведены последние пять строк вычисленных значений. Очевидно, что за предельную относительную погрешность можно принять значение ε = 7,1054310 –15, или, если округлить, ε ≈ 10 –14, и максимальное число значащих цифр в мантиссе составляет 15.

Табл.1.2

A

B

46

2,84217E–14

1,00000000000003000000

47

1,42109E–14

1,00000000000001000000

48

7,10543E15

1,00000000000001000000

49

3,55271E–15

1,00000000000000000000

50

1,77636E–15

1,00000000000000000000

Создадим в программе Excel макрос — пользовательскую функцию для определения значения ε.

Выполним команду меню «Сервис — Макрос — Редактор Visual Basic»; в открывшемся окне выберем меню «InsertModule» и введем описание функции:

Function epsilon()

eps = 1

2 eps = eps / 2

If 1 < 1 + eps Then GoTo 2

epsilon = eps

End Function

На рис. 1.2 показано окно Редактора Visual Basic с введенным текстом программы.

Перейдем на лист Excel и введем в любой ячейке формулу = epsilon(), получим в этой ячейке значение

ε = 2,22045E-16 = 0,000 000 000 000 000 222045.

Отличие полученного значения ε = 2,22045E-16 от значения ε = 7,1054310 –15 из таблицы 1.2 объясняется особенностями вывода значений в ячейки программы Excel. При выводе числовых значений в форме с фиксированной запятой количество значащих цифр равно 15, остальные цифры отбрасываются.

Применим алгоритм вычисления «машинного эпсилон» в системе программирования Mathcad. Однако, здесь нас ждут интересные особенности. Введем в Mathcad следующую программу:

Мы видим, что число x = 9,09494701772928∙10 –13 в неравенстве 1 < x + 1 программа Mathcad принимает за ноль, но если мы выполним сложение 1 + 9,09494701772928∙10 –13, то получим 1,00000000000091. Это означает, что в неравенствах в программе Mathcad относительная погрешность составляет 10 –12. Интересно, что в программе Excel и в неравенствах та же относительная погрешность 10 –14, что и в представлении числа с плавающей точкой. Чтобы проверить это в любой ячейке листа Excel введем неравенство в виде формулы =1+10^–14>1. Значение будет равно «ИСТИНА». А если ввести формулу =1+10^–15>1, то получим значение «ЛОЖЬ». Обращаем здесь внимание на то, что в выражении 10^–15 не обязательно брать в скобки показатель степени –15.

Вычислим «машинное эпсилон» для языка программирования Borland C++ (версия 5.02). Для этого составим следующую программу:

#include <stdio.h>

int main(){

float eps2,eps = 1,x = 1,y;

do{

eps = eps/2; y = x + eps;

}while (x < y); eps2 = 2* eps;

printf("\neps = %e:", eps2);

return 0;

}

В результате выполнения программы получим eps = 1.192093e–07. Это значение совпадает с числом FLT_EPSILON = 1.192093e–07, приведенным в таблице 1.1 (Минимально возможное значение переменной типа float, такое, что 1.0 + FLT_EPSILON ≠ 1.0). Если в этой программе мы заменим тип float на тип double, то получим значение eps = 2.220446e–16, которое совпадает с константой DBL_EPSILON.

Задания для самостоятельной работы

1. Ток протекает по резистору 10 ом, сопротивление задано с точностью 10%. Ток равен . Согласно закону Ома, падение напряжения на резисторе равно произведению тока на сопротивление. Какова относительная и абсолютная ошибки вычисленного значения напряжения? Ошибками округления пренебречь.

2. Средняя длина авиалинии от Нью-Йорка до Сан-Франциско равняется 2700 милям, но может быть на 200 миль короче или длиннее в результате вариаций маршрута самолета. Средняя скорость самолета на этой линии составляет 580 миль в час, но может оказаться на 60 миль в час больше или меньше из-за ветра. Каковы верхний и нижний пределы времени полета?

3. Реактивное сопротивление емкости дается формулой , где — реактивное сопротивление емкости в Омах, — частота в герцах, — емкость в фарадах. Указать границы возможных значений для и

4. Положение свободно падающего тела в вакууме дается формулой , где — ускорение свободного падения в , — время, прошедшее с начала падения в . Предположим, что точно, но время может быть измерено с точностью до 0,1 сек. Покажите, что с ростом абсолютная ошибка вычисленного значения увеличивается, но относительная ошибка — уменьшается.

5. Вычислить значение функции u и ее предельные абсолютную и относительную погрешности, если известны погрешности ее аргументов. Найти количество верных значащих цифр функции u (в широком и узком смысле). Параметры m и n заданы точно. Данные брать из табл.1.3.

Таблица 1.3.

u

x

y

m

k

1)

m sin(x+ ky)

3,15  0,02

1,15  5%

2

1,5

2)

m sinx + cos(1+ ky)

1,25  0,002

1,26  10%

3

1,6

3)

x m + y k

1,23  0,02

1,58  5%

4

1,7

4)

sin(xm) + cosky

1,12  0,01

1,28  2%

5

1,8

5)

(x m + y k) – 1

1,32  0,01

1,97  2%

6

1,9

6)

ln(mx + ky)

3,56  0,04

2,56  2%

7

2,1

7)

mx2 + ky2

1,84  0,04

6,21  2%

8

2,2

8)

log2(mx + ky)

5,12  0,02

1,01  2%

9

2,3

9)

(x 2 – m + ky – 2)

3,44  0,02

1,21  3%

8

2,4

10)

cos(mx + ky)

4,11  0,02

1,06  4%

7

2,5

11)

m e x + k e – y

1,32  0,02

1,12  5%

6

2,7

12)

e mx + ky

2,12  0,02

1,52  6%

5

2,9

13)

cos(xm + ky)

2,11  0,02

1,1  10%

4

2,5

14)

3 mx + 2 ky

1,54  0,002

1,5  8%

3

2,6

15)

m(x2 + ky2)

1,12  0,02

1,6  2%

2

2,7

16)

3 mx ∙ 2 ky

1,22  0,02

1,9  2%

9

2,8

17)

tg(mxky)

0,42  0,02

0,14  2%

2

0,2

18)

lg(mxky)

1,45  0,002

1,5  2%

2

0,1

19)

m x + k e – y

1,22  0,02

0,1  1%

6

3,5

20)

m e x + k – y

0,52  0,004

2  5%

5

3,4

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