1.dsolve函数
这是最简单的一种求解微分方程的一种方法-符号解法。一般来说,在matlab中解常微分方程有两种方法,一种是符号解法,另一种是数值解法。在本科阶段的微分数学题,基本上可以通过符号解法解决。
用matlab解决常微分问题的符号解法的关键命令是dslove命令。该命令中可以用D表示微分符号,其中D2表示二阶微分,D3表示三阶微分,以此类推。值得注意的是该微分默认是对自变量t求导,也可以很容易在命令中改为对其他变量求导。
①求解析解
y’‘= a*y+ bx;
s = dsolve('D2y=a*y+b*x','x');
D2y用以表示y的二阶导数,默认是以t为自变量的,所以最好指明自变量为x.
②初值问题
y’ = y – 2*t / y , y(0) = 1;
s = dsolve('Dy == y - 2*t / y','y(0) ==1');
③边值问题
x*y’’ – 3*y’ = x^2 , y(1) = 0 , y(5) = 0;
s = dsolve('x*D2y - 3*Dy ==x^2','y(1)=0','y(5) == 0','x');
函数最后一个参数指明自变量为x.
④高阶方程
求解y’’ = cos(2x) – y , y(0) = 1 , y’(0) = 0;
s=dsolve('D2y == cos(2*x) - y','y(0) =1','Dy(0) = 0','x');
simplify(s);
⑤方程组问题
f’ = f + g , g’ = -f + g,f(0) = 1, g(0) =2;
[f,g]= dsolve('Df == f + g','Dg = -f + g','f(0)==1','g(0) == 2','x');另外,对于常系数线性微分方程,尤其是高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变易法求特解。
如:
求x'' + 0.2x' +3.92x = 0的通解
解: 特征方程为:x^2 + 0.2x + 3.92 = 0
roots( [ 1 0.2 3.92 ] )
然后求出来继续做就好啦。
2.ode45
常用格式 [ t , y ] = ode45( odefun , tspan , y0 )
odefun | 用以表示f(t,y)的函数句柄或inline函数i,t是标量,y是标量或向量 |
tspan | 若是二维向量[t0,tf],表示自变量初值t0和终值tf;若是高维向量[t0,t1,...,tn],则表示输出结点列向量 |
y0 | 初值向量y0 |
t | 表示结点列向量(t0,t1,...,tn)^T |
y | 数值解矩阵,每一列对应y的一个分量 |
如:
1. 创建一个函数文件eq2.m,在函数文件中描述这个解的微分方程组:
%eq2.m文件
%描述微分方程组
function dy=eq2(t,y)
%说明微分变量是二维的,令y(1)=x,y(2)=y
dy=zeros(2,1);
%微分方程组
dy(1)=5*(1-y(1))/sqrt((1-y(1))^2+(t-y(2))^2);
dy(2)=5*(1-y(2))/sqrt((1-y(1))^2+(t-y(2))^2);
end
[t,y]=ode45(@eq2,[0,2],[0,0]);
ode45函数说明:第一个参数是方程的名称,第二个参数是指求解时t的范围,第三组参数是指y中每个元素的初值。
[t,y]=ode45(@eq2,[t1,t2],[y1(0),y2(0)]);