Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы научных вычислений. Введение в численные методы для физиков и инженеров

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Возникновение ошибок вычислений 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
Это условие следует из постановки проблемы. Таким образом, итераци­онный процесс завершается, когда одно из этих условий выполняется.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]