如何在matlab中生成三对角矩阵?

如何在matlab中生成三对角矩阵?,matlab,vector,Matlab,Vector,如何从向量[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(-m:m)+diag(ones(2*m,1),1)+diag(ones(2*m,1),-1) 生成阶数为2*m+1的三对角矩阵。不确定要执行的操作,但您可能会发现diag(v,n)和convmtx(v)非常有用。就你而言 convmtx

如何从向量[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(-m:m)+diag(ones(2*m,1),1)+diag(ones(2*m,1),-1)

生成阶数为2*m+1的三对角矩阵。

不确定要执行的操作,但您可能会发现
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

这不是三对角矩阵,而是五对角矩阵的变体。您可以使用diag、sparse或spdiags,所有这些都可以构建它。您可以阅读我在上找到的代码,了解我如何高效地构建这样一个矩阵

但也许最简单的解决办法是认识到你的矩阵是一种特殊的形式,一种托普利兹矩阵

>> 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