'Matlab Special Matrix

Is there a MATLAB function to generate this matrix?:

[1 2 3 4 5 6 7 ... n;
 2 3 4 5 6 7 8 ... n+1;
 3 4 5 6 7 8 9 ... n+2;
 ...;
 n n+1 n+2     ... 2*n-1];

Is there a name for it?

Thanks.



Solution 1:[1]

Yes indeed there's a name for that matrix. It's known as the Hankel matrix.

Use the hankel function in MATLAB:

out = hankel(1:n,n:2*n-1);

Example with n=10:

out = 

     1     2     3     4     5     6     7     8     9    10
     2     3     4     5     6     7     8     9    10    11
     3     4     5     6     7     8     9    10    11    12
     4     5     6     7     8     9    10    11    12    13
     5     6     7     8     9    10    11    12    13    14
     6     7     8     9    10    11    12    13    14    15
     7     8     9    10    11    12    13    14    15    16
     8     9    10    11    12    13    14    15    16    17
     9    10    11    12    13    14    15    16    17    18
    10    11    12    13    14    15    16    17    18    19

Alternatively, you may be inclined to want a bsxfun based approach. That is certainly possible:

out = bsxfun(@plus, (1:n), (0:n-1).');

The reason why I wanted to show you this approach is because in your answer, you used repmat to generate the two matrices to add together to create the right result. You can replace the two repmat calls with bsxfun as it does the replication under the hood.

The above solution is for older MATLAB versions that did not have implicit broadcasting. For recent versions of MATLAB, you can simply do the above by:

out = (1:n) + (0:n-1).';

Solution 2:[2]

My standard approach is

repmat(1:n,n,1)+repmat((1:n)',1,n)-1

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Brethlosze