Matlab特殊矩阵

4
有没有MATLAB函数可以生成这个矩阵?:
[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];

有一个名称吗?
谢谢。
2个回答

5

确实,这个矩阵有一个名称,它被称为汉克尔矩阵

在MATLAB中使用hankel函数:

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

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

或者,您可能倾向于使用基于bsxfun的方法。这是完全可行的:

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

我想向您展示这种方法的原因是,在您的答案中,您使用了repmat来生成两个矩阵以相加得到正确的结果。您可以使用bsxfun替换这两个repmat调用,因为它在幕后执行复制操作。
以上解决方案适用于旧版本的MATLAB,它没有隐式广播功能。对于最近的MATLAB版本,您可以通过以下方式简单地完成以上操作:
out = (1:n) + (0:n-1).';

1
从更近期的重复问题中来到这里,给未来的读者提醒:请注意,bsxfun现在已被隐式扩展所取代,而此答案中提供的替代方法现在只需使用out = (1:n)+(0:n-1).';即可。 - Wolfie
@Wolfie 我想我会更新这个答案以尊重隐式扩展。毕竟,这个答案是来自2015年的! - rayryeng

2

我的标准做法是

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接