Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Углубленный курс информатики. Учебное пособие
.pdf
4. ПРИБЛИЖЕННОЕ РЕШЕНИЕ ОБЫКНОВЕННЫХ
ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
4.1. Метод Эйлера
Постановка задачи
. Дифференциальные уравнения устанавливают связь между независимыми переменными, искомыми функциями и
их производными, например:
dx
3;
xy
=− −
dt
2
dx dx dy
dt dt dt
3.
=− −
2
Если искомая функция зависит от одной переменной, то диффе-
ренциальное уравнение называется обыкновенным.
Изменение концентрации вещества С в реакторе описывается
обыкновенным дифференциальным уравнением:
dC
1
()
CC
=−
dt t
0
.
В том случае, когда искомая функция зависит от нескольких переменных (от времени и координаты длины реактора), то мы имеем
дифференциальное уравнение в частных производных.
Изменение концентрации вещества в реакторе описывается уравнением в частных производных:
CC
∂∂
∂∂
U
=−
.
tl
В данном уравнении концентрация С(t, l) зависит от времени (t) и
длины реактора (l).
Обыкновенное дифференциальное уравнение содержит одну или
несколько производных искомой функции y = y(x):
()
( , , , ..., ) 0,
Fxyy y′=
n
где x – независимая переменная.
Наивысший порядок n, входящей в уравнение производной, называется порядком дифференциального уравнения.
/
F(x, y, y
F(x, y, y
) –уравнение первого порядка;
//
) – уравнение второго порядка.
Для получения единственного решения дифференциального уравнения необходимо указать начальные условия, которым должна удовлетворять искомая функция.
41

Задача Коши. Найти решение обыкновенного дифференциально-
x
y
го уравнения первого порядка (решить Задачу Коши) – это составить
таблицу приближенных значений функции, удовлетворяющих начальным условиям.
'(,).yfxy=
Начальное условие:
()yx y=
00
Таким образом, необходимо найти на отрезке [x
.
, xn] такую непре-
0
рывную функцию y = y(x), которая удовлетворяет дифференциальному
уравнению:
'(,),yfxy=
и начальному условию:
()yx y=
00
т. е.
найти решение дифференциального уравнения. Нахождение такого
решения называют
решением задачи Коши. Численное решение этой за-
дачи состоит в построении таблицы приближенных значений y
решения уравнения y(x) в точках x
xih i n=+⋅ =
0
i
, 1, 2, ..., .
, x2, ..., xn с некоторым шагом h.
1
,
, y2, ..., yn
1
Метод Эйлера относится к одноступенчатым методам, которые
обладают следующими свойствами:
• для нахождения значения функции в точке y
мация только о предыдущей точке (y
, xi);
i
нужна инфор-
i+1
• не требуется вычисление производных от f(x, y), а требуется
вычисление самой функции.
Пусть требуется найти приближенное решение дифференциального уравнения первого порядка:
'(,)
fxy=
(1)
с начальным условием:
y(x
) = y0,
0
т. е. необходимо решить задачу Коши.
В окрестности точки x
yx x x
yx yx y x y x
=+ + +
() () '() "()...
00 0
функцию y(x) разложим в ряд Тейлора:
0
=−
() ( );
xx xx
() ()
(k)
∞
=
k
−−
(x )
y
0
00
0
!
k
k
0
2
1! 2!
, (2)
который можно применить для приближенного определения искомой
функции y(x).
В точке x
+ h при малых значениях h можно ограничиться двумя
0
членами ряда, тогда
42

2
y
y
(3)
где O(h
() ( ) ( ) '( ) 0( ),yx yx h yx hy x h=+= + +
2
) – бесконечно малая величина порядка h2.
000
Заменим производную y'(x0), входящую в формулу (3), на правую
часть уравнения (1):
() (,)
xhyhfx
++
00 00
Приближенное решение в точке x
= x0 + h можно вновь рассмат-
1
.
ривать как начальное условие и по формуле найти значение искомой
функции в следующей точке x
= x1 + h.
2
В результате получен простейший алгоритм решения задачи Коши, который называется методом Эйлера.
Метод Эйлера можно представить в виде последовательного применения формул:
x
= x0 + h,
1
x
= x1 + h,
2
10 0 0 00
21 1 1 11
'(,),yyhy yhfxy=+ =+
'(,),yyhy yhfxy=+ =+
……………………………………………..
x
= x i + h,
i+1
yyhyyhfxy
=+ =+
1
iiii ii
+
'(,).
0,8
Y
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0
по методу Эйлера точное значение
Рис. 2. Графическое изображение метода Эйлера
X
Таким образом, формула Эйлера в общем случае имеет вид:
43

yyhfxy
x
F
F
x
=+
1
ii ii
+
x
= x i + h.
i+1
(, ),
Геометрически искомая функция y(x) заменяется ломаной линией,
представляющей собой отрезки касательных к этой функции в узлах x
x
, .., xn.
1
Пример. Используя метод Эйлера, построить приближенное решение для следующей задачи Коши:
dy
=+
y
.
dx
Начальные условия: x
= 0, y0 = 0 c шагом 0,1 в интервале [0, 1].
0
Данное уравнение уже записано в стандартном виде относительно
производной искомой функции:
dy
(, )
xy
=
.
dx
Поэтому для решаемого уравнения имеем:
(, )
xy x y=+
.
Примем шаг интегрирования равным шагу сетки h = 0,1. Для первых трёх узлов сетки вычисления будут следующими:
yyhFxy
=+ =+ +=
10 00
*(, ) 00,1*(00)0
,
0
xxh
=+=+ =
10
yyhFxy
=+ =+ +=
21 11
xxh
=+= + =
21
yyhFxy
=+ = + + =
32 22
00,10,1
*(,)00,1*(0,10) 0,01
0,1 0,1 0, 2
* ( , ) 0,01 0,1* (0, 2 0, 01) 0,031
…………………………………………………………………………
y
= 0,593 x10 = 1
10
Аналитическое решение данного уравнения:
dy
=+
y
.
dx
Производим замену z = x + y
dz dy
11
=+ =+
z
.
dx dx
Разделяем переменные:
dz
dx
.
1
z=+
Интегрируем полученное выражение
44

dz
dx
1
z=+
ln(1 )zx+=
;
;
Таблица значений функции, вычисленных по методу Эйлера и
аналитическим способом:
X
по методу Эйлера точное значение
0 0 0
0,1 0,0000 0,0052
0,2 0,0100 0,0214
0,3 0,0310 0,0499
0,4 0,0641 0,0918
0,5 0,1105 0,1487
0,6 0,1716 0,2221
0,7 0,2487 0,3138
0,8 0,3436 0,4255
0,9 0,4579 0,5596
1 0,5937 0,7183
1xze+=
x
ye x=−−
Y
;
.
1
Реализация метода Эйлера:
способ 1:
function f (x,y:real):real;
begin
f:=x+y;
end;
procedure Eyler(x, y, xk, h: real; k: integer);
label
1, 2;
begin
1: write(x, y, k);
if x > xk then goto 2;
k := k + 1;
y := y + h * f(x, y);
x := x + h;
goto 1;
2:
end;
45

способ 2:
y
4.2. Метод Рунге–Кутта
Метод Рунге–Кутта относится к одноступенчатым методам, кото-
рые обладают следующими
•
для нахождения значения функции в точке y
только о предыдущей точке (y
•
не требуется вычисление производных от функции f(x, y), а требу-
свойствами:
, xi);
i
нужна информация
i+1
ется многократное вычисление самой функции.
Пусть требуется найти приближенное решение дифференциально-
го уравнения первого порядка:
'(,),
fxy=
Начальное условие:
()yx y=
00
т. е. необходимо решить задачу Коши.
yyy
=+Δ
1iii
+
;
1
yy kkkk
=+ + + +
11234
ii
+
khfx y=⋅ + +
2
khfx y=⋅ + +
3
(22 );
6
khfxy=⋅
1
(, );
hk
(, );
ii
22
hk
(, );
ii
22
ii
1
2
46

khfxhyk=⋅ + +
x
F
F
x
x
43
(, );
ii
x
= x i + h.
i+1
Пример. Используя метод Рунге–Кутта, построить приближенное
решение для следующей задачи Коши:
dy
=+
dx
Начальные условия: x
= 0, y0 = 0 c шагом 0,1 в интервале [0; 1].
0
Определим значение у в т. x = 0,1.
Данное уравнение можно записать в стандартном виде относи-
тельно производной искомой функции:
dy
(, ).
xy
=
dx
Поэтому для решаемого уравнения имеем:
(, ) .
xy x y=+
Примем шаг интегрирования равным шагу сетки h = 0,1. Вычис-
ления будут следующими:
K1=0; K2=0.005; K3=0.00525; K4=0.010525;
Y=Y+(1/6)*(K1+2K2+2K3+K4)
X=X+h
Y=0+(1/6)*(0+0.01+0.0105+0.010525=0.005171
X=0+0.1=0.1
Y точное =0.0052(аналитическое решение)
Аналитическое решение данного уравнения:
dy
=+
dx
Производим замену z = x + y
dz dy
11.
=+ =+
dx dx
Разделяем переменные:
dz
dx
1
z=+
Интегрируем полученное выражение
dz
1
z=+
ln(1 ) ;zx+=
y
y
dx
.
.
z
.
;
1;
ze+=
x
ye x=−−
47
1.

Реализация метода Рунге–Кутта:
Способ 1:
function f (x,y:real):real;
begin
f:=x+y;
end;
procedure RUNG(var x, y:real; xk, h: real; var k: integer);
Label 1, 2;
Var k1,k2,k3,k4:real;
Begin 1: write(x, y, k);
if x > xk then goto 2;
k := k + 1;
K1:=h*f(x,y);K2:=h*f(x+h/2,y+k1/2);
k3:=h*f(x+h/2,y+k2/2);k4=h*f(x+h,y+k3);
y:=y+(1/6)*(k1+2*k2+2*K3+k4);
x := x + h;
goto 1;
end;
2:
Способ 2:
48

Построение модуля Difur
Init DIFUR;
Interface
Label 1,2;
Var k:integer;
x,xk,h,y,k1,k2,k3,k4:real;
Function f(x,y:real):real;
Procedure Eyler(x,y,xk,h:real; k:integer);
Procedure RUNG(x,y,xk,h:real; k:integer);
Implementation
Function f(x,y: real):real;
Begin f:= x+y; end;
Procedure Eyler (x,y,xk,h: real; k:integer);
Label 1,2;
Begin 1:write (x:5:2,y:5:2,k:5);k:=k+1;
If x>xk then goto 2;
Y:=Y+h*f(x,y);x:=x+h; go to1;
end;
2:
Procedure RUNG(x,y,xk,h:real;k:integer);
Label 1,2; k1,k2,k3,k4:real;
Begin 1:write (x:5:2,y:5:2,k:5);k:=k+1;
If x>xk then goto 2;
K1:=h*f(x,y);K2:=h*f(x+h/2,y+K1/2);
K3:=h*f(x+h/2,y+K2/2);K4:=h*f(x+h,y+K3);
Y:=Y+(1/6)*(K1+2*K2+2*K3+K4);x:=x+h; go to1;
2:
end;end.
Program Prog-11;
Uses DIFUR;
Var x,y,xk,h:real; k:integer;
Begin
EYLER(0,0,1,0.1,0); writeln(x:5:2,y:5:2,k:5);
RUNG(0,0,1,0.1,0);wtiteln(x:5:2,k:5);
end.
Решение задачи Коши
для систем дифференциальных уравнений
Системы дифференциальных уравнений устанавливают связь
между независимыми переменными, искомыми функциями и их производными.
49

Найти решение системы обыкновенных дифференциальных урав-
x
x
нений первого порядка (решить Задачу Коши) – это составить таблицу
приближенных значений функции, удовлетворяющих начальным условиям.
/
yfxyz
zfxyz
Необходимо найти на отрезке [x
=
/
=
(, ,)
1
(, ,)
2
0
.
; xk] такие непрерывные функции
y(x) и z(x), которые удовлетворяет системе дифференциальных уравнений. Численное решение этой задачи состоит в построении таблицы
приближенных значений y(x), z(x) в точках x
, x2, ..., xn с некоторым ша-
1
гом h.
x i h i = , ,...,n=+⋅
0
i
, 1 2 .
Пример. Решить задачу Коши для системы дифференциальных
уравнений:
dy
1
y
=
dx
dy
dx
Начальные условия: x = 0, y
y
= y10 + h*f1(x0, y10, y20);
1
y
= y20 + h*f2(x0, y10, y20).
2
2
.
y
−
2
(0) = 0, y2(0) = 0, xk = 1, h = 0,1.
1
1
e
=
Реализация методом Эйлера:
Type a=array[1..2]of real;
procedure P (x:real; var f,y:a);
begin
f[1]:=y[2]; f[2]=exp(-x*y[1])
end;
Procedure Eyler(x:real,f,y:a;xk,h:real;
var k: integer);
Label 1, 2;
Begin 1: write(x, y[1],y[2],k);
if x > xk then goto 2;
k := k + 1;
P(x,f,y);
Y[1]:=y[1]+h*f[1];
Y[2]:=y[2]+h*f[2];
x := x + h;
goto 1;
2:
end;
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
