|
|
Übergabe der Variable von M-File an Function |
|
Kia |

Forum-Fortgeschrittener
|
 |
Beiträge: 89
|
 |
|
 |
Anmeldedatum: 02.09.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2011, 14:55
Titel: Übergabe der Variable von M-File an Function
|
 |
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?
|
|
|
|
|
cpueschn |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 13.05.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.05.2011, 15:07
Titel:
|
 |
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!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.05.2011, 16:00
Titel:
|
 |
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:
Die Funktion f:
Was das Simulink-Problem angeht, verstehe ich das Problem nicht genug, um die Frage zu beantworten.
Grüße,
Harald
|
|
|
cpueschn |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 13.05.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.05.2011, 16:27
Titel:
|
 |
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
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.05.2011, 16:40
Titel:
|
 |
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
|
|
|
cpueschn |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 13.05.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.05.2011, 17:25
Titel:
|
 |
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
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|