|
|
M-Dateien ohne Funktionen |
|
senmeis |

Forum-Guru
|
 |
Beiträge: 301
|
 |
|
 |
Anmeldedatum: 09.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.09.2012, 11:32
Titel: M-Dateien ohne Funktionen
|
 |
Hi,
M-Dateien unterscheiden sich zwischen mit Funktionen drin oder ohne Funktionen drin. Nun will man eine M-Datei ohne Funktionen drinnen schreiben, die aber einen Parameter annimmt. Ist das möglich?
Gruss
Senmeis
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 02.09.2012, 11:34
Titel:
|
 |
Hallo,
also die Übergabe kann man dann duch INPUT-Befehl realisieren
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.09.2012, 12:30
Titel: Re: M-Dateien ohne Funktionen
|
 |
Hallo senmeis,
Ein M-File, welches nicht mit "function" beginnt, heißt "Script". Möchtest Du ein Script schreiben, welches Argumente annimmt? Das wäre nicht möglich, denn genau dafür wurden ja die Funktionen eingeführt.
Gruß, Jan
|
|
|
senmeis |
Themenstarter

Forum-Guru
|
 |
Beiträge: 301
|
 |
|
 |
Anmeldedatum: 09.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.09.2012, 13:40
Titel:
|
 |
Senmeis
Klar kann man eine Funktion schreiben. Das Problem ist nur, man möchte diesen Parameter als Variable im Workspace erhalten bleiben sogar nach dem Ausführen der Funktion und das klappt nicht. Man hat auch versucht, das Attribut "global" einzusetzen, geht ebenfalls nicht.
Gruss
Senmeis
|
|
|
Caravaggio |

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 20.04.12
|
 |
|
 |
Wohnort: Braunschweig
|
 |
|
 |
Version: R2012a
|
 |
|
|
 |
|
Verfasst am: 02.09.2012, 14:19
Titel:
|
 |
Im Grundprinzip möchtest du
machen oder nicht??? Du hast eine Variable, sie wird an die Funktion übergeben und am Ende wieder als Variable gespeichert.
Alternativ kannst du ja deine Variable speichern und dann einfach durch
dein Skript durchlaufen lassen. Dort müssen allerdings die Variablennamen übereinstimmen, was bei einer Funktion ja nicht der Fall sein muss!
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 03.09.2012, 10:46
Titel:
|
 |
Hallo senmeis,
Zitat: |
... das klappt nicht. Man hat auch versucht, das Attribut "global" einzusetzen, geht ebenfalls nicht. |
"Klappt nicht" und "geht nicht" sind nich geeignet, um in einem Forum den auftretenden Fehler zu erklären. Bitte poste zunächst den entsprechenden Code - am besten nur einen relevanten aber lauffähigen Ausschnitt. Dann poste die vollständige Fehlermeldung, falls eine auftritt, oder eine genau Beschreibung des Unterschiedes zwischen den Ergebnissen und den Erwartungen.
Je präziser die Frage, desto leichter ist die Antwort. Sobald man raten muss, was überhaupt das Problem ist, sind sinnvolle und effiziente Antworten unmöglich.
Gruß, Jan
|
|
|
senmeis |
Themenstarter

Forum-Guru
|
 |
Beiträge: 301
|
 |
|
 |
Anmeldedatum: 09.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.09.2012, 16:37
Titel:
|
 |
Hier poste ich den Code.
Eigentlich will ich eine Variable x im Workspace haben, damit diese weiter verarbeitet werden kann, aber mit obigen Code ist das nicht der Fall. Ideen?
Gruss
Senmeis
|
|
|
Caravaggio |

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 20.04.12
|
 |
|
 |
Wohnort: Braunschweig
|
 |
|
 |
Version: R2012a
|
 |
|
|
 |
|
Verfasst am: 05.09.2012, 16:45
Titel:
|
 |
Aufruf mit
*edit* Ich hoffe in deiner Testfunktion wird my_func sinnvoll gefüllt
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.09.2012, 10:27
Titel:
|
 |
Hallo senmeis,
Globale Variablen müssen überall, wo sie benutzt werden, als GLOBAL definiert werden, also auch um Base-Workspace (also im Command Window).
Da globale Variablen ein Programm bis zur Undebugbarkeit unübersichtlich machen, wird von der Benutzung abgeraten. Man kann ab einer bestimmten Programm-Komplexität einfach nicht mehr zuverlässig feststellen, wo die Werte zu letzt geändert wurden.
Deshalb ist "function x = FuncName(x)" deutlich besser, und der zusätzliche Aufwand, im CommandWindow "x = FuncName(x)" schreiben zu müssen, statt "FuncName(x)", ist weit harmloser, als stunden- oder tagelange Versuche einen Code zu debuggen, der von GLOBALs durchsetzt ist.
Gruß, Jan
|
|
|
senmeis |
Themenstarter

Forum-Guru
|
 |
Beiträge: 301
|
 |
|
 |
Anmeldedatum: 09.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.09.2012, 17:12
Titel:
|
 |
Leider funktioniert Dein Code bei mir nicht.
Fehlermeldung:
Zitat: |
Output argument "my_func" (and maybe others) not assigned during call to test. |
Senmeis
|
|
|
Caravaggio |

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 20.04.12
|
 |
|
 |
Wohnort: Braunschweig
|
 |
|
 |
Version: R2012a
|
 |
|
|
 |
|
Verfasst am: 07.09.2012, 17:57
Titel:
|
 |
senmeis hat Folgendes geschrieben: |
Leider funktioniert Dein Code bei mir nicht |
Naja, ich ging davon aus, dass es sich um Pseudocode handelt...es ging nur um eine beispielhafte Darstellung...sonst macht deine test-Funktion kaum Sinn bei deinem Beispiel müsstest du ja nur die Zeile
löschen und am Ende
setzen...aber eigentlich sollte da MATLAB schon meckern, weil du ja den Rückgabewert nicht setzt. Hier mal ein lauffähiges Beispiel, dass den Wert verdoppelt und auch den Eingabewert zurückgibt (kann ja auch jede beliebiger Wert aus deiner Funktion sein).
Funktion (TwoTimes.m):
Funktionsaufruf:
|
|
|
flashpixx |

Forum-Guru
|
 |
Beiträge: 355
|
 |
|
 |
Anmeldedatum: 19.04.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.09.2012, 20:20
Titel:
|
 |
|
|
senmeis |
Themenstarter

Forum-Guru
|
 |
Beiträge: 301
|
 |
|
 |
Anmeldedatum: 09.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.09.2012, 14:59
Titel:
|
 |
Das m-File sieht nun so aus:
Mit dem Aufrufen
bekommt man eine Variable
im Workspace, nicht
wie erwartet. Wie kann man den Variablenamen eindeutig bestimmen?
Gruss
Senmeis
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.09.2012, 21:41
Titel:
|
 |
Hallo senmeis,
Dies ruft man dann so auf, um x einen Wert zuzuweisen:
Das direkte Erzeugen einer Variablen in einem anderen WorkSpace, hier im WorkSpace der aufrufenden Funktion, ist ein schlechter Programmierstil. Sowie man dies mit 100 Variablen in 10 unterschiedlichen Funktionen macht, kann man beim besten Willen keinen Überblick mehr erlangen.
Deswegen sollte man solche magischen undurchsichtigen Fernwirkungen am besten von Anfang an vermeiden, obwohl es bei Programmen mit 2 oder 10 Zeilen noch praktisch erscheint.
Gruß, Jan
Zuletzt bearbeitet von Jan S am 19.09.2012, 09:50, insgesamt 2-mal bearbeitet
|
|
|
EliteTUM |

Forum-Fortgeschrittener
|
 |
Beiträge: 70
|
 |
|
 |
Anmeldedatum: 21.04.11
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.09.2012, 00:39
Titel:
|
 |
Hallo senmeis,
du hast deine Funktion auch nicht korrekt aufgerufen. Wenn eine Funktion mehrere Werte zurückgibt, dann musst du diese auch "abgreifen". Ansonsten gehen diese verloren.
Beispiel ähnlich deiner Funktion:
Rufe ich das ganze so auf:
erhalte ich als Ausgabe
Wie du schon gesagt hast: Was zu erwarten war! Aber wir wissen ja, dass die Funktion "test(...)" zwei Rückgabewerte liefern kann. Also versuchs mal mit dem Aufruf:
und voilà erhälst du folgende Ausgabe:
_________________
- EliteTUM
_____________________________________
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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.
|
|