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

Variable aus Matlab-Workspace in Funktion verwenden

 

CryptKeeper
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 13.04.2011, 14:34     Titel: Variable aus Matlab-Workspace in Funktion verwenden
  Antworten mit Zitat      
Ich hab ne Funktion, in die eine Matrix mit Daten übergeben wird. Jetzt will ich, dass wenn man beim Aufrufen der Funktion keine Matrize angibt, automatisch eine gewisse Matrix übergeben wird, nennen wie sie 'daten'.

Also entweder gibt man selbst eine Matrix an: 'funktion(eigene_daten)', oder man gibt nichts an: 'funktion' und die Funktion verhält sich, als hätte man 'funktion(daten)' aufgerufen hätte.

Wenn ich aber innerhalb der Funktion 'daten' aufrufe, geschieht nix, obschon die Variable im Matlab-Workspace vorhanden ist. Via Google hab ich herausgefunden, dass das Problem ist, dass das Problem ist, dass die Workspaces der Funktion und von Matlab (von wo aus die Funktion aufgerufen wird), getrennt sind.

Wie krieg ich nun die Matrize in die Funktion rein, ohne sie beim Funktionsaufruf explizit anzugeben?

Abgesehen davon funktioniert übrigens alles, d.h. wenn man keine eigene Variable eingibt, dann wird 'daten' aufgerufen und weiterverarbeitet. Das einzige Problem das ich habe, ist, dass, wenn 'daten' in der Funktion aufgerufen wird, nicht die Matrize aus Matlab verwendet wird...
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2011, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

das ginge mit
Code:
daten = evalin('base', 'daten');


Ich würde aber eher meine Anwender durch eine entsprechende Fehlermeldung dazu erziehen, die Funktion korrekt aufzurufen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
CryptKeeper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 13.04.2011, 15:44     Titel:
  Antworten mit Zitat      
Danke für die zügige Antwort, funktioniert bestens so.

Der Anwender in diesem speziellen Fall bin übrigens sowieso ich, ich will nur nicht immer die Variablen extra eintippen müssen während ich am Script bastle. Muss ich zwar nur jeweils einmal, danach kann ich den ganzen Befehl per Pfeiltaste aufrufen, aber trotzdem...

Danach wird die Funktion von jemand anderem in ein GUI eingebaut und von dort aus angerufen, dann ist die Eingabe eh kein Thema mehr.
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 13.04.2011, 15:49     Titel:
  Antworten mit Zitat      
...und wenn ich alle daten speichern will.
wie geht das dann

Code:

daten = evalin('base', '.....');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2011, 16:23     Titel:
  Antworten mit Zitat      
Hallo,

das geht nur mit je einer Variablen. Ich würde dringend empfehlen, die Dateien so zu strukturieren, dass etwas derartiges nicht notwendig ist.

Wenn es absolut unbedingt sein muss:
Code:
vars = evalin('base', 'whos');
for I=1:length(vars)
    eval([vars(I).name ' = evalin(''base'', ''' vars(I).name ''');']);
end


Ja, es ist eklig, und genau deswegen und weil nicht mehr nachvollziehbar ist sollte man es nicht machen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
CryptKeeper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 13.04.2011, 16:28     Titel:
  Antworten mit Zitat      
Ich habs bei mir jetzt übrigens so angewendet, dass jeweils die Standardmatrize eingelesen wird, wenn ich für einen Inputwert 0 eingebe. So kann ich ohne viel Tippen von den einen Inputwerten die Standardwerte eingeben und anderen Inputwerten frei angeben. Das erleichtert das Basteln und könnte ja immer noch wieder entfernt werden, wenn das Skript mal fertig ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 13.04.2011, 16:34     Titel:
  Antworten mit Zitat      
dankeee Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2011, 16:43     Titel:
  Antworten mit Zitat      
Hallo,

ich möchte an dieser Stelle noch einmal betonen, dass ich diese Lösung absolut bescheiden finde (ich darf das sagen, sie kommt ja schließlich von mir Smile ). Ich empfehle dringend die Suche nach einer anderen, eleganteren Lösung - siehe auch der andere Thread.

http://www.gomatlab.de/alle-variabl.....es-uebergeben-t17516.html
Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
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.