2010-09-09 7 views
2

J'ai une fonction assez compliquée que je voudrais écrire en tant que fonction anonyme.fonctions anonymes en plusieurs étapes

Il ressemble à ceci:

function Answer = MatlabFunction(x) 
a=4*x; 
b=sin(a); 
c=cos(b); 
Answer = c; 

Je ne sais pas comment mettre cela en une fonction anonyme cependant. Existe-t-il un moyen de le faire sans l'écrire comme plusieurs fonctions en cascade?

Répondre

3

Il y a deux façons:

Soit, vous enregistrez votre fonction MatlabFunction sur le chemin Matlab et définissez votre fonction anonyme comme

myFun = @MatlabFunction; 

Ou, vous définissez la fonction directement

myFun = @(x)cos(sin(4*x)); 
+0

est-il une autre façon? Je veux définir la fonction veulent changer des parties de la fonction à chaque cycle dans une boucle for, donc je ne peux pas utiliser un fichier externe. Ma fonction actuelle est beaucoup plus compliquée donc je ne peux pas la combiner en une seule ligne. – Brian

+1

@Brian: J'ai répondu à votre autre question ici: http://stackoverflow.com/questions/3673112/change-matlab-function-in-loop/3673185#3673185 – Jonas

+0

Vous pouvez passer plusieurs poignées de fonctions arbitraires à votre «travailleur» fonction. – zellus

0

Matlab est connu pour ne pas prendre en charge les fonctions anonymes à plusieurs étapes. Il existe cependant quelques trucs laids pour contourner cette limitation. http://www.mathworks.com/matlabcentral/answers/50195-is-it-possible-to-write-several-statements-into-an-anonymous-function présente quelques unes, par exemple:

Un si/peut coder le reste sous forme de fonction en utilisant:

FHEXEC = @(FH) FH(); 
FHSELECT = @(TF,CONDITION) TF(CONDITION==[true,false]); 
IF = @(CONDITION,TRUEFUNC,FALSEFUNC) FHEXEC(FHSELECT([TRUEFUNC,FALSEFUNC],CONDITION)) 
Questions connexes