2016-10-03 19 views
5

ODE我有一个系统,看起来像MATLAB解决的不变流形

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的值。但是这非常慢,而且ode15s(我的系统是张弛振荡器)不能满足集成容差。如何找到由F(v,n,h)=0定义的歧管上ODE的解决方案?

+1

您应该使用DAE求解器,因为您的系统是微分代数的。 – LutzL

回答

2

我觉得@ LutzL的评论非常有帮助。可以使用ode15s设置DAE解算器。 示例:“解决罗伯逊问题作为半显性微分代数方程(DAE的)”在https://www.mathworks.com/help/matlab/ref/ode15s.html

在我的情况部分,我会设置一个矩阵:

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 
0

一种可能的方法来解决这个问题是要区分 的F(v,n,h)=0公式:

现在我们可以得到ODE系统

这可以用通常的方法解决。

+0

我试过这种方法。然而,系统中折叠结构附近的dF/dv项变得非常接近0。因此解决方案的精度不是很好。 – Badoe