第五章 常微分方程数值解
5.3 常微分方程组
和边值问题的数值解法
§
5.3 常微分方程组和高阶
微分方程的数值解法简介
§
一 、 常微分方程组的数值解法
?
?
?
???
?
==′
==′
==′
0021
20022122
10012111
)(),,,,(
)(),,,,(
)(),,,,(
nnnnn
n
n
yxyyyyxfy
yxyyyyxfy
yxyyyyxfy
L
LLL
L
L
下列包含多个一阶常微分方程的初值问题
----------(1)
称为常微分方程组的初值问题
(1)式具有 n个未知函数
做如下假设
??
?
?
?
?
?
??
?
?
?
?
?
=
ny
y
y
Y M2
1
??
?
?
?
?
?
??
?
?
?
?
?
=
),(
),(
),(
),( 2
1
Yxf
Yxf
Yxf
YxF
n
M
??
?
?
?
?
?
??
?
?
?
?
?
=
??
?
?
?
?
?
??
?
?
?
?
?
==
0
02
01
0
02
01
00
)(
)(
)(
)(
nn y
y
y
xy
xy
xy
xYY MM
则 (1)式化为矩阵形式
??
?
=
=′
00 )(
),(
YxY
YxFY ----------(2)
只要将以前所介绍的各种求解方法中的函数转化为
函数向量 ,即可得到相应的常微分方程组的数值解法
这里只介绍求解微分方程组的计算机实现
[x,Y] = ODE45('F',xspan,Y0)
首先编制微分方程组的函数文件 :
function z=F(x,Y)
z=F(x,Y);
然后使用求解命令 ode45
F为微分方程组的文件名
xspan为需求值的节点向量
Y0为函数向量的初值
x为自变量 , Y为函数值矩阵
例 1. 求解微分方程组
5.1)0(532
0)0(2
2212
1211
=??=′
=+?=′
yyyxy
yyyxy
解 : 首先编制微分方程组的 m文件
function z=fun(x,y)
z(1)=x-y(1)+2*y(2);
z(2)=2*x-3*y(1)-5*y(2);
z=z';
再编写求解程序
)20( ≤≤ x
xspan=0:0.1:2;
y0=[0,1.5]';
[x,y]=ode45('fun',xspan,y0)
plot(x,y)
0 0.5 1 1.5 2
-0.5
0
0.5
1
1.5
x
Y Y1
Y2运行
后得
二 、 高阶常微分方程的数值解法简介
例 2. 求下列高阶微分方程的数值解
03 =′?′′?′′′ yyyy
1)0(,1)0(,0)0( ?=′′=′= yyy )20( ≤≤ x
解 : 显然 yyyy ′+′′=′′′ 3
假设 yy =1 yy ′=2 yy ′′=3
则 21 yy =′ 32 yy =′ 1233 3 yyyy +=′
1)0(,1)0(,0)0( 321 ?=′′== yyy
即二阶问题化为微分方程组的初值问题
21 yy =′
32 yy =′
1233 3 yyyy +=′
1)0(,1)0(,0)0( 321 ?=′′== yyy?
?
?
???
?
Gaojiefangcheng.m
gaojie.m
function z=gaojie(x,y)
z=[y(2);y(3);y(1)*y(2)+3*y(3)];
x y
0 0
0.1000 0.0945
0.2000 0.1754
0.3000 0.2381
0.4000 0.2765
0.5000 0.2822
0.6000 0.2436
0.7000 0.1451
0.8000 -0.0342
0.9000 -0.3230
1.0000 -0.7586
function gaojiefangcheng()
xspan=0:0.1:1;
y0=[0,1,-1]';
[x,y]=ode45('gaojie',xspan,y0);
[x,y(:,1)]
plot(x,y(:,1))
xlabel('x')
ylabel('y')
0 0.2 0.4 0.6 0.8 1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
x
y