Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обыкновенные дифференциальные уравнения. Теория и приложения
.pdf
8.3. Одношаговые методы 141
из треугольника ADC получим
x
− x
k+1
t
k+1
− t
k
k
=tgα = f(tk,xk),
отсюда, учитывая равенство h = t
) ≈ x
x(t
k+1
k+1
− tk, следует
k+1
= xk+ hf (tk,xk). (8.10)
Обоснование приближенного равенства (8.10) очевидно. Из формулы Тейлора для функции x(t) в окрестности точки t = t
x(t
)=x(tk+ h)=x(tk)+x(tk)h + x(ξk)
k+1
где ξ
∈ [tk,t
k
]. Считая h малым и отбрасывая последнее слагаемое
k+1
получим
k
2
h
, (8.11)
2
в формуле (8.11), получим приближенное равенство (8.10).
Вернемся к рассмотрению задачи Коши (8.6). Пусть x(t) — точное
решение этой задачи, определенное на отрезке t ∈ [a, b]. Пусть на этом
отрезке задана сетка (8.1). Поступая в каждой точке t
сетки так же,
k
как и в (8.10), получим формулы
x
= xk+ hf (tk,xk),k=0, 1, ··· ,N − 1, (8.12)
k+1
которые и определяют метод Эйлера численного решения задачи Ко-
ши (8.6).
Примеры использования метода Эйлера, а также других обсуждаемых здесь методов будут приведены ниже в п. 8.6.
Оценки погрешности метода Эйлера
Численное решение задачи Коши (8.6), вычисляемое по формулам (8.12), естественно, отличается от значений точного решения x(t) в узлах сетки (8.1) в силу приближенного характера формулы (8.10). Поэтому одним из основных при использовании метода
Эйлера (как, впрочем, и любого другого численного метода) является вопрос об оценке близости приближенных значений x
значениям x(t
k+1
).
к точным
k
Появление погрешности при проведении численных расчетов обычно обуславливается двумя основными источниками: это, во-первых,
ошибка дискретизации, возникающая в результате замены дифференциального уравнения разностной аппроксимацией (в нашем случае —

142 Глав а 8
это схема (8.12)), и, во-вторых, ошибка округления, накопившаяся при
выполнении численных расчетов. Мы здесь для простоты будем считать, что все расчеты ведутся абсолютно точно, так что погрешности
численного метода обусловлены только ошибкой дискретизации. О влиянии ошибок округления на результаты численных расчетов можно
узнать в специальной литературе (библиографию см., например, в [7]).
Выше отмечалось, что ошибка дискретизации численного метода
характеризуется величиной (8.9), названной глобальной ошибкой дискретизации. Оказывается, для метода Эйлера (8.12) эта ошибка имеет
первый порядок. А именно справедлива
Тео рем а 8 .1. Пусть решение x(t) задачи Коши (8.6) имеет огра-
ниченную вторую производную:
max
|x(t)| M0, (8.13)
atb
где M
— некоторое положительное число. Тогда глобальная ошибка
0
дискретизации (8.9) метода Эйлера (8.12) имеет первый порядок:
E(h)=O(h) при h → 0. (8.14)
Доказательство.
ошибка ε
где ξ
ε
2
на первом шаге метода Эйлера (8.12) равна
1
∈ [t0,t1]. Далее, ошибка ε2на втором шаге равна
0
= x(t2) − x2= x(t1)+hf(t1,x1)+
= ε
∈ [t1,t2]. Продолжая этот процесс, получим окончательно
где ξ
1
ε
N
где ξ
∈ [tj,t
j
]. Из этого равенства и оценки (8.13) получим
j+1
|
ε
N
Из соотношений (8.10) и (8.11) следует, что
2
h
= x(t1) − x1=
ε
1
2
h
+
1
2
h
=
2
2
h
[|x
2
(ξ1)=
x
2
[x
(ξ0)+x(ξ1)+···+ x(ξ
(ξ0)|+ |x(ξ1)| + ···+ |x(ξ
2
h
M
N =
0
2
2
h
2
2
h
M
2
(ξ0),
x
2
2
h
(ξ1) − x1− hf (t1,x1)=
x
2
(ξ0)+x(ξ1)] ,
[x
b − a
0
= M
h
1
N−1
h,
N−1
)] ,
)|]

8.3. Одношаговые методы 143
где M1= M0(b − a)/2. Ясно, что полученная оценка тем более верна
для |ε
кретизации (8.9) удовлетворяет той же оценке E(h) M
доказана.
| при всех j =1, 2, ··· ,N − 1. Поэтому глобальная ошибка дис-
j
h.Теорема
1
Практическим следствием теоремы 8.1 является тот факт, что при
уменьшении шага h приближенное решение будет стремиться к точному с линейной скоростью по h, т. е. при уменьшении шага h вдвое
ожидается, что ошибка уменьшится примерно в 2 раза. Соответствующие примеры приведены ниже в п. 8.6.
8.3.2. Методы Рунге–Кутта
Методы Рунге–Кутта являются развитием метода Эйлера. Напомним, что каждый шаг метода Эйлера (8.12) требует вычисления только
значения f (t
). В методах Рунге–Кутта значение f (tk,xk) заменя-
k,xk
ется на среднее значение функции f(t, x), вычисленных в некоторых
различных точках (сами эти точки вычисляются на основе формул типа метода Эйлера (8.12)).
Метод Рунге–Кутта второго порядка
Приведем сначала метод Рунге–Кутта второго порядка (называемый также методом Хьюна):
x
= xk+
k+1
который отличается от метода Эйлера тем, что значение f (t
h
2
[f(t
)+f(tk,xk+ hf (tk,xk))] ,k=0, 1, ··· ,N −1,
k,xk
k,xk
(8.15)
) заменяется на среднее значение функции f (t, x), вычисленное в двух раз-
личных точках. Так же, как теорема 8.1, может быть установлена
Тео рем а 8 .2. Пусть решение x(t) задачи Коши (8.6) имеет вто-
рую производную, удовлетворяющую оценке (8.13). Тогда глобальная
ошибка дискретизации (8.9) метода Хьюна (8.15) имеет второй порядок:
E(h)=O(h
2
) при h → 0. (8.16)
Метод Рунге–Кутта четвертого порядка
Наиболее известным является метод Рунге–Кутта четвертого
порядка, задаваемый формулой
h
x
k+1
= xk+
(F
+2F2+2F3+ F4) ,k=0, 1, ··· ,N − 1, (8.17)
1
6

144 Глав а 8
где
= f(tk,xk),F2= ftk+
F
1
h
,x
k
2
h
+
,
F
1
2
F
3
Значение f(t
= ftk+
k,xk
h
2
) в формуле (8.17) заменяется на взвешенное среднее
,x
h
+
F
k
2
2
,F
4
= f (t
k+1,xk
+ hF3) .
значений f(t, x), вычисленных в четырех различных точках.
Для метода (8.17) справедлив аналог теорем 8.1 и 8.2.
Тео рем а 8 .3. Пусть решение x(t) задачи Коши (8.6) имеет вто-
рую производную, удовлетворяющую оценке (8.13). Тогда глобальная
ошибка дискретизации (8.9) метода Рунге–Кутта (8.17) имеет четвертый порядок:
E(h)=O(h
4
) при h → 0. (8.18)
Таким образом, из рассмотренных численных методов решения задачи Коши (8.6) наиболее точным является метод Рунге–Кутта (8.17),
имеющий четвертый порядок. Эффективность этого метода иллюстрируют примеры, приводимые ниже в п. 8.6.
Методы Эйлера (8.12), Хьюна (8.15) и Рунге–Кутта (8.17) объединяет тот факт, что для реализации каждого их шага достаточно информации только о предыдущем шаге: эти методы могут быть записаны
в виде
= xk+ hϕ(tk,xk),k=0, 1, ··· ,N −1, (8.19)
x
k+1
с соответствующей функцией ϕ(t, x). Например, в случае метода Эйле-
ра функцией ϕ(t, x) является сама функция f(t, x), а в случае метода
Хьюна —
ϕ(t, x)=
1
[f(t, x)+f (t + h, x + hf(t, x))] .
2
Численные методы, записываемые в виде (8.19), называются одношаговыми, в отличие от многошаговых, которые рассматриваются
в следующем разделе.
8.4. Многошаговые методы
Многошаговыми методами называются численные методы, в которых для построения значения x
ких предыдущих точках x
k,xk−1
используется информация о несколь-
k+1
, ··· ,x
,гдеm 1.
k−m

8.4. Многошаговые методы 145
8.4.1. Методы Адамса–Башфорта
Важный класс многошаговых методов возникает на основе следующего подхода. Пусть x(t) — точное решение задачи Коши (8.6) и задана
сетка (8.1). Тогда верны равенства
t
k+1
x(t
) − x(tk)=
k+1
t
k
x(t)dt =
Пусть, далее, известны приближения x
в точках t
k,tk−1
, ··· ,t
,гдеm 0. Тогда числа fj= f(tj,xj) (j =
k−m
k,xk−1
t
k+1
f[t, x(t)]dt. (8.20)
t
k
, ··· ,x
к решению x(t)
k−m
= k,k − 1, ··· ,k− m) можно рассматривать как приближения к функции f[t, x(t)] в точках t
Построим по числам f
t
k−1
, ···, t
, интерполяционный многочлен p(t), например, в форме
k−m
k,tk−1
, ··· ,t
k,fk−1
.
k−m
, ··· ,f
, заданным в узлах tk,
k−m
Лагранжа (8.3). Тогда многочлен p(t) можно рассматривать как приближение к функции f[t, x(t)]. Подставляя теперь p(t) вместо f [t, x(t)]
в равенство (8.20) и заменяя значения x(t
ния x
и xk, придем к следующему методу:
k+1
x
= xk+
k+1
t
t
k+1
k
) и x(tk) на их приближе-
k+1
p(t)dt. (8.21)
В частности, если m =0, то полином p(t) является константой, рав-
ной f
= f(tk,xk), т. е. метод (8.3) превращается в метод Эйлера (8.12).
k
Если m =1, то из формулы (8.3) следует, что полином p(t) —это
линейная функция, проходящая через точки (t
p(t)=−
(t − t
h
)
k
f
k−1
+
(t − t
h
k−1,fk−1
)
k−1
) и (tk,fk),т.е.
f
.
k
Подставляя этот полином в (8.21), после интегрирования получим метод:
x
k+1
= xk+
h
(3f
− f
k
2
), (8.22)
k−1
который является двухшаговым, так как использует информацию
и t
о двух точках t
k
k−1
.

146 Глав а 8
Аналогично, если m =2,тоp(t) — квадратичный полином. Прове-
дя соответствующие выкладки, получим трехшаговый метод:
x
k+1
= xk+
12
h
(23f
− 16f
k
k−1
+5f
). (8.23)
k−2
Если m =3, то получим четырехшаговый метод:
h
= xk+
x
k+1
24
(55f
− 59f
k
k−1
+37f
k−2
− 9f
). (8.24)
k−3
Можно, конечно, продолжить этот процесс, получая все более точные методы, однако формулы при этом получаются все более громоздкими.
Формулы (8.22)–(8.24) называются методами Адамса–Башфорта.
Глобальные ошибки дискретизации этих методов удовлетворяют
соотношениям:
для метода (8.22): E(h)=O(h
для метода (8.23): E(h)=O(h
для метода (8.24): E(h)=O(h
2
) при h → 0;
3
) при h → 0;
4
) при h → 0.
Многошаговые методы порождают проблему, не возникающую при
использовании одношаговых методов. Так как эти методы используют
информацию о нескольких (более одной) предыдущих точках, то, естественно, возникает вопрос о начале работы таких методов, когда известно менее необходимого количества точек. Например, метод (8.24)
не может работать при k<3.
Обычный выход из положения состоит в использовании какоголибо одношагового метода той же точности до тех пор, пока не будет
получено достаточно значений для работы многошагового метода.
8.4.2. Методы Адамса–Моултона
Методы Адамса–Башфорта (8.22)–(8.24) используют значения в предыдущих точках x
k−1,xk−2
, ···. Аналогично при построении интерпо-
ляционного многочлена можно использовать и последующие точки x
k+1,xk+2
, ···. При этом возникают методы Адамса–Моултона.На-
пример, аналогом метода (8.22) является метод Адамса–Моултона второго порядка
h
x
k+1
= xk+
(f
+ f
k
2
). (8.25)
k+1

8.5. Численные методы для систем 147
Следует, однако, отметить, что получаемые на этом пути формулы
фактически представляют собой уравнения, из которых следует определять значение x
= f(t
f
k+1
k+1,xk+1
. Например, в методе (8.25) для вычисления
k+1
) необходимо знать x
, которое само неизвест-
k+1
но. Поэтому методы Адамса–Моултона относят к неявным, в отличие
от методов Адамса–Башфорта, которые являются явными, так как для
нахождения x
не требуется решать никаких уравнений.
k+1
На практике обычно вместо решения уравнения типа (8.25) используют комбинацию явных и неявных методов, что приводит к методу
прогноза и коррекции. Этот метод состоит в том, что сначала по фор-
(p)
муле Адамса–Башфорта вычисляется значение x
гнозом» для x
k+1
ного вычисления f
, а затем значение x
, которое в свою очередь используется в формуле
k+1
(p)
используется для приближен-
k+1
, являющееся «про-
k+1
Адамса–Моултона.
8.5. Численные методы для систем уравнений
Методы Эйлера, Рунге–Кутта, Адамса–Башфорта, Адамса–Моултона легко переносятся на задачи Коши для нормальных систем дифференциальных уравнений вида
= f(t, x), x ∈ Rn,
x
x(a)=x
.
0
(8.26)
Для получения расчетных формул в указанных методах достаточно
заменить x и f (t, x) на x и f (t, x).
8.6. Программы и примеры численных расчетов
Описанные выше численные методы решения задач Коши (8.6)
или (8.26) могут быть реализованы в виде алгоритмов и программ.
В этом разделе приводится несколько иллюстративных программ, написанных с использованием алгоритмического языка Паскаль.
8.6.1. Программы для метода Эйлера
Метод Эйлера очень прост для реализации на ЭВМ: на шаге с номером k вычисляется значение f (t
ся в (8.12).
), которое затем подставляет-
k,xk

148 Глав а 8
Программа EILER численного решения задачи Коши (8.6) методом
Эйлера (8.12) может быть описана следующим образом.
Входные параметры
: A и B — начальная и конечная точка интервала, на котором ищется решение задачи Коши; x0 — значение начального условия задачи Коши; N — число отрезков разбиения интервала [A, B]; FUN — подпрограмма-функция, вычисляющая значения
правой части f (t, x) дифференциального уравнения.
Выходные параметры
: XX — массив из N +1действительных чисел, содержащий решение задачи Коши в узловых точках интервала [A, B].
В качестве примера рассмотрим следующую задачу Коши:
x
= x +2t −t2,
x(0) = 0
(8.27)
на интервале [0, 1]. Несложно видеть, что эта задача имеет точное решение x = t
2
; поэтому она может послужить иллюстрацией эффектив-
ности изложенных выше численных методов.
Приведем текст программы EILER, ориентированной на решение
задачи Коши (8.27) с числом отрезков разбиения N =10.
Program EILER;
Type
atype=array[1..21] of real;
Const
A :real=0; B :real=1; x0:real=0; N :integer=10;
Var
I,N1: integer;
t1,x1,h:real;
XX:atype;
Function FUN(Var t, x:Real):Real;
Begin
FUN:=x +2∗ t −t ∗ t;
End;
Begin
h := (B − A)/N ;
N1:=N +1;
t1:=A;
x1:=x0;
I := 1;
While I<= N +1do

8.6. Программы численных расчетов 149
Begin
XX[I]:=x1;
I := I +1;
x1:=x1+h∗FUN(t1,x1);
t1:=t1+h;
End;
Writeln (’Приближенное решение x(t)’);
For I := 1 to N 1 do
Begin
Writ e ln (XX[I]:15:6);
End;
Readln;
End.
В таблице 8.1 приведены значения x
приближенного решения
pr
задачи Коши (8.27), вычисленные с помощью программы EILER, и соответствующие значения x точного решения.
Таблица 8.1.
t 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
xpr0.00 0.02 0.06 0.11 0.19 0.28 0.40 0.53 0.67 0.84
x 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64 0.81 1.00
Как видно из таблицы 8.1, численное решение сильно отличается
от точного. Для повышения точности проведем вычисления по программе EILER при N =20. Некоторые из полученных результатов
сведем в таблицу 8.2.
Таблица 8.2.
t 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
xpr0.00 0.03 0.07 0.14 0.22 0.32 0.44 0.58 0.74 0.92
x 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64 0.81 1.00
Таблицы 8.1 и 8.2 иллюстрируют тот факт, что при уменьшении
шага разбиения вдвое ошибка уменьшается примерно в 2 раза. Это
находится в полном соответствии с теоремой 8.1.
8.6.2. Программы для метода Рунге–Кутта
Приведем теперь текст программы RUNGE численного решения
задачи Коши (8.6) методом Рунге–Кутта (8.17). Входные и выходные
параметры в этой программе такие же, как и в программе EILER. При

150 Глав а 8
этом нижеприводимая программа ориентирована на решение той же
задачи Коши (8.27) с числом отрезков разбиения N =10.
Program RUNGE;
Type
atype=array[1..21] of real;
Const
A :real=0; B :real=1; x0:real=0; N :integer=10;
Var
I,N1: integer;
t1,t2,t3,x1,x2,x3,x4,f1,f2,f3,f4,h:real;
XX:atype;
Function FUN(Var t, x:Real):Real;
Begin
FUN:= x +2∗ t − t ∗t;
End;
Begin
h := (B − A)/N ;
N1:=N +1;
t1:=A;
x1:=x0;
I := 1
;
While I<= N +1do
Begin
XX[I]:=x1;
I := I +1;
f1:=FUN(t1,x1);
t2:=t1+h/2;
x2:=x1+(h ∗f1)/2;
f2:=FUN(t2,x2);
x3:=x1+(h ∗f2)/2;
f3:=FUN(t2,x3);
x4:=x1+h ∗ f3;
t3:=t1+h;
f4:=FUN(t3,x4);
1:=x1+h ∗ (f1+2∗ f2+2∗ f 3+f4)/6;
x
t1:=t1+h;
End;
Writeln (’Приближенное решение x(t)’);
For I := 1 to N 1 do
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
