对角线Matlab

时间:2014-11-26 13:16:05

标签: matlab diagonal

使用对角线值创建新矩阵的这两种方法有什么区别。 第一个跑得快,但准确度有什么不同?

d1=diag(1./diag(A));

d2=inv(diag(diag(A)));

2 个答案:

答案 0 :(得分:2)

我想说方法之间存在差异。我还假设给出d1的操作在没有测试的情况下更快。那发生了什么?

d1=diag(1./diag(A));

首先你在A和临时"存储"中找到对角线。它在向量(ans=diag(A))中。然后对向量(ans=1./ans)进行元素除法。这些操作的结果是一个向量,其长度为min(n,m),其中n是A中的行数,m是A中的列数。然后创建一个新矩阵d1,其中向量1./diag(A)中的元素放在对角线(d1=diag(ans))中。其余元素为0。

d2=inv(diag(diag(A)));

首先,您使用diag(A)找到对角线元素。然后使用diag(ans)创建对角矩阵。第三,你颠倒它。

如果一个对角元素是0,你认为在案例2中会发生什么?比较这两种情况。

答案 1 :(得分:1)

存在一些差异,

A =  [  0     0 ;
      -Inf  -Inf];

d1=diag(1./diag(A))

Inf     0
  0     0

d2=inv(diag(diag(A)))

Inf   Inf
Inf   Inf