使用质量矩阵解算器求解DAE

使用MATLAB中可用的质量矩阵求解器之一求解微分代数方程®. 要使用此工作流,请首先完成中的步骤1、2和3求解微分代数方程(DAE). 然后,使用质量矩阵解算器而不是ode15i.

此示例演示了ode15sode23t. 有关其他解算器的详细信息,请参见选择一个ODE解算器(MATLAB)并调整此页面上的工作流。

第一步。将DAE转换为函数句柄

还原指数,你有一个方程向量代数微分方程和一个变量向量代瓦尔斯. 使用ode15sode23t,需要两个函数句柄:一个表示DAE系统的质量矩阵,另一个表示质量矩阵方程的右侧。这些函数句柄构成ODE系统的等效质量矩阵表示,其中M(T,Y(T))Y’(T) =F(T,Y(T)).

通过使用查找这些函数句柄质量矩阵变换得到质量矩阵M右边呢F.

[M,f]=massMatrixForm(DAE,DAEVAR)
0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0(T)-2*Dxtt(T)*x(T)-2*Dytt(T)*y(T)-2*Dxtt(T)^2-2*Dyt(T)^2-Dytt(t)-Dyt(t)

中的方程代数微分方程可以包含变量向量中未指定的符号参数代瓦尔斯. 通过使用查找这些参数塞迪夫关于赛姆瓦尔从…起代数微分方程代瓦尔斯.

pDAEs=symvar(DAEs);pDAEvars=symvar(DAEvars);extraParams=setdiff(pDAEs,pDAEvars)
外部参数=[g,m,r]

质量矩阵M没有这些额外的参数。因此,转换M通过使用奥德函数.

M=函数(M,DAEVAR);

转换F到函数句柄。将额外参数指定为附加的输入奥德函数.

f=odeFunction(f,DAEvars,g,m,r);

工作流的其余部分纯粹是数字。设置参数值并创建函数句柄。

g=9.81;m=1;r=1;F=@(t,Y)F(t,Y,g,m,r);

步骤2.找到初始条件

解算器需要函数句柄中所有变量的初始值。使用MATLAB找到满足方程的初始值分贝功能分贝接受对初始条件的猜测(可能不满足方程式),并尝试使用这些猜测找到令人满意的初始条件。分贝可能会失败,在这种情况下,必须手动为问题提供一致的初始值。

首先,检查中的变量代瓦尔斯.

代瓦尔斯
DAEvars=x(t)y(t)t(t)Dxt(t)Dytt(t)Dytt(t)Dxtt(t)

在这里Dxt(t)是的一阶导数x(t),戴特(t)是的二阶导数y(t)等等a中有7个变量7.-借-1.因此,对变量及其导数的初始值的猜测也必须是7.-借-1.向量。

假设摆锤的初始角位移为30°或pi/6,坐标原点位于摆锤的悬挂点。考虑到我们使用了半径R属于1.,初始水平位置x(t)r*sin(pi/6).初始垂直位置y(t)-r*cos(pi/6). 指定向量中变量的这些初始值y0est.

任意将剩余变量及其导数的初始值设置为0.这些不是很好的猜测。但是,它们足以解决我们的问题。在您的问题中,如果分贝错误,然后提供更好的猜测并参考分贝

y0est=[r*sin(pi/6);-r*cos(pi/6);0;0;0;0;0;0];yp0est=零(7,1);

创建包含质量矩阵的选项集M以及初步猜测yp0est,并指定数值搜索的数值公差。

opt=odeset('Mass',M,'InitialSlope',yp0est,'RelTol',10.0^(-7),'absol',10.0^(-7));

使用MATLAB为变量及其导数找到一致的初始值分贝作用第一个论点分贝必须是将DAE描述为的函数句柄f(t,y,yp)=f(t,y,y')=0. 依据MF,这意味着f(t,y,yp)=M(t,y)*yp-f(t,y).

隐式数据集=@(t,y,yp)M(t,y)*yp-F(t,y);[y0,yp0]=decic(隐式数据集,0,y0est,[],yp0est,[],opt)
y0=0.4771-0.8788-8.62140.0000-2.2333-4.1135 yp0=0.0000-2.23330

现在创建一个包含质量矩阵的选项集M系统与向量的关系yp0导数的一致初始值。求解系统时将使用此选项集。

opt=odeset(opt,‘初始斜率’,yp0);

步骤3.解决DAE系统

解决系统在时间跨度内的集成问题0T0.5. 将网格线和图例添加到绘图中。代码使用ode15s.相反,您可以使用ode23s通过替换ode15s具有ode23s.

[tSol,ySol]=ode15s(F[0,0.5],y0,opt);绘图(tSol、ySol(:,1:origVars),“-o”)对于k=1:origVars S{k}=char(DAEvars(k));终止图例,“位置”,“最好的”)网格在…上

通过设置新值并重新生成函数句柄和初始条件,解决系统中不同参数值的问题。

设置R2.并重新生成函数句柄和初始条件。

r=2;F=@(t,Y)F(t,Y,g,m,r);y0est=[r*sin(pi/6);-r*cos(pi/6);0;0;0;0;0;0;0;0];隐式数据集=@(t,Y,yp)m(t,Y)*yp-F(t,Y);[y0,y0]=decic(隐式数据集,0,y0est,[],yp0est,[],yp0est,[],opt opt=odeset(opt,'InitialSlope',,'yp0);

为新参数值求解系统。

[tSol,ySol]=ode15s(F[0,0.5],y0,opt);绘图(tSol、ySol(:,1:origVars),“-o”)对于k=1:origVars S{k}=char(DAEvars(k));终止图例,“位置”,“最好的”)网格在…上

相关话题