Hallo allerseits,
ich habe hier einen MathScript-Knoten, in dem per while-Schleife ein 2D-Array reihenweise mit Werten befüllt werden soll. Ich definiere hier Werte für ein numerisches Gitter mit den Schrittweiten dx (Spalten) und dy (Reihen).
Die Werte, die den einzelnen Elementen zugeordnet werden, werden dabei aus ein paar simplen Angaben einer Textdatei zusammengesetzt.
Das klappt auch soweit so gut alles. Allerdings ist die Schleife äußerst langsam. Das Array besitzt ungefähr die Größe 100x500, also absolut nichts Großes, aber die Ausführung dauert ewig.
Hier die Schleife
Code:
while (i-1)<=Nx,
array_nref(j,i)=complex(array_struct(m,3),array_struct(m,4)/(20000*k0)),
i=i+1,
end
j=j+1,
i=1,
Ich lese also aus array_struct zwei Werte aus, baue daraus eine komplexe Zahl und stecke die als Element in array_nref. Das ganze gehe ich spaltenweise durch, springe in die nächste Reihe und fülle wieder auf. Rund um die Schleife kommt noch ein if-else, dass dafür sorgt, dass den Zähler m überwacht, so dass aus array_struct auch die richtigen Werte ausgelesen werden.
Hier mal der gesamte Code:
Code:
while (j-1)*dy<=Ly,
if (j-1)*dy<=thickness_act,
% Fill the current row of array_nref (representing the x-direction) completely
while (i-1)<=Nx,
array_nref(j,i)=complex(array_struct(m,3),array_struct(m,4)/(20000*k0)),
i=i+1,
end
% Row completley filled. Increase j to jump to the next column.
j=j+1,
i=1,
else
% The column is in the next layer, so thickness_act has to be updated.
% m is increased so the ref. index values of the next layer are used.
m=m+1,
thickness_act=thickness_act+array_struct(m,2),
end
end
Entweder ist MathScript einfach verdammt lahm oder aber ich habe einen programmiertechnischen Bock geschossen. Ich tippe ja auf letzteres. In Mathematica erzeuge ich mit einem ähnlichen Code das Array in Sekundenbruchteilen.
Hat jemand eine Idee?