Вложенные циклы FOR и создание текстового файла (3d-слоев) слишком медленные - PullRequest
0 голосов
/ 18 мая 2019

Я довольно новичок с Matlab. Я сталкиваюсь с проблемой создания вложенных циклов for и создания текстового файла. Это слишком медленно. Текстовый файл содержит данные для 3d-слоев. Если количество слоев, строк и столбцов в каждом слое слишком велико, выполнение кода занимает много часов. Если кто-то здесь может помочь мне с оптимизацией моего кода или предложить альтернативный вариант для решения этой проблемы, это было бы очень полезно. Большое спасибо.

clear all
b=100;
l=150;
d=0.1;
dn=1.0;
nnR=b/dn+1;
nnC=l/dn+1;
nL=d/0.1+1;
R=1;
C=1;
L=0;
x=0;
y=0;
z=0;
space='          ';
add=0;
nline=sprintf('Start\ntextfileindex\n$    nod               row               column               layer                        \n');
% fileID=fopen('node.txt','w');
% fprintf(fileID,'%s', q);
for b = 1:nL

for i = 1:nnR
    dummieR=R
    for i = 1:nnC
        abc=b;
        abc=num2str(abc);
        if b<10

        abc=strcat('0',abc)
        else
            abc=b;
        end
        dummieC=C
        numC=num2str(dummieC)
        dummiex=x
        dummiey=y
        dummiez=z
    numz = sprintf('%.4f',dummiez)   
    numx = sprintf('%.4f',dummiex)
    numy = sprintf('%.4f',dummiey)

%     numx = sprintf('%.4f',dummiex)
    if C<100 && C>9
        numC=strcat('0',numC)
    end
    if C<10
        numC=strcat('00',numC)
    end

        numR=num2str(dummieR)
    if R<100 && R>9
        numR=strcat('0',numR)
    end
    if R<10
        numR=strcat('00',numR)
    end
%     dummiex=x
%     numx = sprintf('%.4f',dummiex)
%     numx=num2str(dummiex)
   if dummiex<100 && dummiex>9.9999
    def= "\n"+abc+numR+numC+"         "+numx
   elseif dummiex<10
     def= "\n"+abc+numR+numC+"          "+numx
   else
      def= "\n"+abc+numR+numC+"        "+numx
   end
   if dummiey<100 && dummiey>9.9999
    def= def+"         "+numy
   elseif dummiey<10
     def= def+"          "+numy
   else
      def= def+"        "+numy
   end

 if nL<10
 def= def+"           "+numz
 else
  def= def+"          "+numz 
 end
    C=C+1;
    nline= strcat(nline,def)
    nline= sprintf(nline)
    x=x+dn;
    end
    R=R+1;
    C=1;
    y=y+dn;
    x=0;
end
z=z+0.1;
x=0;
y=0;
C=1;
R=1;
end
nline=sprintf(nline+ "\n" + "END")
fileID=fopen('textfile.txt','wt');
fprintf(fileID, nline);
...