Fixing code to plot an ODE
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
frozentangled
le 24 Déc 2020
Commenté : Mischa Kim
le 26 Déc 2020
Hi guys,
I was just coding to plot an ODE, but ran into some problems dispalying the result
The code are as follows
function dxdt = ODE(t, x, alpha, beta)
dxdt = diag(alpha - beta*[x(1);x(2);x(3)])*[x(1);x(2);x(3)];
for n=1:200
p=.01*n;
alpha=[.1; .5; .3];
beta=[.2 .3 .4; p 1.5 .6; .2 .5 .8];
time = [0 100];
initial=[0.5; 0.2; 0.3];
[t,y] = ode45(@(t,y) ODE(t,y,alpha,beta), time, initial);
F1=y(100,1);
F2=y(100,2);
F3=y(100,3);
end
figure(1)
plot(p,F1);
hold on
plot(p,F2);
plot(p,F3);
hold off
Could you tell me what's off?
Many thanks in advance
0 commentaires
Réponse acceptée
Mischa Kim
le 24 Déc 2020
Hi, you are almost there. This should get you started:
hold on
for n=1:200
p=.01*n;
alpha=[.1; .5; .3];
beta=[.2 .3 .4; p 1.5 .6; .2 .5 .8];
time = [0 100];
initial=[0.5; 0.2; 0.3];
[t,y] = ode45(@(t,y) ODE(t,y,alpha,beta), time, initial);
F1=y(end,1); % assuming you are trying to access last elements
F2=y(end,2);
F3=y(end,3);
plot(p,F1,'ro'); % a cleaner way would be to save the values...
hold on % ...for Fi in a matrix and then plot outside...
plot(p,F2,'ko'); % ...of the for loop
plot(p,F3,'bo');
end
hold off
function dxdt = ODE(t, x, alpha, beta)
dxdt = diag(alpha - beta*[x(1);x(2);x(3)])*[x(1);x(2);x(3)];
end
2 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Calendar dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!