web-dev-qa-db-fra.com

Passer des fonctions comme arguments dans Matlab

J'essaie d'écrire une fonction qui obtient deux tableaux et le nom d'une autre fonction comme arguments.

par exemple.

main.m:

    x=[0 0.2 0.4 0.6 0.8 1.0];
    y=[0 0.2 0.4 0.6 0.8 1.0];

    func2(x,y,'func2eq')

func 2.m :
    function t =func2(x, y, z, 'func')   //"unexpected matlab expression" error message here    
    t= func(x,y,z);

func2eq.m:  
    function z= func2eq(x,y)

    z= x + sin(pi * x)* exp(y);

Matlab raconte me donne le message d'erreur ci-dessus. Je n'ai jamais passé de nom de fonction comme argument auparavant. Où est-ce que je vais mal?

26
Meir

Vous pouvez également utiliser des descripteurs de fonction plutôt que des chaînes, comme ceci:

main.m:

...
func2(x, y, @func2eq); % The "@" operator creates a "function handle"

Cela simplifie func2.m:

function t = func2(x, y, fcnHandle)
    t = fcnHandle(x, y);
end

Pour plus d'informations, consultez la documentation sur poignées de fonction

39
Edric

Vous pouvez essayer dans func2.m:

function t = func2(x, y, funcName)  % no quotes around funcName
    func = str2func(funcName)
    t = func(x, y)
end
9
Matt Bridges