X0=linspace(-.3,.3,10);
[T,X] = ode45(@difflossy,[0 10],X0);
plot(T,X,'-');
function dX = difflossy(T,X)
if X<-1
dX=0;
else
dX= X.*(1-X);
end
end
以上是我的解码非线性微分方程的代码。微分方程作为时间上的移动奇点。
我收到警告警告:t=1.466319e+00.
失败
当tspan减少到[0 1]时,我得到一个图表。但我需要知道很长一段时间内发生了什么。我认为if和for循环强加一个条件,使得对于小于1的X值,dX = 0
将解决。但我实施相同的方式有点错误。请帮帮我
答案 0 :(得分:0)
你的微分方程不连续。 ode45
求解器期望ODE函数的四阶导数是连续的并且“驯服”。由于情况并非如此,当解决方案接近跳转位置时,内部步长控制将步长调节至零。相位/模式分离平面。
您可以使用事件在ODE的两个阶段之间执行受控切换。
当然,任何不使用自适应步长的方法也会产生或多或少的准确结果,人们必须要探索跳跃对全局误差的影响程度。