MATLAB中有这个恒等式:
A=triu(A,1)+tril(A,-1)+diag(diag(A))
将矩阵分解为一个上三角阵、下三角阵和一个对角阵。
测试如下:
>> format compact
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> U=triu(A,1)
U =
0 2 3
0 0 6
0 0 0
>> L=tril(A,-1)
L =
0 0 0
4 0 0
7 8 0
>> D=diag(diag(A))
D =
1 0 0
0 5 0
0 0 9
triu函数说明如下:
TRIU Extract upper triangular part.
TRIU(X) is the upper triangular part of X.
TRIU(X,K) is the elements on and above the K-th diagonal of X. K = 0 is the main diagonal, K > 0 is above the main diagonal and K < 0 is below the main diagonal.
有两种用法,一个是单一参数,即一个矩阵,该函数返回带主对角线的上三角阵,测试如下:
>> triu(A)
ans =
1 2 3
0 5 6
0 0 9
如果是两个参数,第二个参数将指明主对角线上的第K次的元素,例如:
>> triu(A,2)
ans =
0 0 3
0 0 0
0 0 0
当然K还可以小于0:
>> triu(A,-1)
ans =
1 2 3
4 5 6
0 8 9
tril和triu用法类似。