1

私が構築したい機能は次のとおりです。

function y = myfunction(data, @f1, @f2, @f3, @f4)
%Fit data using f1,f2,f3,f4 such that data ~ af1+bf2+cf3+df4
end

data配列です。ユーザーはf1f2、 、 、、、、、などの 4 つの関数を選択f3して定義します。 f4sin(x)cos(x)ln(x)1/xtan(x)tanh(x)1/ln(x)

私の目的は、係数がどこにdataあるような関数に適合することです。問題は、関数を入力として渡し、内部で使用する方法がわからないことです。これどうやってするの?小さな例で十分でしょう。af1+bf2+cf3+df4a,b,c,dmyfunction

4

3 に答える 3

3

他の引数の場合と同様に、それらを標準の引数にする必要があります。

function y = myfunction(data, f1, f2, f3, f4)
    % ...
end

これらの引数は型の変数ですfunction_handle(実際に関数ハンドルを渡す限り)。関数ハンドルのセットでこの関数を呼び出すには、次のようにします。

f1 = @sin; f2 = @cos; f3 = @ln; f4 = @(x)1/x;
myfunction(data, f1, f2, f3, f4);

4 つすべての結果を合計する別の無名関数を作成するには、次のようにします。

fTotal = @(x)f1(x) + f2(x) + f3(x) + f4(x);

詳細については、匿名関数を参照してください。

于 2013-05-26T09:38:01.980 に答える
3

このような:

function y = myfunction(data, f1, f2, f3, f4)
  fprintf('f1(2) = %d\n', f1(2) );
  fprintf('f2(10) = %d\n', f2(10) );
  fprintf('f3(1) = %d\n', f3(1) );
  fprintf('f4(0.1) = %d\n', f4(0.1) );
end

myfunction(@sin, @cos, @ln, @tan);
myfunction(@cos, @sin, @tanh, @ln);

myfunctionデモンストレーションとして、いくつかのランダムな値を出力しました。

次の点に注意してください。

  • 関数を に渡すためにmyfunction、関数ハンドル: を使用しました@sin
  • シンボルを必要とmyfunction しない引数@: それらは単なる通常の変数です。
  • 関数ハンドルを格納する変数を取得したら、変数を関数のように「呼び出す」ことができます。f1(x)
于 2013-05-26T09:38:18.840 に答える
1

他のオブジェクトと同じように渡します。「@」は、引数として渡されるときではなく、無名関数を定義するときにのみ必要です。

function y = myfun1(data, f1);
   y = f1(data);
end

f = @(x)(1./x);
d = 1:4;

disp( myfun1(d, f) );

あなたにあげます

1.0000    0.5000    0.3333    0.2500

これをより多くの機能に拡張するのは簡単です。

于 2013-05-26T09:38:29.060 に答える