Azzera filtri
Azzera filtri

write 3 for loops in each other

6 visualizzazioni (ultimi 30 giorni)
Hamed Nobarani
Hamed Nobarani il 28 Set 2018
Commentato: Hamed Nobarani il 11 Nov 2019
I should write the program to get the positions x,y,z (lattice points) and then repeat these positions(lattice cube) in the x,y,z direction with the constant(lattice constant).my code is just working in one direction(x), how can I fix my code to work in all 3 x,y,z directions?
for k=0:o
for j=0:m
for i=0:n
xpp(8*i+1:8*i+8,1)=xp+D*i;
ypp(8*i+1:8*i+8,1)=yp+D*j;
zpp(8*i+1:8*i+8,1)=zp+D*k;
end
end
end
%start
a=importdata('structure.xyz');
xp=a.data(:,1);
yp=a.data(:,2);
zp=a.data(:,3);
n=1;
m=1;
o=1;
xpp=xp;
ypp=yp;
zpp=zp;
for k=0:o
for j=0:m
for i=0:n
xpp(8*i+1:8*i+8,1)=xp+D*i;
ypp(8*i+1:8*i+8,1)=yp+D*j;
zpp(8*i+1:8*i+8,1)=zp+D*k;
end
end
end
fileID = fopen('N.txt','w');
fprintf(fileID,'%s\n','silicon');
fprintf(fileID,'si %f %f %f\n',[xpp,ypp,zpp].');
fclose(fileID);
  1 Commento
JohnGalt
JohnGalt il 1 Ott 2018
what's D? what's the for loop at the start of your question (before '%start')? Can you give an example with some very small amount of data? are trying to create a grid starting from a specific point with a specific separation?

Accedi per commentare.

Risposta accettata

Hamed Nobarani
Hamed Nobarani il 11 Nov 2019
Modificato: Rik il 11 Nov 2019
I was trying to get the unit cell of the structure which is contain positions of atoms and then expand it in 3 dimensions.
this is my code and answer to this question:
l=0;
s=0;
for k=1:o
for j=1:m
for i=1:n
nb=[xp+D*(i-1),yp+D*(j-1),zp+D*(k-1)];
pp(s+1:s+8,:)= nb;
s=s+8;
l=(l+1);
end
end
end
  2 Commenti
Rik
Rik il 11 Nov 2019
The code below is equivalent to what you wrote, but should be slightly faster.
pp=zeros(o*m*n*8,3);%or: pp=zeros([o*m*n 1].*size([xp,yp,zp]))
s=0;
for k=1:o
for j=1:m
for i=1:n
nb=[xp+D*(i-1),yp+D*(j-1),zp+D*(k-1)];
pp(s+1:s+8,:)= nb;
s=s+8;
end
end
end
l=o*m*n;
You should try to avoid l and o as variable names, because they look very similar to 1 and 0. It also looks like it should be possible to do this with meshgrid and reshape, which would avoid the loops.
Hamed Nobarani
Hamed Nobarani il 11 Nov 2019
Thanks Rik.
Sure,I got it.

Accedi per commentare.

Più risposte (1)

Karun Mathiazhagan
Karun Mathiazhagan il 3 Ott 2018
Hello Hamed,
If my understanding is correct that you wish to create a 3-D grid of points similar to a lattice structure, the following MATLAB Answers post should be of use to you: https://www.mathworks.com/matlabcentral/answers/98191-how-can-i-obtain-all-possible-combinations-of-given-vectors-in-matlab

Community Treasure Hunt

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

Start Hunting!

Translated by