행렬이 직교 함수임을 확인하려고합니다. 벡터는matlab에서 벡터의 표준을 1로 비교할 수 없습니다.
for j=1:2;
if norm(S:,j) ~= 1;
return; % Not normal vector
end
end
을 수행하여 정상 그러나 규범 1에 그 비교 1.0000을 반환 할 때 내가 원하는 바가 아니다, 함수가 반환 사실이고 만약 내가 선택하여 시작합니다. 어떤 아이디어?
Thx
행렬이 직교 함수임을 확인하려고합니다. 벡터는matlab에서 벡터의 표준을 1로 비교할 수 없습니다.
for j=1:2;
if norm(S:,j) ~= 1;
return; % Not normal vector
end
end
을 수행하여 정상 그러나 규범 1에 그 비교 1.0000을 반환 할 때 내가 원하는 바가 아니다, 함수가 반환 사실이고 만약 내가 선택하여 시작합니다. 어떤 아이디어?
Thx
부동 소수점 값이 동일한 지 비교할 수 없습니다. What Every Computer Scientist Should Know About Floating Point Arithmetic을 읽어야합니다.
해결 방법은 abs(norm(s:,j) - 1)
이 최소 허용 가능 차이보다 큰지 확인하는 것입니다.
Orthonormal 행렬에는 조바꿈을 곱할 때 항등 행렬을 얻는 속성이 있습니다. 따라서 루프를 수행하는 대신 간단하게 다음과 같이 쓸 수 있습니다.
%# 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);