使用Matlab符号数学工具箱求解微分方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Matlab符号数学工具箱求解微分方程
Matlab符号数学工具箱(Symbolic Math Toolbox)中函数dsolve用于计算常系数微分方程(ordinary differential equations)的符号解(Symbolic solution),此处的符号解即解析解。
注意:不是所有的微分方程都能用dsolve函数求出解析解。
1调用形式
dsolve函数调用形式有如下两种:
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')
r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
2函数描述
dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')用于计算常系数微分方程(或常系数微分方程组)的符号解,其中参数'eq1,eq2,...'指定微分方程(组),参数'v'指定微分方程(组)中的自变量,参数'cond1,cond2,...'指定微分方程(组)的边界条件及(或)初始条件。
不指定参数'v'时,默认的自变量为t。
输入的方程中使用大写字母D代表微分算符,如单个字母D表示d
dt。
大写
字母D后跟数字表示多次微分运算。
比如,D2表示
2
2
d
dt。
紧跟在微分算符后的
字符表示因变量。
例如,D3y表示对因变量y的三次微分,其中y是x或t的函数。
初始条件或边界条件由形如y(a) = b或Dy(a) = b的方程给出,其中,y是因变量,b是常量。
如果给出的初始条件的个数小于因变量的个数,则dsolve函数计算的符号解中包含任意常量C1, C2,....。
形式dsolve('eq1','eq2',...,'cond1','cond2',...,'v'),表示微分方程和(或)初始条件可以独立的符号方程作为函数的参数,函数dsolve最多可以输入12个参数。
函数的输出结果有三种可能:(1)一个方程、一个输出的情况,对于非线性方程,dsolve返回的结果以符号向量的形式给出。
(2)方程个数与解的个数相同且大于1的情况,dsolve对计算结果按词典顺序排序并将其赋值给r。
(3)多个方程、单个输出的情况,dsolve返回一个包含符号解的结构。
如果dsolve不能计算出显式解(explicit solution),该函数计算隐式解(implicit
solution);当dsolve 返回一个隐式解时,会产生告警信息。
如果dsolve 既不能计算出显式解也不能计算出隐式解,会产生一个告警信息和空解。
在这种情况下,可以使用Matlab 的函数ode23或ode45求得数值解。
在某些包含非线性方程的情况下,计算结果是相同的低阶微分方程或积分。
3 求解微分方程的例子
(1)求dy ax dt
=的解。
在命令行输入:
dsolve('Dy = a*x')
计算结果为
a*x*t+C1
(2)求微分方程()sin df f t dt
=+的解。
在命令行输入:
dsolve('Df = f + sin(t)') 计算结果为
-1/2*cos(t)-1/2*sin(t)+exp(t)*C1
(3)求微分方程2
21dy y dt ⎛⎫+= ⎪⎝⎭
的解。
在命令行输入:
dsolve('(Dy)^2 + y^2 = 1','s')
计算结果为
1
-1
-sin(s-C1)
sin(s-C1)
(4)求微分方程()0dy ay dt y b ⎧=⎪⎨⎪=⎩
的解。
在命令行输入:
dsolve('Dy = a*y', 'y(0) = b')
计算结果为
b*exp(a*t)
(5)求微分方程2220|1|0t t a d y a y dt y dy dt π==⎧=-⎪⎪⎪=⎨⎪⎪=⎪⎩
的解。
在命令行输入:
dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0') ,
计算结果为
cos(a*t)
(6)求微分方程()2
2100dy y dt y ⎧⎛⎫+=⎪ ⎪⎨⎝⎭⎪=⎩
的解。
在命令行输入:
y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0')
计算结果为
y =
sin(t)
-sin(t)
(7)求微分方程222sin()d x k x h pt dt
+=的解,其中k,p,h 是常量。
在命令行输入:
dsolve('D2x+k*k*x=h*sin(p*t)')
计算结果为
sin(k*t)*C2+cos(k*t)*C1-h*sin(p*t)/(-k^2+p^2)
即微分方程的通解为:
1222
cos()sin()sin()h x C kt C kt pt p k =+--。