1
实验?/p>
常微分方程的
Matlab
解法
一、实验目?/p>
1
?/p>
了解常微分方程的解析解?/p>
2
?/p>
了解常微分方程的数值解?/p>
3
?/p>
学习掌握
MATLAB
软件有关的命令?/p>
二、实验内?/p>
一根长
l
的无弹性细线,
一段固定,
另一端悬挂一个质量为
m
的小球,在重力的作用?/p>
小球处于垂直的平衡位置?/p>
若使小球偏离平衡位置一个角?/p>
?/p>
?/p>
让它自由?/p>
它就会沿圆弧?/p>
动?/p>
在不考虑空气阻力的情况下?/p>
小球会做一定周期的简谐运动?/p>
利用牛顿第二定律得到?/p>
下的微分方程
0
)
0
(
'
,
)
0
(
,
sin
"
0
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
mg
ml
问该微分方程是线性的还是非线性的?是否存在解析解?如果不存在解析解,
能否求出其近
似解?/p>
三、实验准?/p>
MATLAB
中主要用
dsolve
求符号解析解?/p>
ode45,ode23,ode15s
求数值解?/p>
s=dsolve(
?/p>
方程
1
?/p>
,
?/p>
方程
2
?/p>
,
?/p>
,
?/p>
初始条件
1
?/p>
?/p>
?/p>
初始条件
2
?/p>
?/p>
,
?/p>
自变?/p>
?/p>
)
用字符串方程表示,自变量缺省值为
t
。导数用
D
表示?/p>
2
阶导数用
D2
表示,以
此类推?/p>
S
返回解析解。在方程组情形,
s
为一个符号结构?/p>
[tout,yout]=ode45(
?/p>
yprime
?/p>
,[t0,tf],y0)
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
Runge-Kutta
?/p>
?/p>
?/p>
?/p>
Runge-Kutta-Felhberg
法求数值解?/p>
yprime
是用以表?/p>
f(t,y)
?/p>
M
文件名,
t0
表示自变
量的初始值,
tf
表示自变量的终值,
y0
表示初始向量值。输出向?/p>
tout
表示节点
(t
0
,t
1
,
?/p>
,t
n
)
T
,
输出矩阵
yout
表示数值解,每一列对?/p>
y
的一个分量。若无输出参数,?/p>
自动作出图形?/p>
ode45
是最常用的求解微分方程数值解的命令,对于刚性方程组不宜采用?/p>
ode23
?/p>
ode45
类似?/p>
只是精度低一些?/p>
ode12s
用来求解刚性方程组?/p>
是用格式?/p>
ode45
?/p>
可以?/p>
help
dsolve, help ode45
查阅有关这些命令的详细信?/p>
.
四、实验方法与步骤
练习
1
求下列微分方程的解析?/p>
?/p>
1
?/p>
b
ay
y
?/p>
?/p>
'
?/p>
2
?/p>
1
)
0
(
'
,
0
)
0
(
,
)
2
sin(
'
'
?/p>
?/p>
?/p>
?/p>
y
y
y
x
y
?/p>
3
?/p>
1
)
0
(
'
,
1
)
0
(
'
,
'
,
'
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
g
f
f
g
g
g
f
f
方程?/p>
1
)求解的
MATLAB
代码为:
clear;
s=dsolve(
'Dy=a*y+b'
)
结果?/p>