ich habe eine verschachtelte For-Schleife für eine Matrix (X,Y,M), dabei sind X und Y die ebenen Koordinaten und M die Zeit. Damit soll eine instationäre Wärmeübertragung nachgestellt werden.
Dies ist nur ein Beispielcode im kleinen Format. Für die spätere Anwendung wird dieser für die Zeitschrittweiten und Schrittweiten in beide Raumrichtungen auf größere Werte ausgebaut.
Dazu habe ich nun folgende Frage:
Wie kann ich mir beispielsweise die Temperaturmatrix in jedem 4. Zeitschritt in einer anderen Matrix abspeichern während dem Durchlaufen der for-Schleife?
Für die spätere Anwendung wird es wohl jeder 100-ste sein.
Vielen Dank im Vorraus!
Code:
%Beispiel-Code
Lx = 5; %Länge in x VORGABE [m]
Ly = Lx; %Länge in y VORGABE
Nx = 5; %Knotenanzahl
Ny = Nx; %Knotenanzahl
% Vektorlänge
x = linspace(0,Lx,Nx+1); %
y = linspace(0,Ly,Ny+1);
%Vektorschrittweite
dx = x(2)-x(1); %Schrittweite in x-y gleich groß [m]
dy = y(2)-y(1);
%Zeitschritte
dt = 0.1; %Schrittweite der Zeit BEISPIEL [s]
%Zeitvektor
tmax = 1; %maximale Zeitdauer BEISPIEL [s]
t = 0:dt:tmax; %Zeitvektor
for m = 1:length(t)-1 for i = 2:length(x)-1 %Zeile
for j = 2:length(y)-1 %Spalte
T(i,j,m+1)=K1*T(i,j,m)+K2*(T(i-1,j,m)+T(i+1,j,m)+T(i,j-1,m)+T(i,j+1,m))
ich verstehe die Frage nicht.
Was ist "die Temperaturmatrix"? T? Das sammelst du doch für jeden Zeitschritt?
Willst du das auf jeden 4. Zeitschritt reduzieren? Oder soll von vorneherein nur jeder 4. Zeitschritt abgespeichert werden?
Drei geschachtelte for-Schleifen sind hinsichtlich Laufzeit sehr ineffizient. Die zwei inneren Schleifen lassen sich vektorisieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
in der Temperaturmatrix ist die Temperatur für jeden Knoten eines FE-Gitters zum Zeitpunkt m hinterlegt. Damit versuche ich eine instationäre Temperaturverteilung in einem 2D Modell nachzubilden.
Ich habe mich wohl missverständlich ausgedrückt, ich meine die zweite Option.
Die Temperatur innerhalb der Matrix sammele ich zwar für jeden Zeitschritt, jedoch möchte lediglich jeden bspw. 4-ten Zeitschritt abspeichern.
Da die Zeitschritte für die spätere Anwendung durch ein formelles Stabilitätskriterium
extrem klein sind, ist es nicht sehr sinnvoll jeden Zeitschritt darzustellen. Ich habe vor diese Zwischenergebnisse im Nachhinein zu plotten, um die zeitliche Ausbreitung der Temperatur nachzustellen.
Wie würde eigentlich eine solche Vektorisierung aussehen?
Wenn du in Speicherprobleme laufen solltest, solltest du aber von vorneherein nur jeden 4. bzw. 100. Zeitschritt abspeichern statt im Nachhinein zu reduzieren.
Zur Vektorisierung kannst du in diesem Fall i und j jeweils durch 2:end-1 ersetzen. i+1 und j+1 bzw. i-1 und j-1 verschieben sich entsprechend zu 3:end bzw. 1:end-2. Komplett:
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
vielen Dank, das hat bisher soweit alles gut funktioniert! (sowie im kleinen als auch im großen Modell)
Nun möchte ich noch nach jedem 100-sten Zeitschritt einen neuen Temperaturwert, welcher in einem Vektor (kleinerer Dimension als die Matrix) hinterlegt ist, auf die erste Zeile(erste Knotenschicht des FE-Gitters) aufprägen.
Nun möchte ich noch nach jedem 100-sten Zeitschritt einen neuen Temperaturwert, welcher in einem Vektor (kleinerer Dimension als die Matrix) hinterlegt ist, auf die erste Zeile(erste Knotenschicht des FE-Gitters) aufprägen.
Für mich ist es schon mal schwierig zu verstehen, was du genau programmiertechnisch möchtest. Tendieren würde ich zu etwas wie:
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.