考虑如下矩阵:
A= 4 0 31 1 0 0
0 0 0 -1 1 11
0 0 0 24 -1 0
2 1 0 0 17 -3
27 2 0 0 1 1
3 12 0 -1 0 0
现在我需要执行Jacobi迭代(问题是某些对角线元素为零)。因此,我需要执行一些矩阵变换,例如行操作将此矩阵转换为新矩阵,使对角元素变为非零,新形成的矩阵的行列式应与A相同。在Matlab中有没有办法做到这一点?
答案 0 :(得分:4)
假设A是满级,您可以使用QR分解(Matlab qr
函数)。
[Q,R] = qr(A)
From the Matlab documentation,我们知道R
是上三角形,Q
是单一的,A = Q * R
。
因为R
是一个上三角矩阵,所以它非常适合求解和反向替换。如果A
为满秩,则其对角元素将为非零(如果A
为单数,则可能没有符合您要求的矩阵)。
使用A = Q * R
,因此Q' * A = Q' * Q * R
但由于Q
是单一的,因此R = Q' * A
。因此Q'
描述了您需要执行的行操作,R
是具有非零对角线的结果矩阵。另外,因为|det(Q)| = 1
(单一的结果),然后是|det(A)| = |det(R)|
。要解决符号不匹配问题,可以否定一行。