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的解决方案?
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的解决方案?
我觉得@ 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
一种可能的方法来解决这个问题是要区分 的F(v,n,h)=0
公式:
现在我们可以得到ODE系统
或
这可以用通常的方法解决。
我试过这种方法。然而,系统中折叠结构附近的dF/dv项变得非常接近0。因此解决方案的精度不是很好。 – Badoe
您应该使用DAE求解器,因为您的系统是微分代数的。 – LutzL