Anonyme Funktionen, die Funktionen mit mehreren Ausgabeformularen aufrufen

8

Ich versuche eine anonyme Funktion zu definieren, die eine Version einer Funktion aufruft, die mehrere Ausgaben zurückgibt.

Zum Beispiel hat die Funktion find zwei mögliche Ausgabeformen:

%Vor%

und

%Vor%

Sagen wir, ich möchte das erste Formular innerhalb einer anonymen Funktion auswählen.

Ich habe es versucht 1)

%Vor%

und 2)

%Vor%

Aber wenn ich rufe:

%Vor%

Die erste Version von get_columns denkt ich rufe find als [ind] = find(X) und nicht als [row,col] = find(X); an, während die zweite mit "Not enough input arguments" klagt.

Gibt es eine Möglichkeit, eine spezifische Ausgabeform einer Funktion innerhalb einer anonymen Funktion auszulösen?

    
Amelio Vazquez-Reina 27.10.2011, 19:16
quelle

2 Antworten

8

Direkt, nein. Leider gibt es eine Reihe von Funktionen, auf die über anonyme Funktionen nicht zugegriffen werden kann, und der Zugriff auf mehrere Ausgabeargumente ist einer davon. (Die andere, die ich häufig finde, ist, dass Sie keine if -Anweisung innerhalb einer anonymen Funktion definieren können. Dies scheint mehr als alles andere eine Einschränkung der Matlab-Syntax zu sein.

Aber eine ziemlich einfache Hilfsfunktion kann dies ermöglichen.

%Vor%

Diese Funktion verwendet eine Funktionskennung sowie ein Array von Ausgabeindizes und gibt die indizierten Ausgaben zurück.

Wenn Sie diese Datei (hoffentlich besser kommentiert) erstellen und auf Ihren Pfad setzen, können Sie auf die zweite Ausgabe der Funktion find zugreifen, indem Sie die folgende Funktion definieren

%Vor%

Und jetzt können Sie die Indizes eines Arrays finden, die gleich 1 sind wie

%Vor%

Und jetzt sollten Sie in der Lage sein, auf alternative Ausgabeargumente nach Wunsch innerhalb von anonymen Funktionen zuzugreifen.

    
Pursuit 08.11.2011, 23:57
quelle
3

Diese Funktion get_outputs könnte für kurze anonyme Funktionen sehr nützlich sein. Sehr nett.

Auch in Bezug auf den Kommentar, dass ein "if" in MATLAB nicht verwendet werden kann, ist dies nur teilweise richtig. Identisches Verhalten kann einfach anonym implementiert werden. Zum Beispiel, hier ist ein anonymes wenn:

%Vor%

Verwenden:

%Vor%

Die Aktion, die der ersten wahren Bedingung entspricht, wird ausgeführt. Zum Beispiel gibt dies "Hallo" aus.

%Vor%

Zugegeben, es ist auf den ersten Blick etwas kompliziert, aber ich halte so etwas auf meinem Weg, damit ich ein "wenn" in einer anonymen Funktion verwenden kann. Auf diese Weise können viel komplexere anonyme Funktionen erstellt werden.

    
Tucker 06.12.2012 02:45
quelle

Tags und Links