Borrar filtros
Borrar filtros

Conditional variables with running ODE45

1 visualización (últimos 30 días)
Brilliant Purnawan
Brilliant Purnawan el 19 de Nov. de 2020
Respondida: Alan Stevens el 19 de Nov. de 2020
Hi all, is it possible to call variables within an ODE45 and use if statements? So the general idea can be see in the code below, what I'm trying to do is that if the value of y(:,2) is greater than 0.3, than A will be 0.1 else, if its lower it will just run with a value of 0.1. Is this possible?
clear all, close all, clc
if y(:,2)>0.3
A = 0.2;
else
A = 0.1;
end
B = 0.1;
tspan = [0:4:200];
y0 = [0.95 0.05 0];
[t,y] = ode45(@(t,y)odefcn(y,A,B),tspan,y0);
figure(1)
hold on
plot(t,y(:,1),'-o')
plot(t,y(:,2),'-*')
plot(t,y(:,3),'-d')
function dydt = odefcn(y,A,B)
dydt = zeros(3,1);
dydt(1) = -A*y(2)*y(1);
dydt(2) = A*y(2)*y(1)-B*y(2);
dydt(3) = B*y(2);
end

Respuesta aceptada

Alan Stevens
Alan Stevens el 19 de Nov. de 2020
Yes, but rearrange the coding as follows:
tspan = [0:4:200];
y0 = [0.95 0.05 0];
[t,y] = ode45(@(t,y)odefcn(t,y),tspan,y0);
figure(1)
hold on
plot(t,y(:,1),'-o')
plot(t,y(:,2),'-*')
plot(t,y(:,3),'-d')
function dydt = odefcn(~,y)
if y(2)>0.3
A = 0.2;
else
A = 0.1;
end
B = 0.1;
dydt = zeros(3,1);
dydt(1) = -A*y(2)*y(1);
dydt(2) = A*y(2)*y(1)-B*y(2);
dydt(3) = B*y(2);
end

Más respuestas (0)

Categorías

Más información sobre Programming en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by