2013-03-07 10 views
5

私はMatlabに可変入力関数からのすべての出力を返すことを望みます。たとえば、可変数の入力に基づいて可能なすべての出力をキャプチャします。

[varargout] = cpd_intersect(varargin {:});

これは最後の出力のみを返しますが、この関数は複数の出力を与えるように定義されています。

[A、B、C ...] = pd_intersect(varargin {:})にダミー変数A、B、Cなどを定義するのではなく、私は値の入力数に基づいてすべての出力値を格納するセルのようなものが欲しいです。私はこれが理にかなってほしい。事前に多くの感謝。

+0

可能性のある重複した[MATLAB関数は、値の可変数を返す場合、どのように私はセル配列としてそれらのすべてを取得することができますか?](のhttp:/ /stackoverflow.com/questions/2821644/if-a-matlab-function-returns-a-variable-number-of-values-how-can-i-get-all-of-t) – Brick

答えて

0

あなたは私はあなたがMATLABで変数カンマで区切られた出力リストを強制することはできません参照cell array

+2

多分私は私は、未知のサイズのセル配列にメモリをあらかじめ割り当てることはできません。私は入力の数に基づいてすべての出力を強制したいだけです。 –

0

を返すことによって、これを行うことができます。残念。それは役に立つだろう。私は各出力を明示的に割り当てる必要があるようです。これは私が得るアウトプットの数をあらかじめ知っていないので駄目です。

+0

はい、あらかじめ出力数を知らなくてもこれはできません。 – Navan

+0

私は 'nargout(FUNC)'を使うことができると思います - 私の答えを見てください –

5

私はこれが遅れているけど、私は、これはあなたが欲しいものだと思う:

function [varargout] = myfun(f, varargin) 
% apply f to args, and return all its outputs 

[ x{1:nargout(f)} ] = f(varargin{:}); % capture all outputs into a cell array 
varargout = x;      % x{:} now contains the outputs of f 

ここ洞察は

  1. NARGOUTが機能で動作し、出力
  2. の彼らの最大数を返すことができるということです
  3. [ X{1} X{2} ] = ...を実行するのと等価であり、Xが未定義の場合、左側に[ X{1:2} ] = ...を使用し、2つの別々の出力を個々の変数に取り込むことができます。注意すべき

2点:

  1. 、これはあまりにも無名関数のために働きます!例えば@(x)eig(x)
  2. varargoutを使用する関数、つまり本当に可変数の出力を持つ関数では機能しません。これが当てはまる場合、いくつの出力があるかを計算する方法があるはずです。 narginを使用してください。

私は@gnoviceからこれを学んだPSのIf a MATLAB function returns a variable number of values, how can I get all of them as a cell array?

関連する問題