MATLAB:根据用户输入生成函数
我是Matlab新手,在以下方面遇到了问题 我正在使用一个外部函数“allcomb”,它允许我从数组中创建元素的组合 例如,我有一个数组C[1 2 3 4]和一个1到20之间任意值的整数X。我想要的结果很简单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) 。。。等等
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)