Don't store your vectors separately. Instead, learn to use tools like cell arrays, which make things hugely more efficient.
V = {[1 2 3],[4 5 6 7],[8 9 10 11 12]};
Next, how do you use a cell array for this purpose? You pass the elements into ndgrid, using what is called acomma separated list. (Or meshgrid.) That is what you get when you type V{:}, a comma separated list. It allows you to pass in each element of the cell array into a function as if each element of the cell array was an argument of the function.
For example, if we did this:
[G1,G2,G3] = ndgrid(V{:});
Hmm. That creates three different arrays, that do contain all combinations of the elements of those vectors if you look carefully. But here we don't want to split the results into n different named arrays. We want a cell array as output. So now, try this:
C = cell(1,numel(V));
[C{:}] = ndgrid(V{:})
C =
1×3 cell array
{3×4×5 double} {3×4×5 double} {3×4×5 double}
Better. We have captured the output from ndgrid back into a cell array. But what we probably wanted was one flat array, with three columns, and here, 60 rows. We could convert each of those arrays into a column vector easily enough.
C = cellfun(@(X) reshape(X,[],1),C,'UniformOutput',false)
C =
1×3 cell array
{60×1 double} {60×1 double} {60×1 double}
And, now finally, just convert C into a flat array, using a tool like horzcat. (square brackets will suffice. That is...
C = horzcat(C{:})
C =
1 4 8
2 4 8
3 4 8
1 5 8
2 5 8
3 5 8
1 6 8
2 6 8
3 6 8
1 7 8
2 7 8
3 7 8
1 4 9
2 4 9
3 4 9
1 5 9
...
2 7 12
3 7 12
As you should see, nothing I did was dependent on the size of the arrays, the length of the vectors, the number of different vectors. That was all driven by the one initial cell array as I created it. Learn to use MATLAB, as it was designed to be used.
Best Answer