我有一个用Matlab解决的ode系统。我想找到系统的稳定状态,为此,我使用here中所述的事件函数。
但是有时候,即使达到了标准,求解器也不会停止。
例如,如果您使用x0 = 10
求解以下系统,则求解器将在2000年之前停止,而使用x0 = 0.0001
则不会。
事件函数(eventfun_t.m)
function [x,isterm,dir] = eventfun_t(t,y)
dy = test_systeme(t,y);
x = norm(dy) - 1e-3;
isterm = 1;
dir = 0; %or -1, doesn't matter
end
系统(test_systeme.m)
function dx = test_systeme(t,x)
v = x./(x+1);
dx = -v;
end
解决系统问题
x0 = 10;
eventfonction = @(t,y) eventfun_t(t,y);
optionsode=odeset('Events',eventfonction);
[t x]=ode15s(@(t,x) test_systeme(t,x),[0 2000],x0,optionsode);
我想是因为x0 = 0.0001
norm(dy)
已经低于1e-3了,但是在那种情况下,如何在不亲自检查的情况下停止求解器?
答案 0 :(得分:1)
事件功能检查符号的值变化。因此,如果value(t = 0)<0和value(0 我可以解决的一种方法是使用条件语句: t〜= 0语句允许值在第一步之后更改符号(如果已经小于阈值)。value = 1;
if norm(dy)<1e-3&&t~=0
value = -1;
end