MATLAB: What is the fastest way to list all positive integer vectors whose sum of elements equals K.

integerlistsumvectors

For example I want to list all row vectors (1,5) whose elements are positive integers and sum of elements equals to 20. I am looking for a fast way which not use the loop-for for each elements. Please help.

Best Answer

K = 20; % The required sum
n = 5; % The number of elements in the rows
c = nchoosek(2:K,n-1);
m = size(c,1);
A = zeros(m,n);
for ix = 1:m
A(ix,:) = diff([1,c(ix,:),K+1]);
end
The rows of A will have the vectors you seek. In your example there will be 19!/4!/15! = 3876 such row vectors.
Note: I don't think this code works for the trivial case of n = 1.