MATLAB:根据用户输入生成函数

时间:2014-03-06 09:23:50

标签: matlab

我是Matlab的新手,遇到以下问题。

我正在使用外部函数“allcomb”,它允许我创建数组元素的组合。

例如,我有一个数组C [1 2 3 4]和一个介于1到20之间的任何值的整数X.我想要的结果很简单,

if X is 1, my function will be allcomb(C)
if X is 2, my function will be allcomb(C,C)
if X is 6, my function will be allcomb(C,C,C,C,C,C)

......等等。

而不是创建if条件,这样做的更好方法是什么?

感谢您的关注

3 个答案:

答案 0 :(得分:0)

假设'allcomb'的输出转到某个变量'out'(即“out = allcomb(C,C,C);;”对于X = 3),我认为这可能有效 -

out_string = 'out = '; %// Edit this to change output behaviour.
                       %// For example set it to empty string '' if no output
                       %// is needed.

str1 = repmat('C,',[1 X]);
str1(end) = [];

evalc_string = [out_string 'allcomb(' str1 ');'];
evalc(evalc_string);

这真是一个肮脏的黑客。如果您拥有'allcomb'的可编辑权限,那么将variable-length input method用于MATLAB函数会更明智。

答案 1 :(得分:0)

使用字符串的方法不是必须的,请改用comma separated list运算符 :

C = [1 2 3 4];
X = 2

in = repmat( {C}, X, 1 )

allcomb( in{:} )

例如allcomb只显示输入:

function allcomb( varargin )
celldisp(varargin)
end

返回X = 2

varargin{1} =

     1     2     3     4

varargin{2} =

     1     2     3     4

X = 4

varargin{1} =

     1     2     3     4

varargin{2} =

     1     2     3     4

varargin{3} =

     1     2     3     4

varargin{4} =

     1     2     3     4

答案 2 :(得分:0)

使用comma-separated list

非常简单
C = [1 2 3 4];
n = 6; %// number of arguments (all equal to C) to pass to allcomb

CC = mat2cell(repmat(C,n,1),ones(1,n),numel(C)); %// nx1 cell array containing C
allcomb(CC{:}) %// call allcomb. Note CC{:} is just C,C,...C (n times)