使用对角线值创建新矩阵的这两种方法有什么区别。 第一个跑得快,但准确度有什么不同?
d1=diag(1./diag(A));
d2=inv(diag(diag(A)));
答案 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