MATLAB 微分代数方程解法Microsoft Word 文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微分代数方程(DAE)的Matlab解法

所谓微分代数方程,是指在微分方程中,某些变量满足某些代数方程的约束。假设微分方程的更一般形式

可以写成

前面所介绍的ODEs数值解法主要针对能够转换为一阶常微分方程组的类型,故DAE就无法使用前面介绍的常微分方程解法直接求解,必须借助DAE的特殊解法。

其实对于我们使用Matlab求解DAE时,却没有太大的改变只需增加一个Mass参数即可。描述f(t,x)的方

法和普通微分方程完全一致。

注意:ode15i没法设置Mass属性,换句话说除了ode15i外其他ode计算器都可以求解DAEs问题1.当M(t,y)非奇异的时候,我们可以将微分方程等效的转换为y'=inv(M)*f(t,y),此时就是一个普通的ODE(当

然我们可以将它当成DAEs处理),对任意一个给定的初值条件都有唯一的解

2.当m(t,y)奇异时,我们叫它为DAEs(微分代数方程),DAEs问题只有在同时提供状态变量初值y0和状态变量一阶导数初值py0,且满足M(t0,y0)*yp0=f(t0,y0)时才有唯一解,假如不满足上面的方程,DAEs解算器会将提供的y0和py0作为猜测初始值,并重新计算与提供初值最近的封闭初值

3.质量矩阵可是一个常数矩阵(稀疏矩阵),也可以是一个自定义函数的输出。但是ode23s只能求解Mass

是常数的DAEs

4.对于Mass奇异的DAEs问题,特别是设置MassSingular为yes时,只能ode15s和ode23t解算器

5.对于DAE我们还有几个参数需要介绍

a.Mass:质量矩阵,不说了,这个是DAE的关键,后面看例子就明白了

b.MStateDependence:质量矩阵M(t,y)是否是y的函数,可以选择none|{weak}|strong,none表示M与

y无关,weak和strong都表示与y相关

c.MvPattern:注意这个必须是稀疏矩阵,S(i,j)=1表示M(t,y)的第i行中任意元素都与第j个状态变量yi有

关,否则为0

d.MassSingular:设置Mass矩阵是否奇异,当设置为yes时,只能使用ode15s和ode23t

e.InitialSlope:状态变量的一阶导数初值yp0,和y0具有相同的size,当使用ode15s和ode23t时,该属

性默认为0

下面我们以实例说明,看下面的例子,求解该方程的数值解

【解】

真是万幸,选取状态变量和求状态变量的一阶导数等,微分方程转换工作,题目已经帮我们完成。

可是细心的网友会发现,最后一个方程不是微分方程而是一个代数方程(这就是为什叫DAE的原因),其实

我们可以将它视为对三个状态变量的约束。

(1)用矩阵形式表示出该DAEs

(2)编写Matlab代码

odefun=@(t,x)[-0.2*x(1)+x(2)*x(3)+0.3*x(1)*x(2);

2*x(1)*x(2)-5*x(2)*x(3)-2*x(2)*x(2);

x(1)+x(2)+x(3)-1];%微分方程组

M=[1 0 0;0 1 0;0 0 0];%质量矩阵

options=odeset('mass',M);%对以DAE问题,mass属性必须设置

x0=[0.8;0.1;0.1];%初值

[t,x]=ode15s(odefun,[0 20],x0,options);%这里好像不能使用ode45 figure('numbertitle','off','name','DAE demo—by Matlabsky')

plot(t,x)

legend('x1(t)','x2(t)','x3(t)')

相关文档
最新文档