我试图找出矩阵是正交的。我首先通过
检查向量是否正常for j=1:2;
if norm(S:,j) ~= 1;
return; % Not normal vector
end
end
但是当规范返回1.0000时,将其与1比较为真,函数返回,这不是我想要的。有什么想法吗?
THX
答案 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);