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 mit unbekannter Anzahl von Argumenten starten

 

mawi
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 14.04.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 27.05.2011, 09:06     Titel: Funktion mit unbekannter Anzahl von Argumenten starten
  Antworten mit Zitat      
Hallo Zusammen,

hoffe die Frage gibts nicht schon im Forum, hab jedenfalls nichts gefunden.

Ich will über einen String, der den Namen einer function enthält diese function ausführen. Jedoch soll die Anzahl an Ein-, und Ausgabeargumenten Variabel sein.

Über nargin und nargout kann ich ja auslesen wie viele Argumente die Funktion benötigt.
Wie kann ich aber mit dieser Information die Funktion variabel für alle möglichen Fälle starten?

Die Eingangswerte habe ich, es geht eigentlich nur um den Syntax wie man das abhängig von "nargin" und "nargout" schreibt.

Hier mal ein beispiel für mein Problem:
Code:

funcstr = 'func.m';

inarg = nargin(funcstr(1,1:end-2));
outarg = nargout(funcstr(1,1:end-2));

[out1,out2,...] = feval(funcstr(1,1:end-2),in1,in2,...);
 


Geht das überhaupt mit feval oder vielleicht mit einer anderen möglichkeit, vielleicht function handle oder so...
Oder ist meine einzige Chance die Ein-, und Ausgangsgrößen in jeweils ein cell-Array zusammenzufassen und nur diese cell-arrays ein und auszugeben?
(Fände ich für meine Anforderungen nicht besonders praktikabel)

Ich hoffe ich habe mein Problem ausreichend beschrieben, sonst bitte nochmal nachfragen.

Vielen dank im voraus.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

das kann je nach Situation recht komplex werden. Die Frage, wie die Funktion aufgerufen werden kann, hängt alleine an der Deklaration der Funktion und wie sie arbeitet. Umgekehrt kann man natürlich die Deklaration so wählen, dass bestimmte Aufrufe möglich sind.

Ich würde in jedem Fall mit Function Handles arbeiten.

Werden die Argumente bei den variablen Aufrufen immer in einer bestimmten Reihenfolge übergeben? Dann siehe das Beispiel in
Code:

Wenn Argumente ausgelassen werden sollen, kann man stattdessen [] übergeben und das im Code der Funktion geeignet abfragen.

Die eleganteste Möglichkeit wäre meines Erachtens das Arbeiten mit varargin und Parameter-Wert-Paaren, das ist aber auch am aufwändigsten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mawi
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 14.04.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 27.05.2011, 11:10     Titel:
  Antworten mit Zitat      
Vielen Dank schonmal für deine schnelle Antwort.

Um sich das ganze besser vorzustellen:
ich schreibe gerade eine aufwändigere Gui mit der Messwerte aufgenommen werden können und eine beliebige selbsterstellte function gewählt werden soll um Berechnungen vorzunehmen.

Alle Werte sind nach der Messung im Workspace vorhanden und der Benutzer muss in der richtigen Reihenfolge die Namen der Werte, die als Eingabeparameter dienen sollen, eingeben.

Hier mal ein Beispiel um es sich besser vorzustellen.
Code ist nicht getestet oder debugged, nur zur besseren vorstellen


Code:

funcstr = uigetfile({'*.m'},'Funktion auswählen');

inarg = nargin(funcstr(1,1:end-2));     % Anzahl Eingabeargumente
outarg = nargout(funcstr(1,1:end-2));   % Anzahl Ausgabeargumente

varnames_in = [name_in1;name_in2;name_in3]; % Je nachdem wie groß inarg, wird vom
                                   % Benutzer in der Gui eingegeben
varnames_out = [name_out1;name_out2]; % Je nachdem wie groß outarg, wird vom
                                    % Benutzer in der Gui eingegeben

for i=1:inarg
    eval(['in',num2str(i),'=',strrep(varnames_in(i,:),' ','')]);
end

% Hier soll nun die gewählte Funktion ausgeführt werden
[out1,out2,...] = feval(funcstr(1,1:end-2),in1,in2,...);
% So geht es natürlich nicht^^

for i=1:outarg
    eval([strrep(varnames_in(i,:),' ',''),'=out',num2str(i)]);
end
 


Hoffe es ist jetzt klarer, ist schwierig zu beschreiben^^[/b]
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.