有没有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];
有一个名称吗?
谢谢。
确实,这个矩阵有一个名称,它被称为汉克尔矩阵。
在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
调用,因为它在幕后执行复制操作。out = (1:n) + (0:n-1).';
我的标准做法是
repmat(1:n,n,1)+repmat((1:n)',1,n)-1
bsxfun
现在已被隐式扩展所取代,而此答案中提供的替代方法现在只需使用out = (1:n)+(0:n-1).';
即可。 - Wolfie