|
|
Parameterübergabe an Funktion oder Skript |
|
Janvi |

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 20.05.08
|
 |
|
 |
Wohnort: Rom
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 16:04
Titel: Parameterübergabe an Funktion oder Skript
|
 |
|
 |
|
Habe ein M-File geschrieben welches ziemlich genau alles das macht, was ich beabsichtigt habe. Ich bin mir nun etwas unsicher ob das ein Skript oder eine Function ist. Jedenfalls steht darinnen:
function funktionsname
... viel zu viele Anweisungen die man selbst wenn sie nur
ein einziges Mal durchlaufen werden zur Erhöhung
der Übersichtlichkeit auch in Unterprogramme zerlegen
könnte wenn man wissen würde wie das geht...
end
Den Aufruf mache ich aus der Matlab Commandzeile oder mit einem Batch File worinnen steht: matlab -r "mFileName" (ohne ".m") was auch immer getan hat.
Nun möchte ich mehr als eine Instanz dieses m-Files gleichzeitig ausführen lassen. Um den Code nicht seperat pflegen zu müssen, soll beim Aufruf ein Parameter übergeben werden, welcher angibt, mit welcher Schnittstelle der Code arbeitet. Also z. Bsp.
matlab -r "mFileName -com3"
Was muss ich da im Skript (oder Funktion ?) tun, damit das funktioniert ?
|
|
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 16:34
Titel:
|
 |
Mit Übergabeparameter:
so wie du es beschrieben hast, hast du nur eine Funktion ohne Über/Eingabeparameter geschrieben? Stimmts?
|
|
|
Janvi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 20.05.08
|
 |
|
 |
Wohnort: Rom
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 16:54
Titel:
|
 |
|
 |
|
Es sieht so aus, als ob dies keine wirkliche Funktion ist, weil ja bislang auch keine Parameter übergeben werden. Trotz deiner Erläuterungen habe ich die Sache mit Funktionen grundsätzlich noch nicht kapiert. Wenn ich es richtig sehe ist
1.) dein code zwischen function und end in ein m-file hineingeschrieben und dieses liegt im aktuellen matlab Verzeichnis und
2.) Aufruf und ans stellt die Eingabezeile von Matlab dar.
3.) "ergebnis=" kann auch weggelassen werden wenn kein Rückgabewert erforderlich ist (Das Skript zeigt nur was am Bildschirm an und schreibt ein File)
Die Variable "ergebnis" (Name kann frei gewählt werden ?) ist der Rückgabewert der Funktion "tuwas" und wird in der Kommandozeile als xy angezeigt und ansonsten im m-File selbst unbenutzt.
Was mir hauptsächlich nicht einleuchtet: Matlab interpretiert die m-files ohne Compilieren und es gibt keinen Linker Vorgang. Der Funktionsname "tuwas" ist in der ersten Zeile deines Codes nebst Übergabe und Rückgabeparameter definiert. Was tut matlab, wenn in einem m-file eine Funktion aufgerufen wird, welche nicht im File selbst steht ?
Muss der filename hier gleich dem Funktionsnamen sein damit die Funktion über das file directory gefunden wird ?
Kann in einem File dann nur eine Funktion drinnenstehen ?
Oder werden immer alle Files durchsucht ob die benötigte Funktion darinnen irgendwo definiert ist ?
Es gibt ja keinen Linker und Funktionen müssen nicht als extern deklariert werden, bzw. keine Prototypen Deklaration wie in einem compilierten C?
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 17:32
Titel:
|
 |
|
 |
|
Hallo Janvi,
Du bist aber neugierig.
Zitat: |
Es sieht so aus, als ob dies keine wirkliche Funktion ist, weil ja bislang auch keine Parameter übergeben werden. |
Wenn es mit "function " anfängt, ist es eine richtige Funktion. Der Unterschied zu einem Script ist, dass das Script nicht mit "function" beginnt und damit so ausgeführt wird, als sei der Code direkt dahin kopiert worden, von wo es aufgerufen wird. Damit werden auch alle Variablen, die im Script erstellt werden, auch im Aufrufer verfügbar. Einer Funktion löscht dagegen alle Variablen, die nicht als Ausgabe zurückgegeen werden, wenn wieder zum Aufrufer zurückgesprungen wird (ausnahme: PERSISTENT, eine Art "static").
Was mir hauptsächlich nicht einleuchtet: Matlab interpretiert die m-files ohne Compilieren und es gibt keinen Linker Vorgang. Der Funktionsname "tuwas" ist in der ersten Zeile deines Codes nebst Übergabe und Rückgabeparameter definiert. Was tut matlab, wenn in einem m-file eine Funktion aufgerufen wird, welche nicht im File selbst steht ?
Zitat: |
Muss der filename hier gleich dem Funktionsnamen sein damit die Funktion über das file directory gefunden wird ? |
Der Funktionsname kann frei gewählt werden, es wird die Funktion mit passendem File-Namen aufgerufen. Natürlich ist es übersichtlicher, wenn beide Namen übereinstimmen - darum gibt es auch eine MLint-Warnung, falls sie nicht übereinstimmen.
Zitat: |
Kann in einem File dann nur eine Funktion drinnenstehen ? |
Nein. Das Lesen der "Getting Started"-Abschnitte der Dokumentation würde einige Deiner Fragen klären. Mach das mal - das haben auch alle anderen gemacht, die diese Fragen beantworten können.
Zitat: |
Es gibt ja keinen Linker ... |
Matlab linked und compiliert dynamisch, also während der Laufzeit. Es wird für einen Funktionsaufruf also nicht eine feste Sprungadresse eingesetzt, sondern jeweils in einer Tabelle von bekannten Funktionsnamen gesucht. Das gleiche gilt für die Variablen.
Matlab's JIT-Compiler versucht aber genau das zu umgehen: Es beinhaltet eine Art statisches Linken und eine feste Zuordnung von Variablen-Namen zum Speicher.
Deswegen kann Code, der auf seine Variablen per EVAL, ASSIGNIN und EVALIN zugreift auch nicht per JIT-Compilation beschleunigt werden, was Matlab dann erschreckend entschleunigt.
Schau doch einfach mal in ein paar Funktionen. die Matlab ausliefert, z.B.:
Gruß, Jan
|
|
|
Janvi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 20.05.08
|
 |
|
 |
Wohnort: Rom
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 19:13
Titel:
|
 |
Im Scipts und Functions getting started habe ich schon öfters (lustlos) rumgeblättert aber über Filenamen nichts gefunden. Immerhin schlägt der Editor bei "save-as" als Filename auch den Funktionsnamen vor. Daran halte ich mich jetzt mal und es funktioniert so auch wenngleich ich nicht verstehen muß warum
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 21:31
Titel:
|
 |
Hallo Janvi,
oder
http://www.mathworks.com/help/techdoc/ref/function.html
Zitat: |
The name you give to a function, as defined in the first line, should be the same as the name of the file containing the function, but without the .m extension. |
Ich gebe zu, dass die Matlab-Dokumentation nicht so richtig witzig oder spannend ist ;-) Und "should be" läßt immer noch einen gewissen Spielraum. Wenn man sich aber mal durchgearbeitet hat, weiß man, dass das TMW-doc-team lange an dem Satz gefeilt hat und "should be" ganz präzise gemeint ist.
Ich habe noch nie eine effizientere und zielführenderer Dokumentation gesehen - ausser der von meinem Hammer natürlich.
Zwei Ausnahmen:
"help eval" sollte unbedingt direkt verweisen auf:
http://matlabwiki.mathworks.com/MAT......2C....2CA10_in_a_loop.3F
Und in "help save" sollte nicht nur einmal sondern 17 mal darauf hingewiesen werden, wie man "save(FileName, 'NameOfVariable')" verwendet.
Gruß, Jan
|
|
|
|
|
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.
|
|