How can the nested if statement in the last for loop be rewritten to be shorter?

1 vue (au cours des 30 derniers jours)
Jillian Sweatt
Jillian Sweatt le 2 Fév 2017
Commenté : Walter Roberson le 4 Fév 2017
clear; close all
n = 4000;
% (A) Use rand to generate randomly distributed points:
Rand_Number = rand(n, 2);
x = Rand_Number(:,1)*2-1;
y = Rand_Number(:,2)*2-1;
hold on
figure(1)
subplot(3,1,1)
plot(x,y,'r.')
title('Random Points Generated Using "rand"')
xlabel('x')
ylabel('y')
subplot(3,1,2)
count = zeros(1,20);
for i=1:length(x)
count = histcounts(x, -1:0.1:1);
end
X=-.95:.1:1;
bar(X,count)
title('Distribution of Points')
xlabel('x')
ylabel('y')
subplot(3,1,3)
hist(x)
title('Histogram of Points')
xlabel('x')
ylabel('y')
hold off
delta_x = 0.1;
for j=1:200
tmp = rand(n,1);
for i = 1:length(x)
if tmp < 0.5
x(i)=x(i)+delta_x;
else
x(i)=x(i)-delta_x;
end
end
end
xmove=x
countmove = zeros(1,20);
for i=1:length(x)
if xmove(i)>= -5.0 && xmove(i)<=-4.5
count(1) = count(1)+1;
elseif xmove(i)>-4.5 && xmove(i)<-4.0
count(2) = count(2)+1;
elseif xmove(i)>-4.0 && xmove(i)<-3.5
count(3) = count(3)+1;
elseif xmove(i)>-3.5 && xmove(i)<-3.0
count(4) = count(4)+1;
elseif xmove(i)>-3.0 && xmove(i)<-2.5
count(5) = count(5)+1;
elseif xmove(i)>-2.5 && xmove(i)<-2.0
count(6) = count(6)+1;
elseif xmove(i)>-2.0 && xmove(i)<-1.5
count(7) = count(7)+1;
elseif xmove(i)>-1.5 && xmove(i)<-1.0
count(8) = count(8)+1;
elseif xmove(i)>-1.0 && xmove(i)<-0.5
count(9) = count(9)+1;
elseif xmove(i)>-0.5 && xmove(i)<0.0
count(10) = count(10)+1;
elseif xmove(i)>0.0 && xmove(i)<0.5
count(11) = count(11)+1;
elseif xmove(i)>0.5 && xmove(i)<1.0
count(12) = count(12)+1;
elseif xmove(i)>1.0 && xmove(i)<1.5
count(13) = count(13)+1;
elseif xmove(i)>1.5 && xmove(i)<2.0
count(14) = count(14)+1;
elseif xmove(i)>2.0 && xmove(i)<2.5
count(15) = count(15)+1;
elseif xmove(i)>2.5 && xmove(i)<3.0
count(16) = count(16)+1;
elseif xmove(i)>3.0 && xmove(i)<3.5
count(17) = count(17)+1;
elseif xmove(i)>3.5 && xmove(i)<4.0
count(18) = count(18)+1;
elseif xmove(i)>4.0 && xmove(i)<4.5
count(19) = count(19)+1;
elseif xmove(i)>4.5 && xmove(i)<=5.0
count(20) = count(20)+1;
end
end
figure(2)
subplot(2,1,1)
plot(xmove,y,'r.')
title('Moved Random Points Generated')
xlabel('x')
ylabel('Number of Points')
subplot(2,1,2)
Y = -4.75:0.5:4.75;
bar(Y,countmove)
title('Distribution of Points')
xlabel('x')
ylabel('Number of Points')
  6 commentaires
Adam
Adam le 4 Fév 2017
Modifié(e) : Adam le 4 Fév 2017
Maybe they should put their question on Cody if they want 3 or more different ways to solve the same problem!
An answer being accepted suggests it fits the problem, otherwise it shouldn't be accepted. Most of us are more concerned with having wasted time if we answer a question that is also being asked in numerous different places to. Whether the answer was accepted or not doesn't really make any difference, but someone asking the same question 3 times having already accepted 2 answers is clearly just wasting people's time even if in this case the answers were largely trivial.
Walter Roberson
Walter Roberson le 4 Fév 2017
Please confirm that you do not want to count any value which is exactly -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, or 4.5, but that you do want to count values which are exactly -4.5 or 5.0 ?

Connectez-vous pour commenter.

Réponses (1)

Jan
Jan le 2 Fév 2017
Seriously? The answer given in http://www.mathworks.com/matlabcentral/answers/323076-how-do-you-rewrite-the-nested-if-statement-as-a-loop can be copied and adjusted easily. Again you do not need a loop, but one single command:
count = histcounts(x, -5:0.5:5)
Are you looking for something else?

Community Treasure Hunt

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

Start Hunting!

Translated by