假设我有一个像这样的矢量:
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中非常新手,但我一直背负着这些东西......)
答案 0 :(得分:25)
hankel(A)
会为您提供第一个矩阵
triu(toeplitz(A))
会让你获得第二个。
- 洛伦
答案 1 :(得分:3)
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)