web-dev-qa-db-ja.com

Matlabで関数を引数として渡す

2つの配列と別の関数の名前を引数として取得する関数を記述しようとしています。

例えば.

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は、上記のエラーメッセージを教えてくれます。関数名を引数として渡したことがありません。どこがいけないの?

26
Meir

次のように、文字列ではなく関数ハンドルを使用することもできます。

main.m

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

これによりfunc2.m

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

詳細については、ドキュメント 関数ハンドル を参照してください

39
Edric

func2.mで試すことができます:

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