先行多步法等,这些方法可用于解高阶常微分方程(组)初值问题。边值问题采用不同方法,如差分法、有限元法等。数值算法的主要缺点是它缺乏物理理解。
4.解微分方程的MATLAB命令MATLAB中主要用dsolve求符号解析解,ode45ode23ode15s求数值解。
sdsolve‘方程1’‘方程2’…’初始条件1’,’初始条件2’…’自变量’用字符串方程表示,自变量缺省值为t。导数用D表示,2阶导数用D2表示,以此类推。S返回解析解。在方程组情形,s为一个符号结构。toutyoutode45‘yprime’t0tfy0采用变步长四阶Ru
geKutta法和五阶Ru
geKuttaFelhberg法求数值解,yprime是用以表示fty的M文件名,t0表示自变量的初始值,tf表示自变量的终值,y0表示初始向量值。输出向量tout表示节点t0t1…t
T输出矩阵yout表示数值解,每一列对应y的一个分量。若无输出参数,则自动作出图形。ode45是最常用的求解微分方程数值解的命令,对于刚性方程组不宜采用。ode23与ode45类似,只是精度低一些。ode12s用来求解刚性方程组,是用格式同ode45。可以用helpdsolvehelpode45查阅有关这些命令的详细信息
例1求下列微分方程的解析解
(1)yayb
(2)ysi
2xyy00y01
(3)ffgggff01g01
方程(1)求解的MATLAB代码为:
fclearsdsolveDyayb结果为sbaexpatC1方程(2)求解的MATLAB代码为:clearsdsolveD2ysi
2xyy00Dy01xsimplifys以最简形式显示s结果为s16cos3x12cosxsi
x12si
x16si
3xcosx53si
xa
s23si
xcosx53si
x方程(3)求解的MATLAB代码为:clearsdsolveDffgDggff01g01simplifysfs是一个结构simplifysg结果为a
sexptcostexptsi
ta
sexptsi
texptcost
例2求解微分方程
yyt1y01
先求解析解,再求数值解,并进行比较。由clearsdsolveDyyt1y01tsimplifys
可得解析解为ytet。下面再求其数值解,先编写M文件fu
8m
M函数fu
8mfu
ctio
ffu
8tyfyt1再用命令clearcloset0011ytexptplotty化解析解的图形holdo
保留已经画好的图形,如果下面再画图,两个图形和并在一起tyode45fu
8011plottyro画数值解图形,用红色小圈画xlabeltylabely结果见图71
f14
135
13
125
y
12
115
11
105
1
0
02
04
06
08
1
t
图1661解析解与数值解
由图1661可见,解析解和数值解吻合得很好。
例3求方程
ml