[SOS!!!!!!!] Plotting with if statement.

1 vue (au cours des 30 derniers jours)
Wei-Ta, Huang
Wei-Ta, Huang le 3 Mai 2016
Commenté : Wei-Ta, Huang le 10 Mai 2016
I have a problem using the if statement. When I plot the it individually, it was fine.
but when I attempt to combine the plots with if statement, it just doesn't seem right.
Please help me, I'm stuck!!!! Here's my script:
function [x1,x2,x3,x4]=BurnFraction_2()
clear();
a = 5;
n = 4;
thetas = [-50 -20 0 20];
thetad = 60;
for i = 1:4;
theta=linspace(thetas(i),thetas(i)+thetad,100);
dum=(theta-thetas(i))/thetad;
temp=-a.*dum.^n;
xb=1-exp(temp);
if i == 1
x1 = xb;
end
if i == 2
x2 = xb;
end
if i == 3
x3 = xb;
else
x4 = xb;
end
end;
plot(theta,x1,'-',theta,x2,'--',theta,x3,'.',theta,x4,'-.','linewidth',5);
set(gca,'Xlim',[-60 80],'Ylim',[0 1],'fontsize', 18,'linewidth',2);
xlabel('Crank Angle (°)','fontsize', 18);
ylabel('Cumulative Burn Fraction','fontsize', 18);
end
Thank you! I really appreciate it!!!
  1 commentaire
Stephen23
Stephen23 le 3 Mai 2016
Modifié(e) : Stephen23 le 3 Mai 2016
Why do you have clear() at the beginning of your function? This is good example of cargo-cult programming: clear does nothing at all here, but is likely put there out of blind faith and habit.
What variables do you imagine that have at the very start of the function, before any variables have been defined? What does clear do ?
Why do beginners think that they need to put clear at the start of every piece of code that they write?

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 3 Mai 2016
Modifié(e) : Stephen23 le 3 Mai 2016
You made a mistake on these two lines:
theta = linspace(thetas(k),thetas(k)+thetad,100);
dum = (theta-thetas(k))/thetad;
because although you calculate a range of theta values that depends on the loop iteration, you then subtract thetas(k) from theta, so the values in dum are always going to be the same (they do not change with the loop iteration). The rest of your code then correctly plots all four identical vectors in the same location because that is what you calculated.
Try it yourself, it is easy to print the first few values of dum:
disp(dum(1:9))
inside the loop, and you will see that you are always calculating exactly the same values (which you then plot, in exactly the same position, so they look like one line).
Anyway, here is a simplified version of your code (edited after Guillaume's comment):
function [Y,X] = BurnFraction_2()
a = 5;
n = 4;
thetas = [-50 -20 0 20];
thetad = 60;
N = numel(thetas);
X = cell(1,N);
Y = cell(1,N);
for k = 1:N
theta = linspace(thetas(k),thetas(k)+thetad,100);
dum = (theta-thetas(k))/thetad;
temp = -a.*dum.^n;
X{k} = theta;
Y{k} = 1-exp(temp);
end
plot(X{1},Y{1},'-',X{2},Y{2},'--',X{3},Y{3},'.',X{4},Y{4},'-.','linewidth',5);
set(gca,'Xlim',[-60 80],'Ylim',[0 1],'fontsize', 18,'linewidth',2);
xlabel('Crank Angle (°)','fontsize', 18);
ylabel('Cumulative Burn Fraction','fontsize', 18);
which makes this:
  3 commentaires
Stephen23
Stephen23 le 3 Mai 2016
@Guillaume: thank you, the theta values now have their own cell array.
Wei-Ta, Huang
Wei-Ta, Huang le 10 Mai 2016
@Guillaume,@Stephen Cobeldick: Thanks guys! I really appreciate it!!!!!!!!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by