在MATLAB中处理奇点

问题描述 投票:0回答:1
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将解决。但我实施相同的方式有点错误。请帮我

matlab ode
1个回答
0
投票

你的微分方程不是连续的。 ode45求解器期望ODE函数的四阶导数是连续的并且“驯服”。由于情况并非如此,当解决方案接近跳转位置时,内部步长控制将步长调节至零。相位/模式分离平面。

您可以使用事件在ODE的两个阶段之间执行受控切换。

当然,任何不使用自适应步长的方法也会产生或多或少的准确结果,人们必须探索跳跃对全局误差的影响程度。

© www.soinside.com 2019 - 2024. All rights reserved.