WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablen dauerhaft im Workspace speichern?

 

Macc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2016, 11:30     Titel: Variablen dauerhaft im Workspace speichern?
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgende allgemeine Matlab frage, zu der ich bislang leider noch keine Antwort habe finden können*:

Ist es möglich, Variablen dauerhaft im Workspace zu speichern?

Hintergrund ist folgender: Ich lade in einem Programm bzw. einer Funktion eine relativ große Matlabdatei mit Daten ein. Diese dient als reiner Input, wird also vom Matlab Programm nicht verändert. Nun muss jedes mal, wenn ich zum Testen die Funktion neu starte, wieder diese Datei eingelesen werden, was verhältnismäßig lange dauert. Daher die Frage, ob ich die Daten auch dauerhaft speichern kann (so dass sie nicht nach jedem Programmdurchlauf- bzw. abbruch gelöscht wird).

Vielen Dank!!!


(*Gefunden dazu habe ich nur diesen Tread: http://www.gomatlab.de/daten-dauerh.....,dauerhaft+workspace.html
Aber da ich keine eigene GUI verwende, hat mir das nicht so weiter geholfen.)


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.03.2016, 11:39     Titel: Re: Variablen dauerhaft im Workspace speichern?
  Antworten mit Zitat      
Hallo Macc,

Das ist eine Aufgabe für den Befehl persistent

Code:
function yourFcn
persistent data
if isempty(data)
  data = load('FromWhereYouGetIt.mat');
end

Nun wird "data" behalten, es sei denn, Du verwendest irgendwo ein wildes "clear all" oder editierst das M-file.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Macc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2016, 12:13     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für die schnelle Antwort.

Irgendwie funktioniert das allerdings noch nicht.

Wenn ich die Variable zur persistent Variable mache und später im Code z.B. einen Breakpoint setze und den Debugger stoppe, ist trotzdem der gesamt Workspace weg und auch die persistent Variable ist nicht mehr aufrufbar. Beim nächsten Start muss sie also wieder neu eingelesen werden.

Was mache ich falsch bzw. wo könnte mein Denkfehler liegen? Oder kann es an Einstellungen liegen? Sorry, ich kenne mich mit Matlab leider nicht so gut aus.

Code:
function [Out1, Out2, Out3] = functionname(In1, In2, In3, In4)

persistent functionInputData;
functionInputData = load (Dateipfad);

% weiterer Programmcode...
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 03.03.2016, 14:33     Titel:
  Antworten mit Zitat      
2 Gedanken:

Je nach Gesamtprojekt mit einem Skript arbeiten anstelle einer Funktion. DAnn ist alless immer im Based Workspace.

Das Einlesen der Daten kritisch hinterfragen. Brauche ich wirkliche alle? Alle Variablen in der vollständigen Grösse? Oder ist auch nachladen sinnvoll. Grösse der Variablen selber? Brauche ich soviele (Mess?)werte oder nur jeden Zehnten z.B.? SINGLE statt DOUBLE?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.03.2016, 15:21     Titel:
  Antworten mit Zitat      
Hallo Macc,

Zitat:
Wenn ich die Variable zur persistent Variable mache und später im Code z.B. einen Breakpoint setze und den Debugger stoppe, ist trotzdem der gesamt Workspace weg und auch die persistent Variable ist nicht mehr aufrufbar.

Hast Du irgendwo ein "clear all" im Code? Falls ja: Löschen!
Liest Du die persistent Variable in einer Funktion ein? Dann ist sie auch nur innerhalb der Funktion erreichbar.

Code:
function [Out1, Out2, Out3] = functionname(In1, In2, In3, In4)
persistent functionInputData;
if isempty(functionInputData)
  functionInputData = load (Dateipfad);
end
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Macc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2016, 17:35     Titel:
  Antworten mit Zitat      
Danke für eure beiden Antworten! Es funktioniert jetzt!

Habe es jetzt genauso mit der isempty Abfrage übernommen, da hatte ich wohl vorher einen Denkfehler, und jetzt geht es

Danke auch für den Hinweis, ggf. statt einer Funktion ein Skript zu benutzen. Könnte in der Tat manchmal besser sein.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.