【问题标题】:Is there any built-in function to eliminate diagonal zeros?是否有任何内置功能可以消除对角线零?
【发布时间】:2015-11-17 07:09:17
【问题描述】:

考虑如下矩阵:

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中有没有办法做到这一点?

【问题讨论】:

  • 您的问题没有唯一答案。如果有这样的功能,它应该有更多的限制条件才能使答案唯一。

标签: matlab matrix


【解决方案1】:

假设A是满秩的,可以使用QR分解(Matlabqr函数)。

[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)|。要解决符号不匹配的问题,您可以取反一行。

【讨论】:

  • diag(eigen(A)) 的操作对我不起作用,因为我有较低版本的 Matlab (2012a)。还有其他方法吗?
  • @Soumya:来自[Q,R] = qr(A)R 是一个上三角矩阵,非常适合求解和反替换。如果A 是满秩(如果A 是单数,则可能没有满足您要求的矩阵),它的对角线元素将非零。此外,A = Q * R 和因此 Q' * A = Q' * Q * R 但由于 Q 是单一的,因此 R = Q' * A。因此Q' 是您需要执行的行操作,R 是具有非零对角线的结果矩阵。另外,因为det(Q) = 1,所以det(A) = det(R)
  • 谢谢。我明白了,也找到了 R。但是 det(Q)= -1;我需要将其调整为 R 还是我做错了什么?
  • 嗯,我猜det(Q) = -1 是可能的。如果你用-1 乘以R 的最后一行(除了对角线项外全为零),那么我猜你应该再次拥有det(A) = det(R)。我认为这应该是允许的 Jacobi 操作...
  • 是的,我已经做到了。但是当我尝试验证矩阵 R 的解时,我发现它不是原始矩阵 A 的解,即方程 Ax=b 转换为 Rx=b 时不会给出相同的解 x (A\b != R\b)。我哪里错了?
猜你喜欢
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多