2.6 常微分方程的精确解
常微分方程是一种包含自变量、函数、函数导数和高阶导数的等式。常微分方程(组)经常被用于描述事物的动态变化,如经济波动、物体运动轨迹、受力形变等。下面介绍如何用MATLAB来求解常微分方程。
求解常微分方程(组)通解的命令为:
dsolve(eqn1, eqn2, …, t)
其中,eqn1、eqn2等为各个方程,t为自变量。
例2-23 求解x′(t)+4x(t)=sin(2t)。
命令代码和输出结果如下:
>> dsolve(Dy+4∗x=sin(2∗t)) ans= sin(2∗t)/5-cos(2∗t)/10+C8∗exp(-4∗t)
输出结果中的C8为待定常数。
需要注意的是,如果常微分方程(组)中的自变量为t,则无须专门注明,其他自变量必须注明。比如y′(x)=x的通解为 y(x)=+C,如果不注明自变量去用命令dsolve(Dy=x),则输出的是错误答案ans=t∗x+C。正确的求解命令应为:
>> syms x; >> dsolve(Dy=x , x)
例2-24 求解x″(t)+2x′(t)-3x(t)=et。
输入如下代码:
>> dsolve(D2x+2∗Dx-3∗x=exp(t))
输出结果为:
ans= C1∗exp(t)-exp(t)/16+(t∗exp(t))/4+C2∗exp(-3∗t)
我们知道,绝大多数常微分方程是无法求解析解的。比如常微分方程x″(t)+2x′(t)-cosx(t)=etsinx(t)就无法求解析解,用dsolve求解时,系统会提示无法求解。
>> dsolve(D2x+2∗DX-cos(x)-sin(x)∗exp(t)) 警告:Explicit solution could not be found. In dsolve at 197 ans= [ empty sym]
例2-25 求解常微分方程组
由于常微分方程组的通解为单变量向量函数,因此输入的命令格式为:
>> syms t; >> [ x, y]=dsolve(Dx=-3∗y , Dy=4∗x , t)
输出结果为:
x= -(12^(1/2)∗C20∗cos(12^(1/2)∗t))/4-(12^(1/2)∗C19∗sin(12^(1/2)∗t))/4 y= C19∗cos(12^(1/2)∗t)-C20∗sin(12^(1/2)∗t)
常微分方程的通解都带有任意常数项,要确定这些常数项的具体数值,需要有定解条件,由此得到的就是常微分方程的特解。定解条件包括初值条件、边值条件,在此基础上求解常微分方程,可以用命令:
dsolve(eqn, condition1, …, conditionk, t)
其中,eqn为方程,condition1等为定解条件。
例2-26 求解二阶常微分方程初值问题:
输入如下命令:
>> syms x; >> dsolve(D2 y+3∗Dy+2∗y=sin(2∗x), y(0)=1 , Dy(0)=1 , x) ans= (17∗exp(-x))/5-(3∗cos(2∗x))/20-(9∗exp(-2∗x))/4-sin(2∗x)/20
例2-27 种群规模研究经常会用到常微分方程(组),比如最简单的指数增长模型:设t时刻种群总数为x(t),种群规模增速与现有种群规模成正比,比例系数为r(相对增长率)。据此可以建立常微分方程模型:x′(t)=rx(t)。求其通解:
>> syms x t r; >> s=dsolve(Dx=r∗x) s= C2∗exp(r∗t)
即模型有通解x=C·ert。设C=10而r=0.1,可以绘出解的曲线,如图2-15所示。
图2-15
考虑到环境和资源的限制,种群规模又会对种群增长产生一定的阻滞作用。假设种群的相对增长率是总数的减函数,其中,N为环境可容纳的种群数量上限。据此建立阻滞增长模型,对其求解:
>> syms x a N t; >> s=dsolve(Dx=a∗(1-x/N)∗x) s= N 0 N/(exp(-N∗(C5+(a∗t)/N))+1)
结果表明,方程有三个解,两个常值解x(t)≡N,0以及x(t)=。
观察x′随着x变化的图形,如图2-16所示。
图2-16
可以看到,随着种群总数x的增加,种群增速x′先是不断上升,然后趋于下降,并在x=N时降为0,即种群规模停止增长。
假设t=0时种群的初始值为x0,代入x(t)的表达式可以求出任意常数项C,这时解可以改写为
根据这个解的表达式,可以看到种群规模会随着时间推移逐渐趋于环境允许的上限。
本节所介绍的常微分方程解法,都是求精确解,但是绝大多数常微分方程都是无法求出精确解的。因此在实际应用中,人们经常会以微分方程的数值解来代替精确解。此外,还可以运用常微分方程定性理论,在不求解的情况下,根据微分方程(组)本身来直接分析解的性态。