Last else if graph not plotting

조회 수: 1 (최근 30일)
ANMOL BAKSHI
ANMOL BAKSHI 2020년 11월 2일
댓글: ANMOL BAKSHI 2020년 11월 3일
if i==3600
hold on;
plot(x,C);
elseif i==10800
plot(x,C);
elseif i==36000
plot(x,C);
elseif i==36300
plot(x,C);
hold off;
end
In the above program, if i varies from 0 to 36300 or more then last plot is not happening and if I add one more else if i ==36600 then that will not get plot.

채택된 답변

S. Walter
S. Walter 2020년 11월 2일
편집: S. Walter 2020년 11월 2일
I tried the following:
% Clear the command window and close the figures
clc
close all
% Make a color vector for plots
col_vec = lines(4);
% Start a counter for the legend entry
cnt = 1;
% Loop over the entries
for i = 1 : 1 : 36300
% Make random data
x = 0:1:10;
C = rand(size(x));
% If/else statements - added some extra code for plotting clarity
if i==3600
hold on;
plot(x,C,'-o','MarkerFaceColor',col_vec(cnt,:))
leg{cnt} = 'first';
cnt = cnt+1;
elseif i==10800
plot(x,C,'-d','MarkerFaceColor',col_vec(cnt,:))
leg{cnt} = 'second';
cnt = cnt+1;
elseif i==36000
plot(x,C,'-s','MarkerFaceColor',col_vec(cnt,:))
leg{cnt} = 'third';
cnt = cnt+1;
elseif i==36300
plot(x,C,'-^','MarkerFaceColor',col_vec(cnt,:))
leg{cnt} = 'fourth';
hold off;
end
end
% Annotate the plot
legend(leg,'location','northeast')
axis([0 10 0 1.1])
grid on
xlabel('x')
ylabel('C')
When I do that, I get four lines with markers
However, as the other commenter said, placing hold on and hold off ahead of the if/else statements is more robust, because if the condition is not met, you might not get the right hold conditions.
  댓글 수: 3
S. Walter
S. Walter 2020년 11월 2일
I tried to run your code, setting the following variables:
% The calculation length domain (in m)
lengt = 1;
% No. of grid points
points = 100;
deltaX = (lengt./(points-1));
% Time step (in seconds)
deltat = 1;
% Diffusivity
diff = 1e-5;
% Maximum time (in seconds)
t = 370000;
And I get the following result
It's a bit difficult to see but the result of i = 36000 and i = 36300 are basically on top of each other. Below is a picture of the result zoomed in to axis([49 51 0.57 0.59]):
Just as a note, you may want to evaluate how you are doing your time step. You currently have your and iteration in time as the same thing but your iterations must be integers. This line:
i = 0:deltat:t
ANMOL BAKSHI
ANMOL BAKSHI 2020년 11월 3일
Yes, got it.
Really thanks for the suggestions and help.

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

추가 답변 (1개)

KSSV
KSSV 2020년 11월 2일
Try like this:
hold on
if i==3600
plot(x,C);
elseif i==10800
plot(x,C);
elseif i==36000
plot(x,C);
elseif i==36300
plot(x,C);
end
hold off
Though I don't understand..what is the purpose to plot like this.
  댓글 수: 1
ANMOL BAKSHI
ANMOL BAKSHI 2020년 11월 2일
hold on
if i==3600
plot(x,C);
C3600 = C;
elseif i==10800
plot(x,C);
C10800 = C;
elseif i==36000
plot(x,C);
C36000 = C;
elseif i==36300
plot(x,C);
C36300 = C;
end
hold off
Tried that. Now, here C36300 is getting stored but plot for last else if is not happening.

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

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by