2014-03-06 77 views
0

我是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條件,什麼會是一個更好的方法呢?

感謝您的興趣

回答

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 
+1

這是有希望的。學到了新東西。非常感謝! – Cheng

0

假設的 'allcomb' 的輸出變爲一定的變量 '出'(即, 「OUT = allcomb(C,C,C);」 爲X = 3),I認爲這可能工作 -

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函數使用variable-length input method會更明智。

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)