write 3 for loops in each other

3 visualizaciones (últimos 30 días)
Hamed Nobarani
Hamed Nobarani el 28 de Sept. de 2018
Comentada: Hamed Nobarani el 11 de Nov. de 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 comentario
JohnGalt
JohnGalt el 1 de Oct. de 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?

Iniciar sesión para comentar.

Respuesta aceptada

Hamed Nobarani
Hamed Nobarani el 11 de Nov. de 2019
Editada: Rik el 11 de Nov. de 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 comentarios
Rik
Rik el 11 de Nov. de 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 el 11 de Nov. de 2019
Thanks Rik.
Sure,I got it.

Iniciar sesión para comentar.

Más respuestas (1)

Karun Mathiazhagan
Karun Mathiazhagan el 3 de Oct. de 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

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by