使用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后跟数字表示多次微分运算。比如,D2表示 。紧跟在微分算符后的字符表示因变量。例如,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)求的解。
在命令行输入:
dsolve('Dy = a*x')
计算结果为
a*x*t+C1
(2)求微分方程的解。
在命令行输入:
dsolve('Df = f + sin(t)')
计算结果为
-1/2*cos(t)-1/2*sin(t)+exp(t)*C1
(3)求微分方程的解。
在命令行输入:
dsolve('(Dy)^2 + y^2 = 1','s')
计算结果为
1
-1
-sin(s-C1)
sin(s-C1)
(4)求微分方程的解。
在命令行输入:
dsolve('Dy = a*y', 'y(0) = b')
计算结果为
tool工具箱b*exp(a*t)
(5)求微分方程的解。
在命令行输入:
dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0') ,
计算结果为
cos(a*t)
(6)求微分方程的解。
在命令行输入:
y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0')
计算结果为
y =
sin(t)
-sin(t)
(7)求微分方程的解,其中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)
即微分方程的通解为:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论