ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.08.2019
Просмотров: 4709
Скачиваний: 6

ЛР 1. Распространение ошибок в вычислительных процедурах.
131
величине).
3
k
Теперь посмотрим на мантиссу:
2
52
≈ 4, 5 · 10
15
, таким образом, ман-
тисса содержит 15-16 десятичных знаков; все, что вылезет за эти пределы,
будет отброшено. Установите формат отображения с плавающей точкой:
format long e, выполните sqrt(2) (квадратный корень из 2). Посчитай-
те число выданных цифр.
Точность
Байты
M
0
(маш.ноль)
M
∞
(маш. бесконечность)
Одинарная
4
1, 2
· 10
−38
3, 4
· 10
38
Двойная
8
2, 2
· 10
−308
1, 8
· 10
308
3
k
Казалось бы, такая точность представления способна удовлетворить
любые нужды исследователя. Однако, необходимо помнить, что, напри-
мер, перед тем как два числа будут сложены они должны быть приведе-
ны к единому порядку, а то, что при сложении выйдет за мантиссу будет
отброшено! Поэтому, если сложить 10ˆ8+10ˆ-7 в мантиссу уложатся 15
десятичных знаков и будет получен верный результат, а если выполнить
10ˆ8+10ˆ-8, то малое число выйдет за разрядную сетку, и получим те же
10ˆ8 (проверьте).
3
k
Получается парадоксальная ситуация: давайте прибавим к 1 малое
число 10ˆ-16, но последовательно 10ˆ17 раз
(такие вычисления харак-
терны для задач ЧМ — вычисление рядов, разнообразные итерационные,
разностные задачи...). Легко найти ответ
11, однако, машинная арифме-
тика даёт 1 — ошибка 1000%! Если бы мы начали с конца, т.е. сначала
нашли сумму малых, а затем прибавили к единице, то получили бы вер-
ный результат. Таким образом, машинное сложение, в общем случае, не
коммутативно.
3
k
Знание этих фактов позволяет протестировать компьютер на по-
грешность вычислении. Найдем значение выражения
1+ε
−1
ε
при
ε = 2
−n
,
n = 0, 1, 2, . . .. С точки зрения аналитической математики значение этого
1
Цикл из
10
17
итераций на компьютерах невысокой производительности может вы-
числяться долго. Чтобы убедиться в округлении мантиссы достаточно меньшего коли-
чества итераций, например
10
6
. Прервать длительные вычисления в Matlab можно
клавишами Ctrl+Break.

ЛР 1. Распространение ошибок в вычислительных процедурах.
132
выражения постоянно и равно единице для любых
n. Сделайте предпо-
ложения, при каком значении
n это выражение перестанет отличаться
от единицы, чему будет равно; напишите программу, реализующую этот
алгоритм с пошаговой выдачей номера шага, значения
ε и результата вы-
ражения.
4
k
Рассмотрим погрешности численных методов. Построим алгоритм
вычисления интеграла
I
n
=
R
1
0
x
n
e
x
−1
dx, n = 1, 2, 3, . . . Интегрируя по
частям, находим:
I
1
=
1
R
0
xe
x
−1
dx = xe
x
−1
|
1
0
−
1
R
0
e
x
−1
dx =
1
e
I
2
=
1
R
0
x
2
e
x
−1
dx = x
2
e
x
−1
|
1
0
− 2
1
R
0
xe
x
−1
dx = 1
− 2I
1
· · ·
I
n
=
1
R
0
x
n
e
x
−1
dx = x
n
e
x
−1
|
1
0
− n
1
R
0
x
n
−1
e
x
−1
dx = 1
− nI
n
−1
Вычислите значения интегралов, до
n = 30. Заметьте, что подинтеграль-
ная функция на всем отрезке интегрирования неотрицательна, следова-
тельно, и значение интеграла — положительное число. Более того, подын-
тегральная функция на данном интервале ограничена функцией
y = 1,
т.е. значение интеграла не может превышать единицы. Посмотрите, как
это согласуется с полученными результатами. Попытайтесь на основе по-
лученных сведений о погрешностях объяснить данный феномен.
5
k
Напишите функцию вычисления значения синуса в виде конечной
суммы ряда
(
sin x =
P
∞
k=0
(
−1)
k x
2k+1
(2k+1)!
). По признаку Лейбница погреш-
ность вычисления сходящегося знакопеременного ряда не превышает по
абсолютной величине первого из отброшенных членов. Вычисления чле-
нов ряда проводите до вычисления члена по модулю не превышающего
2
При работе со степенными рядами на компьютере для сокращения объёма вы-
числений полезно рассмотреть выражение
u
n+1
/u
n
. Например, в случае синуса:
u
n
=
(
−1)
n
x
2n+1
(2n + 1)!
и
u
n+1
= (
−1)
n+1
x
2n+3
(2n + 3)!
, откуда
u
n+1
u
n
=
− x
2
(2n + 2)(2n + 3)
. Получаем,
u
0
= x, u
1
= u
0
·
− x
2
(2
· 0 + 2)(2 · 0 + 3)
,
u
2
= u
1
· . . . и т.д. Такой подход позволяет обой-
тись без вычисления «лишних» степеней и факториалов, а следовательно, избежать
больших чисел в числителе и знаменателе.

ЛР 2. Методы дихотомии, Ньютона, простых итераций.
133
10
−17
. Вычислите значение синуса в точках
0,
π
3
,
π
2
, π, 2π, убедитесь, что
полученные значения с высокой степенью точности совпадают с действи-
тельным значением синуса в этих точках. Далее проведите вычисления в
точках
12π, 13π, 14π, выводя результаты по шагам (посчитанный член и
частичную сумму ряда). Полученные результаты объясняются погрешно-
стями округления, в реальных программах значение аргумента приводит-
ся к отрезку
[0;
π
2
].
3.2
ЛР 2. Методы дихотомии, Ньютона, простых итераций.
Решение данных уравнений подразумевает два этапа:
1. Локализация корней — выделение отрезков, на которых находится не
более одного корня.
2. Поиск корня с заданной точностью.
В качестве функции
f (x) рассмотрим полином: f (x) = x
3
− 3x
2
− 9x − 5.
Известно, что корни полинома
P
n
(x) =
P
n
k=0
a
k
x
k
(в общем случае ком-
плексные) лежат внутри круга
|x
p
|
6
1 +
1
|a
n
|
max(
|a
0
|, |a
1
|, . . . , |a
n
−1
|). Мы
только что применили аналитический подход к сужению области нахож-
дения корней.
3
k
Напишите файл-функцию f.m и постройте график функции на от-
резке
[
−10; 10], включив командой grid on отображение линий сетки. Вы-
делите отрезки, содержащие нули функции (графический способ это один
из методов локализации корней). Очевидно, функция имеет корни одинар-
ной и двойной кратности. Запишите вектор p, содержащий коэффициенты
полинома, и найдите его корни, выполнив команду roots(p).
3
k
Напишите программу, реализующую нахождение корня одинарной
кратности методом деления отрезка пополам. Обратите внимание, что ме-
тод дихотомии предполагает, что значения функции на концах отрезка
различаются по знаку. Выведите на экран число итераций.
3
k
Напишите программу нахождения решений уравнения
f (x) = 0 ме-
тодом Ньютона и используйте её для поиска всех корней полинома. Вы-

ЛР 2. Методы дихотомии, Ньютона, простых итераций.
134
ведите на экран число итераций.
4
k
Для кратного корня использовать модифицированный метод Нью-
тона. Выведите на экран число итераций.
3
k
Найдем методом простых итераций корни уравнения
x
2
− a = 0
(квадратный корень из числа
a). Приведем уравнение к виду, удобному
для использования метода:
x =
1
2
a
x
+ x
. Можно убедиться, что правая
часть уравнения удовлетворяет условию сходимости метода (в отличие от
таких представлений как:
x = x
2
+ x
− a, x =
a
x
). Напишите программу
вычисления квадратного корня с машинной точностью.
4
k
Исследовать область сходимости представления
x = x
2
+ x
− a. Про-
извести расчёт в найденной области и за её пределами.
3
k
В Matlab для решения уравнений вида f (x) = 0 есть функция
fzero, в качестве параметров которой передаётся имя файл-функции и
начальное приближение корня (или отрезок его содержащий). Обратите
внимание, что fzero так же как и метод дихотомии требует, чтобы при
переходе через корень функция меняла знак (например, с её помощью не
удастся найти нули функции,
f (x) = sin x + 1, корни полинома двойной
кратности и т.д.)
5
k
Сделайте предположения о том, где находятся корни уравнения
sin x =
x/2 и найдите их, используя все изученные методы.
Реализация функциями MATLAB
fzero — поиск нулей функции
roots — поиск корней полинома
Контрольные вопросы
1. Из каких соображений, и какими методами можно локализовать ис-
комый корень?
2. Каким образом реализуется заданная точность поиска в методе по-
ловинного деления и в методе Ньютона? Чем различаются условия

ЛР 3. Интерполяция функций. Полиномы Лагранжа, Ньютона.
135
прекращения итераций?
3. Почему с помощью метода половинного деления не удаётся находить
корни двойной кратности?
4. Сравните (перечислите преимущества и недостатки) методов Ньютона
и половинного деления.
5. Назовите условия применимости метода Ньютона.
6. Оцените скорость сходимости в методе Ньютона при поиске корней
одинарной и двойной кратности.
7. Назовите условия сходимости метода простых итераций.
8. Каким образом можно априорно вычислить примерное количество
итераций, требуемых для нахождения корня с заданной точностью,
для всех изученных методов?
3.3
ЛР 3. Интерполяция функций. Полиномы Лагранжа, Нью-
тона.
Пусть есть прибор, который в дискретные моменты времени выдаёт сиг-
нал по закону
f (t) = sin πt. Допустим, наблюдатель зарегистрировал пять
отсчётов в моменты времени
t
i
=
i
4
,
i = 0, 1, 2, 3, 4. Задачей наблюдателя
(который не знает закона выдачи сигнала) является получение прибли-
жённого значения функции на отрезке
[0, 1] в любой момент времени.
3
k
Используя линейную интерполяцию, найдите значения функции в
точках:
t = 0,
1
6
,
1
3
,
1
2
и сравните с реальным значением синуса в этих точ-
ках. Постройте графики синуса и ломаной, проходящей через пять задан-
ных точек. Отметьте, насколько сильно они различаются в разных частях
графика. Чем это обусловлено?
3
k
Постройте по заданным пяти точкам интерполяционный многочлен
Лагранжа или Ньютона и, используя его, найдите значения функции в
точках
t = 0,
1
6
,
1
3
,
1
2
, Сравните результаты со значениями, полученными