# How to write a for loop code with an undetermined value

2 views (last 30 days)
ercan duzgun on 7 Feb 2021
Commented: acun67 acu on 9 Feb 2021
I am stuck while writing this code. Could you give any advise? The matrix N might consist of 16 different values at maximum(0-16), depending on the previous codes.
x=-20:5:20;
y=-20:5:20;
z=40:5:80;
[X,Y,Z]=meshgrid(x,y,z)
h=0;
for i=1:1:length(x)
for j=1:1:length(y)
for k=1:1:length(z)
h=h+1
M(h,:)=[X(i,j,k), Y(i,j,k), Z(i,j,k)];
% N(h)=a_MATLAB_function([M(h,1); M(h,2); M(h,3) ],[0;0;0]);
end
end
end
N=[12 12 12 12 12 12 12 8 4 4 4 12 12 ]; % Matrix N's size is 1x729 actually.
% Here it is simplified as a shorter row.
NN = unique(N); NN_length=length(NN);
S=[35 50 100 200];
figure; hold on;
for i=1:1:NN_length
NNN(i,:)=find(N==NN(i))
scatter3(M(NNN(i,:),1),M(NNN(i,:),2),M(NNN(i,:),3),S(i))
end
hold off;
For the first value of i=1, it is fine. But later I receive error. Because while writing the second row of NNN, first row and second row dimension doesn't match. What can I do? Thanks in advance.

Jan on 7 Feb 2021
Edited: Jan on 7 Feb 2021
Is there a reason to collect NNN in an array?
for i = 1:NN_length
NNN = (N == NN(i)); % Without FIND: faster logical indexing
scatter3(M(NNN, 1), M(NNN, 2), M(NNN, 3), S(i))
end
If you do need NNN later on:
NNN = cell(1, NN_length)
for i = 1:NN_length
NNN{i} = (N == NN(i)); % Without FIND: faster logical indexing
scatter3(M(NNN{i}, 1), M(NNN{i}, 2), M(NNN{i}, 3), S(i))
end
acun67 acu on 9 Feb 2021
thank you for sharing your knowledge.I am not using this installation and will try to solve my problem using Matlab online.

David Hill on 7 Feb 2021
What are you trying to plot? What is M?
[n,nn,nnn]=unique(N);%;might want to look at the outputs here, they might help you
ercan duzgun on 7 Feb 2021
@David Hill , Sorry I forgot about M. Now I edited the codes. M is meshgrid and locations of points in 3D.

R2020b

### Community Treasure Hunt

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

Start Hunting!