2

したがって、MATLABにはforループがあり、ベクトルxは、cos(x)。^ 2などの1つの関数、またはsin(x)。^ 2+9などの別の関数を通過します。*バツ。ユーザーは、forループの前にこれらの関数のどれを使用するかを選択します。

私の質問は、ユーザーが反復ごとに何を選択したかをループでチェックしたくないということです。すべての反復で自動的に使用される関数(ユーザー定義など)へのポインターを使用する方法はありますか?

ちなみに、これは関数ではなく、スクリプト内にあります。

ありがとう

4

2 に答える 2

4

function_handlesを使用できます。あなたの例では(ループを使用して利用可能なすべての関数で実行するため):

x = 1:10; % list of input values
functionList = {@(x) cos(x).^2, @(x) sin(x).^2 + 9*x}; % function handle cell-array
for i=1:length(functionList)
    functionOut{i} = functionList{i}(x); % output of each function to x
end
于 2012-08-29T16:43:18.780 に答える
2

次のようなことを試すことができます。

userChoice = 2;

switch userChoice
    case 1
        myFun = @(x) sin(x).^2 + 9.*x;
    case 2
        myFun = @(x) cos(x).^2;
end

for k = 1:10
    x(k,:) = myFun(rand(1,10));
end
于 2012-08-29T16:50:21.033 に答える