24

単純なデータ値の変換には無名関数を使用します。無名関数は次の構文で定義されます

sqr = @(x) x.^2;

次のように使用できる複数の出力を返す単純な無名関数が必要です。. .

[b,a] = myAnonymousFunc(x);

Matlab のドキュメントでは、これが可能であることが示唆されていますが、そのような関数を定義するために必要な構文の例は示されていません。

http://www.mathworks.co.uk/help/techdoc/matlab_prog/f4-70115.html#f4-71162

そのような関数を定義する構文は何ですか [私の投稿の上部にあるコード例のように、1 行で]?

4

3 に答える 3

28

これはあなたが必要とすることをしますか?

>> f = @(x)deal(x.^2,x.^3);
>> [a,b]=f(3)
a =
     9
b =
    27

この例ではf、正確に 2 つの出力引数のみを呼び出していることを確認する必要があります。そうしないと、エラーが発生します。

編集

少なくとも最近のバージョンの MATLAB では、次の~構文を使用して一部の出力引数のみを返すことができます。

>> [a,~]=f(3)
a =
     9
>> [~,b]=f(3)
b =
    27
于 2012-05-17T11:13:31.827 に答える
8

チルダ ~ を使用して出力をスキップしたり、セル配列を出力したりしたくない場合は、補助的な無名関数のみが必要です。

 deal2 = @(varargin) deal(varargin{1:nargout});
 myAnonymousFunc = @(x) deal2(x.^2, x.^3);

次に、最初の出力引数のみ、または最初と 2 番目の両方を取得できます。

x = 2;
[b,a] = myAnonymousFunc(x)
b = myAnonymousFunc(x)

結果:

b = 4

a = 8

b = 4

于 2014-12-17T01:08:15.750 に答える
7

呼び出される関数が複数の出力を返す場合、無名関数から複数の出力を取得できます。実際の例については、MathWorks Web サイトのこのブログ投稿を参照してください。

無名関数から複数の出力を取得するには、次の 2 つの方法があります。

  • 複数の出力を返す関数を呼び出す

    リンク先のブログ投稿から、彼らはそのeigような機能を使用しています

    fdoubleEig = @(x) eig(2*x)
    [e, v] = fdoubleEig(magic(3))
    
  • または、関数を使用して複数の出力を返す無名関数を作成することもできますdeal

    これが私が作ったものです:

    >>> f = @(x, y, z) deal(2*x, 3*y, 4*z)
    >>> [a, b, c] = f(1, 2, 3)
    
    a = 
         2
    b = 
         6
    c = 
         12
    

編集:Sam Roberts が指摘したように、リンク先のブログ投稿では、を使用するときに正しい数の出力引数を使用する必要がありますdeal。そうしないと、エラーがスローされます。これを回避する 1 つの方法は、結果のセルを返すことです。例えば

>>> f = @(x, y, z) {2*x, 3*y, 4*z}

>>> t = f(1, 2, 3)

>>> [a, b, c] = t{:}

    a = 
         2
    b = 
         6
    c = 
         12
于 2012-05-17T11:13:34.370 に答える