2016-02-28 135 views
6

我需要检查矩阵是否为单位矩阵。我知道有一个函数检查一个矩阵是否是一个对角矩阵,即isdiag。我知道我可以做以下检查一个矩阵a为单位矩阵:检查矩阵是否是Matlab中的单位矩阵

isequal(a, eye(size(a, 1))) 

有没有像isdiag塔的功能不直接给我吗?

+5

通常你应该避免检查正确性,除非你与整数工作。你应该做一些像'isidentity = @(a,tol)all(abs(a-eye(size(a)))

+0

没有内置功能。除非处理“眼睛(大小(a,1))”可能超过内存的非常大的(稀疏)矩阵,否则你的方法是好的。 – Daniel

+0

嗨@nbro你有多个问题仍然打开没有接受的答案。当一个答案已经解决了你的问题,请考虑[接受它](http://meta.stackexchange.com/q/5234/179419)点击复选标记。这向更广泛的社区表明您已找到解决方案。 – Daniel

回答

0

正如其他人所说,你不一定要检查的单位矩阵确切的平等。同样使用eye可能会占用足够大的矩阵的不必要的内存量。我会建议使用diag来解决这个问题。

isdiag(a) && all(abs(diag(a) - 1) < tolerance) 
+0

请注意,'isdiag'可能会检查确切的对角线,所以它可能不完全符合您的后半部分条件。 –

1
sum(sum(A - eye(size(A,1)) < epsilon)) == 0 

由身份减去,并检查是否任何元素比的ε-更大。