MATLAB: Ode45 change function index when something happends

ode45

I have a proble with one of my codes, I want to change index of a function when y value reach a given value of y
I will give an easy example:
A = 1;
B = 2;
tspan = [0 5];
y0 = [0 0.01];
[t,y] = ode45(@(t,y) odefcn(t,y,A,B), tspan, y0);
function dydt = Fun(t,y,A,B)
if y(1)>0.6
%Then A=3(example) change forever
end
dydt = zeros(2,1);
dydt(1) = y(2);
dydt(2) = (A/B)*t.*y(1);
end
%If you do this
function dydt = Fun(t,y,A,B)
if y(1)>0.6
A=3
end
dydt = zeros(2,1);
dydt(1) = y(2);
dydt(2) = (A/B)*t.*y(1);
end
%Then @ Command Window
A =
1
A =
3
A =
1
A =
3
%I want it to be all 3s.

Best Answer

Try persistent variable
function main
clc % clear command window
clear functions % clear persistent variable
A = 1;
B = 2;
tspan = [0 5];
y0 = [0 0.01];
[t,y] = ode45(@(t,y) Fun(t,y,A,B), tspan, y0);
function dydt = Fun(t,y,A,B)
persistent flag % declare 'flag' as persisten variable
if isempty(flag) % if 'flag' is empty define 'false'
flag = false;
end
if y(1)>0.6
flag = true; % if y(1) > 0.6 define flag 'true'
end
if flag == true
A = 3;
end
sprintf('y(1) = %f; A = %d',y(1),A)
dydt = zeros(2,1);
dydt(1) = y(2);
dydt(2) = (A/B)*t.*y(1);
See more about persistent
Related Question