2017-06-22 3 views
0

Kann mir jemand helfen, diesen Code von Scilab zu verstehen? Angenommen Flag = 'c', thres = 2 und A eine Matrix sein.Verwendung von% vor einem Funktionsnamen in scilab?

deff("[flag]=%smallei(x)","flag=real(x) >= thres") 
[X,dsmall] = schur(A,%smallei); 

Obwohl ich, dass ‚deff‘ verwendet wird, um eine Funktion mit dem Namen% smallei zu machen, und es ist, die Werte zu vergleichen. In der Schur-Funktion wird% smallei jedoch ohne Eingabeparameter verwendet. Bitte hilf mir, was dieser Codeausschnitt macht und wo ich falsch liege.

Für eine vollständige Scilab Code - http://cgit.scilab.org/scilab/plain/scilab/modules/linear_algebra/macros/psmall.sci?h=5.1&id=b97dd3f34da8b52ac799da43848d8d0910d83aef

Antwort

1

Die schur Funktion ruft intern die Funktion smallei %, wie Sie einen Zeiger auf die Funktion in schur sind vorbei (siehe help). Die schur Funktion ruft diesen Funktionszeiger auf, indem sie ihm ein Argument ('x' in Ihrem Beispiel) übergibt und erwartet, einen Wert zurückzugeben ('Flag' in Ihrem Beispiel). Daher können Sie schur arbeiten mit jeder Funktion, die dem % smallei Prototyp folgt.

Dies ist ein typischer Ansatz in Optimierungsalgorithmen, in dem Sie einen allgemeinen Algorithmus haben, der mit verschiedenen Optimierungskriterien verwendet werden kann. Also teilen Sie Ihren Algorithmus zwischen dem allgemeinen Code und einer bestimmten Funktion, die für die Kriterien verwendet wird, und diese Funktion wird im Algorithmus als Funktionszeiger bezeichnet. Der Benutzer könnte entscheiden, welche benutzerdefinierten Kriterien verwendet werden, indem die Optimierungsfunktion als Funktionszeiger injiziert wird.