MATLAB: Create custom matrix with user-defined parameters

matrixmatrix arraymatrix manipulation

Hi,
I would like help creating a custom matrix that follows this pattern:
[1 1 -1 1;
1 1 1 -1;
1 2 -1 1;
1 2 1 -1;
1 3 -1 1;
1 3 1 -1;
2 1 -1 1;
2 1 1 -1;
2 2 -1 1;
2 2 1 -1;
2 3 -1 1;
2 3 1 -1;
3 1 -1 1;
3 1 1 -1;
3 2 -1 1;
3 2 1 -1;
3 3 -1 1;
3 3 1 -1;
4 1 -1 1;
4 1 1 -1;
4 2 -1 1;
4 2 1 -1;
4 3 -1 1;
4 3 1 -1]
I want the maximum number to which the first two columns count to be user-determined (e.g., x and y, respectively).
In the above example, x = 4 and y = 3.
Column one counts to x, repeating each integer (2y) times.
Column two counts to y, repeating each integer twice.
Columns three and four alternate between -1 and 1 for the entirety of the matrix.
So the total number of rows for the matrix is always (x * y * 2) which equals 24 in the above example.
Thanks in advance!

Best Answer

x = 4 ;
y = 3 ;
[ X, Y ] = meshgrid( 1 : x, 1 : y ) ;
Alternator = repmat( ( - 1 ) .^ ( 1 : numel( X ) ).', 1, 2) ;
z = [ X( : ), Y( : ) ] ;
Wanted = [ repelem( z, 2, 1 ), Alternator( : ) * [ 1, - 1 ] ]
Related Question