2013-06-04 3 views
2

에 대한 규범()를 사용할 수 없습니다.아이겐 :</p> <pre><code>Vector2i vec(0, 1, 2); cout << vec.norm() << endl; </code></pre> <p>그것을 언급 컴파일러 오류 제공으로 : <code>THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES</code> 일부 실패 주장에를 내가 할 수없는 Vector2i

내가 할 수있는 :

Vector2i i_vec(0, 1, 2); 
Vector2f f_vec; 
f_vec = i_vec.cast<float>(); 
cout << f_vec.norm() << endl; 

분명히 작동합니다.

질문 : norm 방법은 VectorXi에 대해 정의되지 않는 이유 모든 이유?

아마 아이겐은 (norm()int의 반환 유형에 대해 정의되지 않을 것이라고이 경우는 의미가 있습니다) norm()의 반환 유형을 결정하기 위해 Vector의 요소 유형을 사용?

그냥 궁금해서. 내가 제대로 norm() 기능의 동작을 기억한다면

+0

내가 정수 벡터 공간에서 유클리드 규범의 수학 sence가 있다고 생각하지 않습니다. 정수 벡터는 정규화 할 수 없습니다. – akalenuk

답변

2

, 그것은 일부 입력의 제곱근을합니다. 제곱근, 분명, 많은 경우에 비 정수입니다. 반면에 고유 패키지의 논리를 기억하면 특정 요소 (int, double, complex<double>)의 행렬을 선언하면이 유형의 요소 만 사용할 수 있습니다. 그래서 당신은 당신의 제안에 절대적으로 옳았다.

+2

날 임시을 만들 필요가 없습니다 것을 추가 할 수 있도록, 답을 완료 :'()'() .norm를 i_vec.cast, 당신은 또한 제곱 규범 계산할 수 있습니다 :) ('i_vec.squaredNorm을'하고 받아 필요에 따라서 제곱근을 구한다. – ggael

+0

'squaredNorm()'을 생각하지 않았습니다. 감사. –