2017-01-22 14 views
1

MATLABで定義された一連の関数を使用し、それらの関数の名前を文字列変数として使用するとします。たとえば、fun1,fun2、...、funNを作成し、文字列ベクトルを['fun1','fun2',...,'funN']としましょう。各関数の名前を1つずつ書き込むことなく、自動的に各関数を呼び出す方法は?関数の名前を文字列として使用する方法

+1

関数を呼び出すには 'feval'を使用できますが、なぜ文字列に関数名があるのですか?あなたが達成しようとしていることを私たちに伝える価値があるかもしれませんので、より良い選択肢を思いつくのに役立ちます。通常は、関数ハンドルや何かの配列を格納するだけです。 – Suever

+0

私は関数を50個近く持っています。コードを実行し、それぞれの関数で微分方程式とode45関数の計算を行う必要があります。私は機能を変更するたびに自分のコードを変更したくありません。私はより一般的な方法でルートコードを書くように文字列を生成し、毎回最初に 'N = ... 'を設定します。 –

+2

しかし、なぜあなたは 'fun1'、' fun2'などの名前を持つ50の関数を持っていますか?おそらく、50の機能を追跡するのではなく、動作の仕方を変更するための追加入力がある機能を1つ用意する必要があります。 – Suever

答えて

6

str2funcを使用してください。もちろん、関数が関数ハンドル(例えば、fun1 = @(x)x+x.^2+sqrt(x)))として定義されている場合は、以下のstr2funcのステップをスキップできます。

strList= {'sum','mean','max','min'}; 
funList = cellfun(@str2func,strList,'uniformOutput',false); 

nFunctions = length(funList); 
data = rand(10,1); 
results = zeros(nFunctions,1) 

for iFunction = 1:nFunctions 
    results(iFunction) = fulList{iFunction}(data); 
end 
+0

私には機能ハンドルがあると思われます。 – beaker

関連する問題