MATLAB在不变流形上求解ODE

时间:2016-10-03 22:56:42

标签: matlab ode

我的系统看起来像

dn/dt=f(n,v)
dh/dt=g(h,v)

我想在F(v,n,h)=0上的非线性函数v来解决这个等式。我尝试使用像v=fzero(@(x) F(x,n,h),0)这样的东西来解决每个时间步骤中歧管上v的值。但这非常慢,而且我的系统是张弛振荡器,无法满足积分容差。如何在F(v,n,h)=0定义的流形上找到ODE的解?

2 个答案:

答案 0 :(得分:2)

我发现@ LutzL的评论非常有帮助。可以使用ode15s设置DAE求解器。 示例:https://www.mathworks.com/help/matlab/ref/ode15s.html

中的“将罗伯逊问题解为半显式微分代数方程(DAE)”部分

就我而言,我会设置一个矩阵:

M=[zeros(1,3);0,1,0;0,0,1];
options = odeset('Mass',M,'RelTol',1e-5,'AbsTol',1e-6,'MaxStep',0.01);
y0=[v0,n0,h0];
[T,Y]=ode15s(@slow,[0 50],y0,options);

slow是一个定义为:

的函数
function dy = slow(t,y)
    v=y(1); n=y(2); h=y(3);
    dy=zeros(3,1);
    dy(1)=F(v,n,h);
    dy(2)=f(n,v);
    dy(3)=g(h,v);
end

答案 1 :(得分:0)

解决此问题的一种可能方法是区分 F(v,n,h)=0等式:

现在我们可以获得ODE系统

可以通常的方式解决。