5

func(1,2,3,4,5)でmatlab 関数を呼び出すと、 完全に機能します。

しかし、もしそうなら: a=[1,2,3,4,5] %(a[1;2;3;4;5] は同じ結果を与える)

それから:

ファンク(a)

私に与えます:

??? エラー ==> func at 11 十分な入力引数がありません。

func.m の 11 行目は次のとおりです。

エラー (nargchk (5、6、nargin));

これが完全に機能することに気付きました:

func(a(1),a(2),a(3),a(4),a(5))

ベクトル 'a' を関数のパラメーターとして使用するにはどうすればよいですか? a を返す別の関数 otherfunc(b) があり、その出力をこのfunc(otherfunc(b))のようなパラメーターとして使用したいと考えています。

4

7 に答える 7

6

カンマ区切りリスト (CSL) は、パラメーター リストとして関数に渡すことができます。

したがって、必要なのは1,2,3,4,5、配列から構築された CSL です。

次のようにセル配列を使用して生成できます。

a=[1,2,3,4,5];
c = num2cell(a);
func(c{:});
于 2015-05-06T11:31:43.433 に答える
3

おそらく、入力引数の数の値を持つ関数内の変数である nargin を試すことができます。異なる長さの入力が必要なため、これは varargin で処理するのが最善だと思います.varargin は最後の入力変数として設定でき、余分な入力引数をすべてグループ化します..

function result = func(varargin)
    if nargin == 5: % this is every element separately
        x1 = varargin{1}
        x2 = varargin{2}
        x3 = varargin{3}
        x4 = varargin{4}
        x5 = varargin{5}
    else if nargin == 1: % and one vectorized input
        [x1 x2 x3 x4 x5] = varargin{1}

x1...x5入力変数について書きました

于 2013-02-25T23:31:25.923 に答える
0

Matlab の関数への引数は、それ自体がベクトル (または行列) になる可能性があるため、複数の引数を単一のベクトルに置き換えることはできません。
が 5 つの引数を想定している場合func、単一のベクトルを渡すことはできず、5 つの引数すべてがベクトル内の要素であることを matlab が理解することを期待できません。Matlab は、このケースと最初の引数が 5 ベクトルであるケースとの違いをどのように見分けることができますか?

だから、私はこの解決策を提案します

s.type = '()';
s.subs = {1:5};
func( subsref( num2cell( otherfunc(b) ), s ) )

これが機能するかどうかはわかりませんが (ここに matlab はありません)、理論的根拠は、5-ベクトルa( の出力otherfunc(b)) をセル配列に変換し、それを 5 つの異なる引数として に展開することfuncです。これで と
の違いはa{:}ありません。a(:)subsref

于 2013-02-25T21:50:51.890 に答える
0

次の形式の関数を作成できます。

function [ out ] = funeval( f, x )
   string = 'f(';
   for I = 1:length(x)
      string = strcat( string, 'x(' , num2str(I), '),' );
   end
   string( end ) = ')';
   out = eval( string );
end

その場合、funeval( func, a )必要な出力が得られます。

于 2013-12-24T16:01:47.140 に答える
0

関数が単一の引数を取るようにするだけです。

function result = func(a)
    if ~isvector(a)
        error('Input must be a vector')
    end
end
于 2013-02-25T20:04:23.380 に答える