Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы научных вычислений. Введение в численные методы для физиков и инженеров
.pdf
Возникновение ошибок вычислений 11
конечное количество цифр мантиссы. Поэтому машинный результат отличается от точного результата деления a на b. Для дальнейшего анализа мы введём следующее правило компьютерной арифметики: машинный результат арифметической операции над двумя машинными числами
можно представить как результат записи точного значения этой операции в память компьютера. Для того чтобы отличать машинные операции
от обычных (точных) операций, мы будем обозначать их таким же знаком в угловых скобках. Тогда, согласно принятому выше правилу, можно
записать
a +b =(a + b)
a −b =(a − b)
a ×b =(a × b)
a /b =(a/b)
,
m
,
m
,
m
.
m
(0.3)
Формулы (0.3) имеют следующий смысл: машинный результат арифметической операции есть ближайшее к точному результату машинное
число. Машинный результат также зависит от типа операции и чисел a
и b. Например, если точный результат лежит вне интервала допустимых
в компьютере чисел (результат не принадлежит [−ε
]), то мы стал-
∞,ε∞
киваемся с ситуацией, называемой переполнением порядка. Эту ситуацию компьютер трактует как фатальную ошибку, и дальнейшие вычисления прекращаются. В правильно работающей программе такие ситуации
должны быть исключены. Если абсолютное значение точного результата меньше, чем ε
, то возникает ситуация, называемая исчезновением
0
порядка, и, хотя это не является фатальной ошибкой, такая ситуация
также нежелательна.
Объединяя выражения (0.2) и (0.3), мы получим формулы для моделирования ошибок арифметических операций:
a +b =(a + b)
a −b =(a − b)
a ×b =(a ×b)
a /b =(a/b)
=(a + b)(1 + α)+β,
m
=(a −b)(1 + α)+β,
m
=(ab)(1 + α)+β,
m
=(a/b)(1 + α)+β.
m
Эти формулы приводят к следующей оценке для ошибки, возникающей
при выполнении операций с плавающей точкой:
|a ∗b − (a ∗ b)| ε
+ ε1|a ∗ b| ,
0
где ∗ обозначает любую из четырёх арифметических операций. Эта оценка может использоваться для анализа поведения ошибки при реализации

12 Введение
различных вычислительных алгоритмов. Это очень важный вопрос, так
как часто возникает ситуация, когда при выполнении некоторого вычислительного процесса происходит накапливание ошибки, что приводит к
значительному искажению конечного результата. Например, если предположить, что β =0, тогда ошибка вычисления
N
a
n
n=1
может быть оценена как
×a2×... × aN−
a
1
N
n=1
a
n
ε
(N − 1)
1
N
n=1
|an|.

ГЛАВА 1
Решение уравнения f( x)=0
Список обозначений
x — точное значение корня (f (x
I — интервал, который содержит единственный корень
x
k
e
= xk− x∗— ошибка приближенного значения корня
k
ε
p
— приближенное значение корня
— требуемая точность вычисления приближенного
значения корня
f
, f, f
(k)
—производныефункцииf(x)
Решение уравнения f (x)=0— часто встречающаяся проблема. На
первый взгляд, она выглядит довольно простой, но точное её решение
возможно, только если f(x) есть полином степени n 4.Подточным
решением понимается некоторая процедура вычисления корня через параметры уравнения (например, для уравнения ax
Каждая нелинейная задача имеет свои особенности, поэтому численное решение уравнения f (x)=0невозможно без предварительного
анализа функции f(x). Например, дополнительные трудности возникают, когда график функции в точке корня касается оси x, как показано на
рисунке 1.1. Такие корни трудно обнаружить, потому что график функции f (x) не пересекает ось x. Такое поведение характерно для функций,
которые имеют кратные корни. Корень уравнения x
если существует некоторая непрерывная функция g(x) такая, что
∗
1) g(x
2) для каждого xf(x)=(x −x
Если m =1,тогдаx
) =0,
∗)m
g(x).
∗
есть простой корень уравнения f(x)=0.Мыогра-
ничимся рассмотрением случая, когда f (x) — вещественная однозначная
функция вещественного аргумента и уравнение f (x)=0имеет простой
корень.
∗
) ≡ 0)
2
+ bx + c =0).
∗
имеет кратность m,

14 Глава 1
1
f
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Рис. 1.1. Ситуация, когда f (x∗)=f(x∗)=0
x*
x
Основой для вычисления корня уравнения является итерационный
процесс, или, другими словами, процесс последовательных приближений. Итерационный процесс имеет четыре стадии:
1) найдем интервал, который содержит единственный корень (локализация корня);
2) выберем начальное приближение x
;
0
3) используя какую-либо итерационную процедуру k раз, получим на-
бор приближений x
4) определим, насколько близко каждое приближение x
му значению корня. Если некоторое приближение находится в ε
окрестности x
,начинаясx0;
k
∗
, тогда итерационный процесс завершен.
кточно-
k
p
Последний пункт будет выполнен, только если
xk= x∗,
lim
k→∞
то есть приближения x
сходятся к x∗. Поэтому основное внимание мы
k
будем уделять условиям, которые обеспечивают сходимость итерационного процесса.
-

1.1. Метод деления отрезка пополам 15
1.1. Метод деления отрезка пополам
Рассмотрим простой, но надежный метод для вычисления корней.
Пусть некоторый отрезок [a, b]=I содержит единственный корень. Стратегия этого метода состоит в том, что мы делим интервал I пополам и
затем оставляем только половину этого интервала, содержащую корень.
Очевидно, что половина, на которой функция f(x) меняет знак, содержит корень. Это дает нам способ определить, какую половину оставить
и затем использовать для дальнейших вычислений. Метод деления отрезка пополам можно представить в виде блок-схемы, показанной на
рисунке 1.2.
Таким образом, на каждом шаге вычислительного процесса x
жит внутри интервала [a
новится меньше, чем ε
], и, как только длина этого интервала ста-
k,bk
, итерационный процесс завершается. В этом ме-
p
тоде используется минимальная информация о функции f (x) (знак f(x)).
Поэтому требуется относительно большое число итераций, но сходимость этого метода гарантирована. Оценим количество итераций, необходимых для вычисления корня. Легко видеть, что длина интервала
[a
] уменьшается в два раза на каждом шаге итерационного процесса.
k,bk
Вычисления завершаются, когда
− bk=(a − b)/2k εp.
a
k
Для оценки числа итераций k выберем знак «=», тогда
ln(b − a) −ln ε
k =
ln 2
p
+1,
∗
ле-
где [y] означает целую часть y.Например,еслиb −a =1и ε
=10−5,
p
мы получим k =17.
П
РИМЕР 1.1 (МЕТОД ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ).
∗
f(x)=exp(−x) − sin(x)=0,x
∈ [0; 1] = I, εp=10−5.
Результаты расчетов представлены в Таблице 1.1.
1.2. Вычисление корней с использованием
итерационных функций
В дальнейшем мы будем рассматривать другой подход для расче-
та корней. Уравнение f (x)=0может быть представлено в следующей

16 Глава 1
Ввести и
ab
===1
a a, b b, k
00
äà
kk=+1
bx
=
kk
aa
=
kk
fafb( ) ( )<0
xa b
=( + )/2
kk k
--11
fa fx( ) ( )<0
kk-1
-1
äà
||ba
- e
kk p
корня нет
ax
=
kk
b
b=
-1
kk
приближенный
корень
=( + )/2xab
kkk
Рис. 1.2. Блок-схема, представляющая метод деления отрезка пополам

1.2. Вычисление корней с использованием итерационных функций 17
Таблица 1.1.
k x
k
bk− a
k
|f(xk)|
1 0.5 5.00000e − 01 1.27105e − 01
2 0.75 2.50000e − 01 2.09272e − 01
3 0.625 1.25000e − 01 4.98358e − 02
4 0.5625 6.25000e − 02 3.64801e − 02
... ...... ...... ......
17 0.58854 7.62939e −06 8.84776e −06
эквивалентной форме:
x = g(x), (1.1)
где g(x) — некоторая итерационная функция, и f (x
∗
ет x
= g(x∗). Оказалось, что итерационные алгоритмы проще констру-
∗
)=0соответству-
ировать на основе эквивалентной формы (1.1). Итерационный процесс
определяется следующим образом: зададим начальное значение x
ибу-
0
дем вычислять последующие приближения по формуле
x
= g(xk),k=0, 1,.... (1.2)
k+1
На рисунке 1.3 показана геометрическая интерпретация сходящегося итерационного процесса (1.2). Следующая теорема объясняет условия,
которые обеспечивают сходимость итераций (1.2).
Теорема 1.1. Пусть I =[a, b] — ограниченный интервал и g(x) —
функция, действующая из I в I. В дополнение, g(x) удовлетворяет
условию Липшица
|g(y) − g(z)| L|y − z|, 0 L 1,
для произвольных точек y и z в I.Пустьx
последовательность {x
} сходится к единственному решению x∗∈ I
k
∈ I и x
0
= g(xk),тогда
k+1
уравнения x = g(x).
На основе этой теоремы можно получить оценку ошибки k-го приближения, которая зависит от двух последовательных приближений и
константы Липшица L.Таккак|x
k+1−xk
| = |g(xk)−g(x
заключить из условия Липшица, что для всех k |x
− x
|.Пустьn — произвольное положительное целое число. Тогда
k−1
x
− xk=(x
k+n
k+n
− x
k+n−1
)+(x
k+n−1
− x
k+n−2
k+1
)+...+(x
)|,мыможем
k−1
− xk| L|x
k+1
k+1
− xk)
−

18 Глава 1
a)
1.4
1.2
1
ygx= ()
0 0.2 0.4 0.6 0.8 1 1.2 1.4
xx xx
01 2
ygx= ()
b)
0.8
0.6
0.4
0.2
0
1
0.9
0.8
0.7
0.6
y x=
*
x
y x=
0.5
0.4
0.3
0.2
0.1
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Рис. 1.3. Последовательные приближения, генерируемые итерационным процессом (1.2): a) g
(x) > 0 иb)g(x) < 0
xxx x xxx
024 31
*

1.2. Вычисление корней с использованием итерационных функций 19
и
|x
− xk| |x
k+n
k+n
− x
k+n−1
| + |x
k+n−1
− x
k+n−2
| + ...+ |x
k+1
− xk|.
Следовательно, мы можем записать
n
− xk| L(1 + L + ... + L
|x
k+n
n−1
) |xk− x
k−1
| =
L(1 − L
1 −L
)
− x
|x
k
Пусть n →∞,тогда
k−1
|.
|x
∗
− xk|
L
1 −L
|x
k
− x
|. (1.3)
k−1
Это дает нам оценку ошибки k-го приближения. Следует заметить, что
если константа L близка к единице, то сходимость становится очень
медленной. Поэтому основное наше внимание будет уделяться вопросу
построения быстросходящихся итерационных процессов.
Имеется большое разнообразие методов для решения уравнения
f(x)=0. Мы рассмотрим лишь основные подходы, основанные на сле-
дующих трех типах итерационных процессов:
1) одноточечная итерация
x
= g(xk),k=0, 1,...; (1.4)
k+1
2) многоточечная итерация
= g(xk,β1(xk),...,βn(xk)),k=0, 1,..., (1.5)
x
k+1
где β
,...,βn— некоторые функции;
1
3) одноточечная итерация с памятью
x
k+1
= g(xk,x
k−1
, ..., x
),k= n,n − 1,.... (1.6)
k−n
Теперь следует разъяснить термин «быстрая сходимость» более подробно. Сделаем это на примере итерационного процесса (1.4). Сначала
введем ошибку k-го приближения как e
и x
k+1
= e
+x∗. После подстановки этих выражений в (1.4) мы можем
k+1
= xk− x∗,тогдаxk= ek+ x
k
∗

20 Глава 1
разложить g(x∗+ ek) по степеням ekв окрестности точки x∗(предполагая, что все производные функции g(x) до порядка p включительно
непрерывны):
∗
Учиты ва я, чт о x
+ e
x
∗
= g(x∗),мыполучаем
= g(x∗+ ek)=g(x∗)+g(x∗)ek+
k+1
+
1
(x∗)e2
g
2
+ ...+
k
y
∈ [xk,x∗].
k
1
(p)
g
(yk)e
p!
p
,
k
(yk)e
p
k
. (1.7)
Если g
e
= g(x∗)ek+
k+1
(n)(x∗
)=0для n =1,...,p−1 и g
1
g
2
(x∗)e2
+ ... +
k
(p)(x∗
1
(p)
g
p!
) =0, тогда итерационная
функция g(x) имеет порядок p и, как следует из (1.7),
e
k+1
где p называется порядком последовательности {x
константой асимптотической сходимости. Когда p =1,итерационнаяпо-
следовательность имеет линейную сходимость к x
мость сверхлинейная. Легко видеть, что если e
p
= Ce
,C=const=0, (1.8)
k
} и C называется
k
∗
,априp>1 сходи-
достаточно мала, тогда
k
при p>1 итерационная последовательность может сходиться очень быстро.
Нам осталось обсудить один практически важный вопрос: как оценить ошибку k-го приближения к точному решению x
лать на основе неравенства (1.3). Если x
∈ [x∗− εp,x∗+ εp],товыпол-
k
∗
.Этоможносде-
няются следующие условия:
|x
|x
k
k
− x
− x
|xk|
| εp(оценка абсолютной ошибки),
k−1
|
k−1
(оценка относительной ошибки).
ε
p
(1.9)
В дополнение к условию (1.9), обычно требуют также выполнения условия
|f(x
)| εp.
k
Это условие следует из постановки проблемы. Таким образом, итерационный процесс завершается, когда одно из этих условий выполняется.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
