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

MATLAB:根据用户输入生成函数,matlab,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) 。。。等等

我是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条件,还有什么更好的方法


感谢您的关注

假设'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”具有可编辑权限,则更明智的做法是将其用于MATLAB函数。

不需要长时间使用字符串,请使用运算符

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
非常容易使用:


这是有希望的。我学到了一些新东西。非常感谢!
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)