gpt4 book ai didi

MATLAB 在不变流形上求解 ODE

转载 作者:太空宇宙 更新时间:2023-11-03 19:46:25 27 4
gpt4 key购买 nike

我有一个看起来像的系统

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 求解器。示例:https://www.mathworks.com/help/matlab/ref/ode15s.html 中的“将 Robertson 问题求解为半显式微分代数方程 (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

关于MATLAB 在不变流形上求解 ODE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39841695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com