あなたは、あなたの機能を実装する際にvarargin
、varargout
とargn()
を組み合わせることにより、そのような何かを達成することができます。次の例を見てみましょう:
function varargout = pivota_parcial(varargin)
[lhs,rhs] = argn();
//first check number of inputs or outputs
//lhs: left-hand side (number of outputs)
//rhs: right-hand side (number of inputs)
if rhs == 4 then
A = varargin(1); B = 0;
n = varargin(2); k = varargin(3);
np = varargin(4);
elseif rhs == 5 then
A = varargin(1); B = varargin(2);
n = varargin(3); k = varargin(4);
np = varargin(5);
else
error("Input error message");
end
//computation goes on and it may depend on (rhs) and (lhs)
//for the sake of running this code, let's just do:
A1 = A;
B1 = B;
np1 = n;
//output
varargout = list(A1,B1,np1);
endfunction
まず、あなたが関数に渡される引数の数をチェックするためにargn()
を使用しています。その後、必要な方法で名前を変更し、A = varargin(1)
などの名前を付けます。入力が4つの場合の入力ではないB
が定数に設定されていることに注意してください。実際には、とにかくそれに価値が必要なのかもしれません。
すべてのことが終わったら、出力を設定する必要があります。ここではvarargout
を使用するだけでは不十分な場合があります。最後の行をそのまま使用した場合は、varargout = list(A1,B1,np1)
、実際には0と最大3つの出力を持つ関数を呼び出すことができますが、次のようにlist()
に表示される順序と同じ順序で提供されます。
pivota_parcial(A,B,n,k,np);
:が実行され、最初の出力A1
が配信されますが、変数には格納されません。
[x] = pivota_parcial(A,B,n,k,np);
:x
は、A1
となります。
[x,y] = pivota_parcial(A,B,n,k,np);
:x
はA1
となり、y
はB1
となります。
[x,y,z] = pivota_parcial(A,B,n,k,np);
:x
はA1
なり、y
はz
がnp1
なり、B1
になります。あなたは、特に出力の順序を変更する必要がある場合
、あなたはあなたの入力していた同じことを行う必要があります:出力数をチェックし、各ケースのvarargout
を定義するためにそれを使用します。でもこれを行うことにより、0、最大2つのまたは3の出力にして、この関数を呼び出す機能が保持されていることを
if lhs == 2 then
varargout = list(A1,np1);
elseif lhs == 3 then
varargout = list(A1,B1,np1);
else
error("Output error message");
end
注:基本的には、次のようなもので、最後の行を変更する必要があります。
私はあなたのコメントをアップしましたが、私はここで初心者ですから違いはありません。申し訳ありません... ありがとうございます! (Muito Obrigado amigo !!) – Lucfer1501
De nada。私の答えはあなたに問題を解決しますか?それが解決すれば、あなたはアップボーティングの代わりにそれを受け入れることができます。投票矢印の下にある「V」をクリックします。それがあなたを助けないなら、それを明確にすることはできますか?どの部分があなたのためには機能しないのか、本当に必要なのは何かを教えてください。 – luispauloml