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

Übergabe der Variable von M-File an Function

 

Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2011, 14:55     Titel: Übergabe der Variable von M-File an Function
  Antworten mit Zitat      
Hallo zusammen
ich taste mich gerade an Function handle heran und habe dazu eine Frage:

ich erzeuge mit einem M-File mehrere Variablen, welche sich im Workspace befinden. Nun wird eine Funktion aufgerufen (durch Optimizertool), die anhand dieser Variablen weitere Rechenschritte durchführen muss.
Ich kriege jedoch die Fehlermeldung, dass die Variablen jedoch nicht bekannt sind, obwohl diese sich im Workspace befinden.

Was mache ich da falsch bzw. worauf muss ich dabei achten? Kann man wie bei der Programmiersprache C dem Matlab nicht klar machen, dass diese Variablen extern deklariert sind und sich bereit im Workspace befinden?
Private Nachricht senden Benutzer-Profile anzeigen


cpueschn
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2011, 15:07     Titel:
  Antworten mit Zitat      
Habe genau das selbe Problem. Hatte versucht an die Function in Simulink einen erweiterten Eingang zu machen und den mit einer externen Matlab-file (in dem die Variablen gespeichert sind) zu füttern..hat auch net geklappt!
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.05.2011, 16:00     Titel:
  Antworten mit Zitat      
Hallo,

in MATLAB hat jede Funktion ihren eigenen Workspace, und eine Variable liegt immer in einem Workspace.
Wenn Parameter übergeben werden müssen, behilft man sich oft mit anonymen Function Handles:

Beispiel: Optimierung mit Parameter a

Command Window / Skript:
Code:
a = 1;
x = fminunc(@(x) f(x, a), 0)

Die Funktion f:
Code:
function y = f(x, a)
y = (x-a).^2;


Was das Simulink-Problem angeht, verstehe ich das Problem nicht genug, um die Frage zu beantworten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cpueschn
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2011, 16:27     Titel:
  Antworten mit Zitat      
Hallo Harald,

Also bei mir ist das Problem, dass ich eine U/f-Regelung schreiben muss. Dazu habe ich ein PID-Regler implementiert der seinen Ausgang (eine Frequenz) auf eine U/f-Profil gibt, um die passende Spannugn dazu einzustellen. Das U/f-Profil habe ich als eine Function realisiert, die schaut, ob die übergebene Frequenz z.B. im Feldschwächebereich liegt.

In dieser Function benutze ich Variablen, die ich irgendwo initialisieren muss. Diese möchte ich gerne außerhalb dieser Function anlegen, da ich davon ausgehe, dass die Variablen jedesmal neu initialisiert werden, wenn die Function aufgerufen wird. Aber genau das will ich vermeiden. Deswegen dachte ich, man könnte die Variablen in eine m-File anlegen und diese dann beim Start von Simulink in der workspace initialisieren lassen, so dass die Function darauf zugreifen kann. Dies geht aber leider nicht (weil ja wie du sagst jedee func ihre eigen workspace hat)

Viele Grüße
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.05.2011, 16:40     Titel:
  Antworten mit Zitat      
Hallo,

du sprichst von einer Function... ist das eine Embedded MATLAB Function?
Im Embedded MATLAB Function Fenster kannst du unter Tools --> Edit Data / Ports einstellen, wenn ein Eingabeargument als Parameter behandelt werden soll. Dann wird der Variablenwert aus dem Base Workspace übernommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cpueschn
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2011, 17:25     Titel:
  Antworten mit Zitat      
Habe es jetzt herausgefunden:

1. man nimmt die Variante von Harald (vielen Dank!)

2. man legt die Variablen wie folgt an:

persistent variable ;
if isempty(variable )
variable = 0;
end

Gruß und ein schönes Wochenende
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.