在matlab中无法将向量的范数与1进行比较

时间:2010-05-09 21:40:34

标签: matlab

我试图找出矩阵是正交的。我首先通过

检查向量是否正常
for j=1:2;
    if norm(S:,j) ~= 1;
        return; % Not normal vector
    end
end

但是当规范返回1.0000时,将其与1比较为真,函数返回,这不是我想要的。有什么想法吗?

THX

2 个答案:

答案 0 :(得分:6)

您无法比较浮点值是否相等。你应该阅读What Every Computer Scientist Should Know About Floating Point Arithmetic

解决方案是检查abs(norm(s:,j) - 1)是否大于某个可接受的最小差异。

答案 1 :(得分:4)

正交矩阵具有在乘以转置时获得单位矩阵的属性。因此,您可以简单地编写

而不是循环
%# multiply by the transpose and subtract identity
test = S*S'-eye(size(S));  %#       ' (SO formatting)

%# check whether the result is not too different from zero
isOrthonormal = all(abs(test(:)) < 1E-10);