2013-08-20 2 views
1

어떻게하면 matlab에서 쿼터니온의 표준을 계산할 수 있습니까?Matlab에서 quternion의 표준을 계산하는 방법은 무엇입니까?

나는이 예

a = [1 4 4 -4]; 
norm = quatnorm(a) 

내 예상 출력은 7 만 matlab에 내가 뭘 잘못 49

을 반환 시도?

+1

다른 예제를 시도하고 예상 답변이 항상 Matlab 응답의 제곱근인지 확인하십시오. – Dan

+0

['quatnorm']에 대한 문서 (http://www.mathworks.com/help/aerotbx/ug/quatnorm.html)는 어떤 종류의 규범이 사용되는지 나타내지 않지만 [Simulink 버전] (http : //www.mathworks.com/help/aeroblks/quaternionnorm.html)는'sqrt'없이 그것을 정의합니다. 이유는 모르겠다. 항공 우주 도구 상자가 없지만 필자가 보았던 것에서는 다소 불량한 설계 선택을하는 것으로 보입니다. – horchler

+3

그리고 잘못하고있는 한 가지는 동일한 이름의 변수를 만들어 실제 '표준'함수를 덮어 쓰는 것입니다. – horchler

답변

1

@Dan은 네이티브 구현을 사용하여 정규 표준 정의의 제곱을 얻고있는 것으로 나타났습니다. 어떤 이유에서 quatnorm은 유클리드 기준 (제곱합의 제곱근)을 추정 한 후 사각형을 반환합니다.

q = [1 4 4 -4]; 

MATLAB quatnorm : (벡터에 대한)

for index = size(q, 1):-1:1 
    qnorm(index,:) = norm(q(index,:), 2); 
end  
qout = qnorm.*qnorm; 

대안 :

sqrt(q*q') 

sqrt(quatnorm(q))를 받고 동일합니다. 위에서 주목하는 바와 같이, quatnorm 또한 연속 매트릭스의 행에 저장 쿼터니온 규범을 추정하도록되어있다 (N × 4 매트릭스 용)

대체 (후 각 행의 놈과 사각형 추정)

Q = [q; 2*q]; % example 

sqrt(diag(Q*Q')) 
0

반환 된 숫자의 제곱근을 취하거나 함수의 제곱을 취하지 않고 복소수의 적절한 유클리드 표준 (모듈러스)을 계산하는 대신 quatmod (q) 함수를 사용할 수 있습니다.

관련 문제