2013-05-22 28 views
19

Ein Funktions-Handle kann verwendet werden, um eine Funktion, z.Warum wird die Matlab-Funktion "feval" benötigt?

f = @sin; 
val = f(1.0); 

Warum wird "Feval" jemals benötigt?

val = feval(f, 1.0); 

Wann ist es nützlich?

+2

Ich finde, dass es den Code leichter lesbar macht, da Klammern sowohl für die Indizierung als auch für den Funktionsaufruf verwendet werden. Mit 'feval' wird klar, was wir tun. – Amro

Antwort

15

Für feval kann das erste Argument eine Zeichenfolge in Anführungszeichen sein, die Ihnen mehr Flexibilität als eine Funktionskennung bietet. Sie können beispielsweise Funktionen mit einem Basisnamen gefolgt von einem Index wie in fn1, fn2, fn3 ausführen und diese dann dynamisch mit feval(['fn', num2str(k)], x, y, z); aufrufen.

+0

Danke, ich frage mich, ob eine andere Sprache wie Python dynamisch generierte Funktionsnamen unterstützt? –

+0

Ja, andere Sprachen haben noch raffiniertere Mechanismen. Du könntest dich über Introspektion informieren. Suchen Sie auch nach "Nachrichten" in Objective-C. –

+1

Ich würde hinzufügen, dass TMW in der Vergangenheit eine Verschiebung von "eval" -Methoden zu "kontrollierten" Alternativen wie @function-Handles gefördert hat. Mit anderen Worten, das obige Konstrukt wird leicht mit @ function-Handles implementiert, kann aber immer noch in altem Code oder aus Gewohnheit verwendet werden. – Oleg

13

Bis Release 14 (MATLAB 7), feval war der Weg eine Funktion Griff zu bewerten ... oder Funktionen zu bewerten, wenn sie durch ihren Namen angegeben sind.

Quelle: Mental model for feval().

+0

Dank Oleg, es macht sehr viel Sinn. Auch ein anderer Blog-Artikel erwähnt in den Kommentaren: [Mehr auf Eval] (http://blogs.mathworks.com/loren/2006/01/04/more-in-eval/) –

+0

Als eine Randnotiz, in 5 Jahren mit MATLAB Ich hätte Feval vielleicht nur einmal benutzt. – Oleg

+0

hast du die 10. Stimme bekommen :-) nette Antwort! – Shai

0

Nicht immer wissen Sie immer, welche Funktion verwendet werden soll; Es gibt viele Beispiele

Hier ist ein dummer Beispiel: Lassen Sie, in einer Textdatei nach jeder Zahl, verschiedene Wörter, die als eine mathematische Funktion ausgewertet werden können, wie, Mittelwert, Min, Max, Quadrat dargestellt werden, und die Aufgabe das Ergebnis nach jeder dergleichen berechnet wird,

2,square,2,power,4,log,10 ... 

und Sie wollen ein Programm schreiben, durch diesen Text zu gehen und das Endergebnis ...

ein anderes Beispiel ist beispielsweise zu berechnen, ich möchte definieren Plot-Funktion mit Benutzereingabefunktion Handle f, so muss es in einer Weise flexibel sein ...

[email protected](f,x) plot(f(x)) 
+0

In beiden Fällen können Sie weiterhin Funktions-Handles verwenden. – Oleg