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

Parameterübergabe an Funktion oder Skript

 

Janvi
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 20.05.08
Wohnort: Rom
Version: R2007a
     Beitrag Verfasst am: 25.10.2010, 16:04     Titel: Parameterübergabe an Funktion oder Skript
  Antworten mit Zitat      
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 ?
Private Nachricht senden Benutzer-Profile anzeigen


Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 25.10.2010, 16:34     Titel:
  Antworten mit Zitat      
Mit Übergabeparameter:

Code:

function ergebnis= tuwas(eingabe1, eingabe2, usw)

tuewas
end  

Aufruf: tuwas(3,5)

ans: xy

 


so wie du es beschrieben hast, hast du nur eine Funktion ohne Über/Eingabeparameter geschrieben? Stimmts?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Janvi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 20.05.08
Wohnort: Rom
Version: R2007a
     Beitrag Verfasst am: 25.10.2010, 16:54     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.10.2010, 17:32     Titel:
  Antworten mit Zitat      
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.:
Code:


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Janvi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 20.05.08
Wohnort: Rom
Version: R2007a
     Beitrag Verfasst am: 25.10.2010, 19:13     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.10.2010, 21:31     Titel:
  Antworten mit Zitat      
Hallo Janvi,

Code:

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
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.