首页 > 编程笔记 > MATLAB笔记 阅读:84

MATLAB dsolve()求解微分方程(附带实例)

从数值计算角度看,与初值问题求解相比,微分方程边值问题的求解显得复杂和困难。对于应用数学工具求解实际问题的科研人员,此时不妨通过符号计算指令进行求解尝试。因为对于符号计算,无论是初值问题还是边值问题,其求解微分方程的指令形式都相同,且相当简单。

当然,符号计算可能消耗较多的计算机资源,可能得不到简单的解析解或封闭形式的解,甚至无法求解。既然没有万能的微分方程的一般解法,那么,求解微分方程的符号法和数值法就有很好的互补作用。

在 MATALB 中,函数 dsolve() 用来求常微分方程的符号解。在方程中,用大写字母 D 表示一次微分运算,D2、D3 分别表示二次、三次微分运算。依次类推,符号 D2y 表示 (d^2)y/d(t^2)。

函数 dsolve() 把 d 后面的字符当作因变量,并默认所有这些变量对符号 t 求导,其调用格式如下:
dsolve() 函数的输出结果与 solve() 函数的类似,既可以用与因变量个数相同的输出参数分别接收每个因变量的解,又可以把方程的解写入一个结构数组中。

【实例】符号微分方程求解示例。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> syms a b x(t);
>> f=sym(a*diff(x,t) + b*x == 0)
f =
    a*diff(x(t), t) + b*x(t) == 0
>> dsolve(f)
ans =
    C1*exp(-(b*t)/a)
>> dsolve(f,'x(0)=1')
ans =
    exp(-(b*t)/a)
>> dsolve(f,'x(0)=1','m')
ans =
    exp(-(b*m)/a)

继续在命令行窗口中输入以下语句,并显示相应的输出结果:
>> clear
>> syms x(t) y(t);
>> f1=sym(diff(x,t)-3*x+2*y==0)
f1(t) =
    2*y(t) - 3*x(t) + diff(x(t), t) == 0
>> f2=sym(diff(y,t)-2*x+y==0)
f2(t) =
    y(t) - 2*x(t) + diff(y(t), t) == 0
>> [x,y]=dsolve(f1,f2)
x =
    2*C1*exp(t) + C2*(exp(t) + 2*t*exp(t))
y =
    2*C1*exp(t) + 2*C2*t*exp(t)
>> [x,y]=dsolve(f1,f2,'x(0)=-1','y(0)=1')
x =
    - exp(t) - 4*t*exp(t)
y =
    exp(t) - 4*t*exp(t)
注意,dsolve() 函数并不总能得到显式解,如果不能得到显式解,那么 dsolve() 函数会尝试求隐式解。如果也不能得到隐式解,那么应当采用 ODE 求解器来求微分方程的数值解。

相关文章