Matlab事件功能不会停止集成

时间:2018-10-17 18:00:26

标签: matlab solver

我有一个用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了,但是在那种情况下,如何在不亲自检查的情况下停止求解器?

1 个答案:

答案 0 :(得分:1)

事件功能检查符号的值变化。因此,如果value(t = 0)<0和value(0

我可以解决的一种方法是使用条件语句:

value = 1;
if norm(dy)<1e-3&&t~=0
   value = -1;
end

t〜= 0语句允许值在第一步之后更改符号(如果已经小于阈值)。