Matlab: Definieren einer Funktion, die den zweiten zurückgegebenen Wert einer Funktion abfängt

8

Angenommen, ich habe eine Funktion foo definiert als

%Vor%

Wenn ich ein Funktionshandle in Erwägung ziehe

%Vor%

wird z.B. In einem cellfun -Aufruf bekomme ich eine f , die sich äquivalent zu einer foo definiert wie

verhält %Vor%

, d. h. der zurückgegebene Wert b geht verloren.

Wenn also ein solches f in einen cellfun Aufruf gesetzt wird, hat die Ausgabezelle nur die a s und wird die b s verpassen (was mir derzeit wichtig ist). Visuell

%Vor%

Frage: Wie definiert man ein Funktions-Handle auf foo welches fängt nur das b s? d. h. ein Verhalten geben, das der Definition von foo like

entspricht %Vor%

d. h. ^ 2, Verschwendung der a s.

Darüber hinaus ist es möglich, sowohl a als auch b in einem eindeutigen cellfun -Aufruf (effizient) abzufangen?

    
Acorbe 21.11.2012, 09:27
quelle

2 Antworten

4

Aus der Dokumentation von cellfun :

  

[A1, ..., Am] = cellfun (func, C1, ..., Cn) ruft die Funktion function func auf und übergibt Elemente aus den Zellenfeldern C1, ..., Cn, wobei n ist die Anzahl der Eingänge zur Funktion func. Ausgabearrays A1, ..., Am, wobei m die Anzahl der Ausgaben der Funktion func ist, enthalten die kombinierten Ausgaben der Funktionsaufrufe.

Also, cellfun kann eine Multi-Output-Funktion verwenden und in diesem Fall gibt es einfach eine Anzahl von Ausgaben zurück. Wenn Sie nur den zweiten verwenden möchten, können Sie ~ verwenden, um den ersten zu ignorieren. Das gleiche gilt für mehrere Ausgaben anonymer Funktionen - sie werden zurückgegeben, wenn Sie mehrere Ausgabeargumente angeben . Hier ist ein einfacher Code:

%Vor%     
angainor 21.11.2012, 10:45
quelle
0

Dies kann durch Verwendung eines Zellenfeldes als einzige Ausgabe der Funktion anstelle einer Funktion mit mehreren Ausgängen erfolgen.

Definieren Sie Ihre Funktion, um ein Zellenfeld zurückzugeben (oder erstellen Sie eine Hilfsfunktion, die die ursprüngliche Mehrfachausgabefunktion aufruft):

%Vor%

Und dann können Sie ein Handle erstellen, das Ihre Funktion aufruft und nur eine der Zellen aus dem Zellenfeld abruft.

%Vor%

Was fast genau das ist, wonach Sie gefragt haben. Sie könnten sogar ein Handle erstellen, das die n-te Ausgabe zurückgibt

%Vor%     
quelle

Tags und Links