【发布时间】:2011-05-07 07:47:33
【问题描述】:
我如何从向量 [1 2 3 4 5] 创建下面的矩阵
1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
0 5 4 3 2
0 0 5 4 3
0 0 0 5 4
0 0 0 0 5
【问题讨论】:
我如何从向量 [1 2 3 4 5] 创建下面的矩阵
1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
0 5 4 3 2
0 0 5 4 3
0 0 0 5 4
0 0 0 0 5
【问题讨论】:
这不是三对角矩阵,而是五对角矩阵的变体。您可以使用 diag、sparse 或 spdiags,所有这些都可以构建它。您可以阅读我在File Exchange 上找到的blktridiag 代码,了解我如何有效地构建这样的矩阵。
但也许最简单的解决方案是识别出您的矩阵是一种特殊形式,即托普利茨矩阵。
>> toeplitz([1:5,zeros(1,4)]',[1, zeros(1,4)])
ans =
1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
0 5 4 3 2
0 0 5 4 3
0 0 0 5 4
0 0 0 0 5
【讨论】:
不确定您到底想做什么,但您可能会发现diag(v,n) 和convmtx(v) 很有用。你的情况
convmtx([1,2,3,4,5],5)
生产:
1 2 3 4 5 0 0 0 0
0 1 2 3 4 5 0 0 0
0 0 1 2 3 4 5 0 0
0 0 0 1 2 3 4 5 0
0 0 0 0 1 2 3 4 5
【讨论】:
看这里:http://www.mathworks.com/help/techdoc/ref/diag.html
例子:
diag(-m:m)+diag(ones(2*m,1),1)+diag(ones(2*m,1),-1)
产生一个 2*m+1 阶的三对角矩阵。
【讨论】: