4

Aの行列とします。

1 3 
2 4

関数を呼び出してlu( )戻り値を次のように保存すると:

[L, U] = lu(A);

MATLAB は、L * U = A となるような L, U を返します。

>> L * U

ans =
     1     3
     2     4

戻り値を次のように保存すると、次のようになります。

[L, U, P] = lu(A);

L * U はA と等しくありません:

>> L * U

ans =
     2     4
     1     3

lu( )L、U、P を返すため、L * U = P * A

私の質問:

  • 関数は、要求した戻りパラメーターの数をどのように知ることができlu( )ますか?
  • この動作を自分のコードで再現できますか?
4

2 に答える 2

3

この関数を使用して、nargout要求された出力引数の数を検出できます。

さらに、varargout引数リストを適切に埋めるために使用できます。

例えば:

function varargout = myfun(a,b)

    switch nargout
        case 1
            varargout{1} = a;
        case 2
            varargout{1} = b;
            varargout{2} = a;
    end

end

1 つの出力引数で呼び出された場合、最初の (そして唯一の) 出力は になりますa。2 で呼び出すと、最初はb、2 番目は になりますa

nargoutchk(または古いバージョンではnargchk) を使用して、要求された出力引数の数が指定された制限内であることをアサートすることもできます。

luこれと同様のことを行いますが、MATLAB ではなくコンパイル済みの C で実装されています。

于 2014-04-03T10:21:31.213 に答える
2

はい、これは を使用して複製できますvarargout。同様にvarargin、可変数の入力が必要な場合に使用できます。

function varargout = my_fun(a,b,c);
   varargout{1} = b;
   varargout{2} = c;
   varargout{3} = a;
end

Now, this function can be called

x = my_fun(1,2,3)
x = 2

[x, y] = my_fun(1,2,3)
x = 2
y = 3

[x, y, z] = my_fun(1,2,3)
x = 2
y = 3
z = 1

サム・ロバーツが指摘しているように、これは、異なる数の出力に対して異なる動作をする関数を作成するのに役立ちません。それが必要な場合は、 switch-statementnargoutと組み合わせてチェックアウトする必要があります。同様に、入力変数の数に応じて動作を変更する場合に使用できます。これを行う方法については、 Sam Roberts の回答をご覧ください。nargin

于 2014-04-03T09:56:47.520 に答える