MATLAB: I want to divide one vector to two vectors that complement each other .. How to obtain all possible combinations of these 2 vectors

matricesvectors

I want to divide this vector [7 3 3 3 3 3 2 1 1 2] into 2 vectors that complement each other, for example: divide it to : A = [4 2 1 2 1 1 1 1 1 0] and B = [3 1 2 1 2 2 1 0 0 2] .. How can I obtain the all combinations of these 2 vectors ?

Best Answer

You could use the FEX submission ALLCOMB by Jos for this. E.g.,
x = your original vector of non-negative integers
c = cellfun(@(y)0:y,num2cell(x),'uni',false);
A = allcomb(c{:});
B = bsxfun(@minus,x,A);
The rows of A and B contain all of the possibilities. The usual caveat applies here ... if you have too many numbers with values that are too high this will blow up your memory and you will need to solve your problem a different way.
ALLCOMB can be found here:
https://www.mathworks.com/matlabcentral/fileexchange/10064-allcomb-varargin-