How to have multiple lines on a graph for different values of a parameter.

조회 수: 4 (최근 30일)
Hello,
I'm trying to vary the parameter 'k' from 0 to 4 in this code. However, there is an error because the blue lines in the plot should not be shooting out to the right. Can anyone see what I am doing wrong?
Thanks!
%Clear command window and workspace
clear
close all
clc
% Fitzhugh-Nagoma model parameters
e=0.01; k=1:1:4; a=0.1;
i = 0.001;
figure(1);
hold on
u=zeros(500000,4);
v=zeros(500000,4);
t=zeros(100000,1);
% Initial conditions:
u(:)=0.6;
v(:)=0.0;
t(1)=0;
dt=0.001;
%==========================================================================
% Forvard Euler Method, for soluing the ODE
%==========================================================================
for i=1:1:500000
t(i+1)=t(i)+dt;
% u(i+1) = u(i)+ dt*((1/e)*((k(:)*u(i)*(u(i)-a)*(1-u(i)))-v(i)));
u(i+1,:) = u(i,:)+ dt*((1/e)*((k*(u(i,:)*(u(i,:)-a)*(1-u(i,:))))-v(i)));
v(i+1,:) = v(i,:)+ dt*(u(i)-v(i));
end
% Getting the phase plot
figure(1);
upts=(-2:.05:2);
unullpts=(k(:)*upts.*(upts-a).*(1-upts));
vnullpts=upts;
plot(upts,unullpts,'black',upts,vnullpts,'black');
xlabel('u'); ylabel('v');
axis([-1 2 -1.5 5]);
plot(u,v,'b')
title('Nullcline Plot')
xlabel('u')
ylabel('v')

채택된 답변

madhan ravi
madhan ravi 2018년 11월 6일
편집: madhan ravi 2018년 11월 6일
EDITED
%Clear command window and workspace
clear
close all
clc
% Fitzhugh-Nagoma model parameters
e=0.01;
k=1:1:4; a=0.1;
i = 0.001;
figure(1);
hold on
u=zeros(500000,4);
v=zeros(500000,4);
t=zeros(100000,1);
% Initial conditions:
u(:)=0.6;
v(:)=0.0;
t(1)=0;
dt=0.001;
%==========================================================================
% Forvard Euler Method, for soluing the ODE
%==========================================================================
for i=1:1:500000
t(i+1)=t(i)+dt;
% u(i+1) = u(i)+ dt*((1/e)*((k(:)*u(i)*(u(i)-a)*(1-u(i)))-v(i)));
u(i+1,:) = u(i,:)+ dt.*((1/e).*((k.*(u(i,:).*(u(i,:)-a).*(1-u(i,:))))-v(i)));
v(i+1,:) = v(i,:)+ dt.*(u(i)-v(i));
end
% Getting the phase plot
figure(1);
upts=(-2:.05:2);
unullpts=(k(1).*upts.*(upts-a).*(1-upts));
vnullpts=upts;
plot(upts,unullpts,'black',upts,vnullpts,'black');
axis([-1 2 -1.5 5]);
hold on
plot(-u,-v,'b')
unullpts=(k(2).*upts.*(upts-a).*(1-upts));
vnullpts=upts;
plot(upts,unullpts,'m');
unullpts=(k(3).*upts.*(upts-a).*(1-upts));
vnullpts=upts;
plot(upts,unullpts,'r');
unullpts=(k(4).*upts.*(upts-a).*(1-upts));
vnullpts=upts;
plot(upts,unullpts,'g');
title('Nullcline Plot')
xlabel('u')
ylabel('v')
  댓글 수: 11
Westin Messer
Westin Messer 2018년 11월 6일
Thanks. Is there any way I can put that in some kind of loop? For example, if I wanted to do 20 different values of k I wouldn't have to write the plot line 20 times.
madhan ravi
madhan ravi 2018년 11월 6일
편집: madhan ravi 2018년 11월 6일
for i = 1:numel(k)
unullpts=(k(i).*upts.*(upts-a).*(1-upts));
vnullpts=upts;
plot(upts,unullpts,'m');
hold on
end
The above does the same work what you want

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Mathematics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by