No BSD License  

Highlights from
CARTPROD: Cartesian product of multiple sets

from CARTPROD: Cartesian product of multiple sets by David Fass
Returns a matrix containing the cartesian product of multiple input sets.

cartprod(varargin)
function X = cartprod(varargin)
%CARTPROD Cartesian product of multiple sets.
%
%   X = CARTPROD(A,B,C,...) returns the cartesian product of the sets 
%   A,B,C, etc, where A,B,C, are numerical vectors.  
%
%   Example: A = [-1 -3 -5];   B = [10 11];   C = [0 1];
% 
%   X = cartprod(A,B,C)
%   X =
% 
%     -5    10     0
%     -3    10     0
%     -1    10     0
%     -5    11     0
%     -3    11     0
%     -1    11     0
%     -5    10     1
%     -3    10     1
%     -1    10     1
%     -5    11     1
%     -3    11     1
%     -1    11     1
%
%   This function requires IND2SUBVECT, also available (I hope) on the MathWorks 
%   File Exchange site.


numSets = length(varargin);
for i = 1:numSets,
    thisSet = sort(varargin{i});
    if ~isequal(prod(size(thisSet)),length(thisSet)),
        error('All inputs must be vectors.')
    end
    if ~isnumeric(thisSet),
        error('All inputs must be numeric.')
    end
    if ~isequal(thisSet,unique(thisSet)),
        error(['Input set' ' ' num2str(i) ' ' 'contains duplicated elements.'])
    end
    sizeThisSet(i) = length(thisSet);
    varargin{i} = thisSet;
end

X = zeros(prod(sizeThisSet),numSets);
for i = 1:size(X,1),
    
    % Envision imaginary n-d array with dimension "sizeThisSet" ...
    % = length(varargin{1}) x length(varargin{2}) x ...
    
    ixVect = ind2subVect(sizeThisSet,i);
    
    for j = 1:numSets,
        X(i,j) = varargin{j}(ixVect(j));
    end
end

Contact us at files@mathworks.com