如何在MATLAB中基于矢量创建三角矩阵?

时间:2009-06-16 09:55:14

标签: matlab matrix triangular

假设我有一个像这样的矢量:

A = [101:105]

这是真的:

[ 101, 102, 103, 104, 105 ]

我想只使用向量/矩阵函数和运算符来生成矩阵:

101 102 103 104 105
102 103 104 105 0
103 104 105 0   0
104 105 0   0   0
105 0   0   0   0

或以下矩阵:

101 102 103 104 105
0   101 102 103 104
0   0   101 102 103
0   0   0   101 102
0   0   0   0   101

任何想法?

(我在MATLAB中非常新手,但我一直背负着这些东西......)

4 个答案:

答案 0 :(得分:25)

hankel(A)会为您提供第一个矩阵

triu(toeplitz(A))会让你获得第二个。

- 洛伦

答案 1 :(得分:3)

Loren列出了最佳解决方案。也可以使用SPDIAGS

创建这些矩阵
vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5));  % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5)));  % The first matrix

我记得在我发现Loren提到的一些内置函数之前创建这样的带状矩阵。它不像使用它那么简单和干净,但它起作用了。 =)

答案 2 :(得分:2)

我的方法是创建一个矩阵A

101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105

然后找到一个矩阵B,这样当你乘以A*B时,你就会得到你想要的结果。首先在纸上做线性代数,然后让Matlab进行计算。

答案 3 :(得分:2)

为了生成具有这种规则模式的三角矩阵,请使用toeplitz函数,例如

m=toeplitz([1,0,0,0],[1,2,3,4])

对于另一种情况,请使用rot90(m)