Fixing code to plot an ODE

1 次查看(过去 30 天)
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

采纳的回答

Mischa Kim
Mischa Kim 2020-12-24
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 个评论
frozentangled
frozentangled 2020-12-24
It worked. Thanks! I am most grateful
I hope you have a great holiday season!
Mischa Kim
Mischa Kim 2020-12-26
Have a joyful holiday season, as well.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Calendar 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by