我試圖找出矩陣是正交的。我開始通過檢查向量是正常做在matlab中無法比較矢量的常量與1
for j=1:2;
if norm(S:,j) ~= 1;
return; % Not normal vector
end
end
但當規範返回1.0000是比較1是真實的,函數返回時,這不是我想要的。有任何想法嗎?
Thx
我試圖找出矩陣是正交的。我開始通過檢查向量是正常做在matlab中無法比較矢量的常量與1
for j=1:2;
if norm(S:,j) ~= 1;
return; % Not normal vector
end
end
但當規範返回1.0000是比較1是真實的,函數返回時,這不是我想要的。有任何想法嗎?
Thx
您無法比較浮點值是否相等。您應該閱讀What Every Computer Scientist Should Know About Floating Point Arithmetic。
解決的辦法是檢查abs(norm(s:,j) - 1)
是否大於某個最小可接受的差值。
正交矩陣具有當您乘以轉置時獲得單位矩陣的屬性。因此,可以簡單地寫
%# 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);