Ich führe ein Skript, das eine Handlung animiert (Simulation eines Wasserflusses). Nach einer Weile töt ich die Schleife mit ctrl-c. Nachdem ich das mehrmals gemacht habe, bekomme ich den Fehler:
%Vor% Und nachdem ich diesen Fehler erhalten habe, wird jeder Aufruf meines Skripts diesen erzeugen.
Nun passiert es, bevor irgendwas in der Funktion, die ich anrufe, ausgeführt wird, dh selbst wenn ich die Zeile a=1
als erste Zeile der aufgerufenen Funktion hinzufüge, bekomme ich immer noch den Fehler und keinen Ausdruck, also den Code drin Die Funktion wird nicht einmal ausgeführt.
Was könnte das verursachen?
Es gibt mehrere mögliche Gründe.
Wahrscheinlich erstellt Ihr Skript einige Variablen, die den Speicher füllen. Führen Sie
aus %Vor%vor dem Neustart des Skripts, so dass alle Variablen gelöscht werden, oder ändern Sie Ihr Skript in eine Funktion (die alle temporären Variablen automatisch nach der Rückkehr der Funktion löscht).
Vielleicht animieren Sie mehrere Plots übereinander (ohne vorher die Achsen zu löschen). Daher haben Sie möglicherweise keinen Java-Heapspeicher mehr. Sie können die geöffneten Figuren einzeln schließen oder
ausführen %Vor%Sie können auch die Menge an Java-Speicher erhöhen, die Matlab auf Ihrem System verwendet ( Siehe Anleitung hier ) - beachte, dass das Limit generell eher gering ist, ärgerlich also wenn man tonnenweise Zahlen will.
Besonders wenn Sie eine ältere Version von Windows ausführen, können Sie Ihren Speicher fragmentieren. Matlab benötigt zusammenhängende Blöcke mit freiem Speicherplatz zum Zuweisen von Variablen. Um nach Speicherfragmentierung zu suchen, führen Sie
aus %Vor%und sehen Sie sich die Nummer für die maximal mögliche Größe an. Wenn dies viel kleiner als die für alle Arrays verfügbare Größe ist, ist es Zeit, Matlab neu zu starten (ich denke, wenn Sie eine Windows-Version verwenden, die einen Neustart erfordern würde, um das Problem zu beheben, sollten Sie einen neuen Computer mit Win7 suchen) .
clear all
close all
sind direkte Wege, um Speicher freizugeben, die allen Nicht-Anfängern bekannt sind.
Das Hauptproblem ist, dass, wenn Sie einige Daten große Datenverarbeitung getan haben, und löschte / schloss alles ab - es gibt immer noch erhebliche Speicher von Matlab verwendet.
Dies ist ein momentan großes Problem mit Matlab, und meines Wissens gibt es keine Lösung, statt Matlab neu zu starten , was sehr schade ist.
Sie können auch den Befehl pack
ausprobieren, zB:
um Speicher zu löschen. Obwohl ich nach einem kürzlichen MathWorks-Seminar einen MathWorks-Guru gefragt habe, hat er auch den Kommentar von Andrew Janke zur Speicherfragmentierung übernommen. In der Regel beendet das Beenden und Neustarten von Matlab dies für mich (auf XP).
Es klingt, als würden Sie keine Ihrer Variablen löschen. Sie sollten entweder eine Möglichkeit bieten, die Schleife zu stoppen, ohne ctrl-c zu drücken (schreiben Sie eine einfache GUI mit einer "Stop" -Schaltfläche und Ihrer Anzeige) und dann Ihren Arbeitsbereich im Skript aufräumen oder Ihre Variablen am Anfang des Skripts löschen.
Speichern Sie absichtlich alle Daten (oder eine große Komponente) bei jeder Iteration Ihrer Schleife?