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

Funktion aus anderem m-File aufrufen

 

Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2010, 16:03     Titel: Funktion aus anderem m-File aufrufen
  Antworten mit Zitat      
Hallo,

mittlerweile ist mein m-File so angewachsen, dass man vor lauter Funktionen den überblick verliert. Deshalb wollte ich ggf. den ganzen Spaß in mehrere m-Files aufteilen die thematisch zusammengehören. Wie man m-Files aus m-Files heraus aufruft weiß ich, aber wie läuft das hier mit dem Funktionsaufruf?

Wenn ich z.B. in meinem Hauptfile das Unter-File UP1.m aufrufe, kann ich im folgendenen dann einfach auf Funktionen die in UP1.m stehen zugreifen?

Gibt es geschicktere Möglichkeiten?

Gruß,
Zenon
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 01.06.2010, 16:14     Titel:
  Antworten mit Zitat      
Moin,

solange es keine "nested functions" also verkettete Funktionen sind, kannst du jede Funktion in ein einzelnes m-file packen und dann so wie immer aufrufen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2010, 10:02     Titel:
  Antworten mit Zitat      
Das diese Möglichkeit besteht weiß ich, aber 50 Einzel-M-Files dienen meines Erachtens nicht unbedingt der Übersicht... Ich möchte z.B. die fünf Funktionen, die sich irgendwie mit dem Auswerten von XML-Files beschäftigen in die Datei XMLfcn.m ablegen und dennoch in meiner main.m darauf zugreifen können...
Private Nachricht senden Benutzer-Profile anzeigen
 
quant82
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 30.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2010, 10:13     Titel:
  Antworten mit Zitat      
naja sowas könnte man auch objektorientiert lösen, ansonsten ist es glaub ich doch ok was übersicht angeht wenn du es in getrennte mfiles legst
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 02.06.2010, 10:37     Titel:
  Antworten mit Zitat      
Hallo

Es wird zwar übersichtlicher in Ordner, aber die M-File Aufbau wird komplexer und vielleicht unleserlich.

Also du muss Kopffunktion in M-File definieren, die Eingaben an gewünschte Funktion weiterleitet.
Das kann man über FEVAL oder SWITCH bewerkstelligen.

Definition in M-File abspeichern
Code:

function varargout = start_myfun(varargin)
try
   if (nargout)
      [varargout{1:nargout}] = feval(varargin{:});
   else
      feval(varargin{:});
   end
catch  
   disp(lasterr)
end
%

function c = mal(a,b)
c=a*b;


function c = add(a,b)
c=a+b;

 


Aufruf:
Code:

 c =start_myfun('mal',3,2)
% c = 6
 c =start_myfun('add',3,2)
% c = 5
 


Zuletzt bearbeitet von denny am 02.06.2010, 10:58, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2010, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

eine weitere Variante wäre

Code:
function [hmal, hplus] = load_handles()

hmal = @mal;
hplus = @und;

function c = und(a,b)
c = a+b;

function c = mal(a,b)
c = a*b;


Dann muss, wenn die Funktionen verwendet werden sollen, am Anfang der Aufruf gemacht werden.
Code:
[hmal, hplus] = load_handles();

Danach können die Funktionen über die entsprechenden Handles verwendet werden.
Code:
hmal(2,3)
hplus(2,3)


@ denny: nettes Beispiel, aber du schießt dir da ins Knie. Deine Funktion plus berechnet a+b, also plus(a,b) - du bekommst also einen rekursiven Aufruf, wenn du das testest Wink Deswegen habe ich meine Funktion mangels größerer Kreativität "und" genannt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 02.06.2010, 10:54     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

@ denny: nettes Beispiel, aber du schießt dir da ins Knie. Deine Funktion plus berechnet a+b, also plus(a,b) - du bekommst also einen rekursiven Aufruf, wenn du das testest Wink Deswegen habe ich meine Funktion mangels größerer Kreativität "und" genannt.

Grüße,
Harald


Danke Harald, hast ja recht. Kracht ja wirklich wg. Rekursionslimit. Habe leider nicht getestet.

Edit: Okay habe jetzt verstanden, MINUS, PLUS, TIMES ... sind reservierte Funktionen, deswegen wohl dieser Nebeneffekt: Aufruf von sich selbst
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2010, 11:05     Titel:
  Antworten mit Zitat      
Hallo,

in Antwort auf den uneditierten Post:
Ich würde diese Funktionen (plus, minus, mtimes, times etc.) nur dann verwenden, wenn du Overloading im Rahmen von Objektorientierung beabsichtigst.

Ansonsten... stelle dir vor, du hast eine Funktion
Code:

in deinem Ordner, die irgendwas macht. Wenn du nun in einer anderen Datei x*y verwendest, wird dadurch diese Funktion aufgerufen. Ich denke, dass das in den seltensten Fällen beabsichtigt ist. Zumindest muss man sich aber sehr stark Gedanken machen, ob man das wirklich will.

Eine Liste der aus diesem Grund zu vermeidenden Funktionsnamen gibts hier:
Code:
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_oop/br02znk-1.html#br02znk-3


Auf manche würde man wohl nie kommen, aber beispielsweise POWER könnte man auch im Zusammenhang mit Elekrizität sehen. Und dann kann ich nur sagen: Achtung Hochspannung - Lebensgefahr für Programmierer!! Wink

Grüße,
Harald
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.