2010-08-02 4 views
0

사용하여 3 × 3 반사 행렬을 구축는 문서를 기반으로 GSL

http://www.gnu.org/software/gsl/manual/html_node/Householder-Transformations.html

http://en.wikipedia.org/wiki/Householder_transformation

나는 생각 성공적으로 직교하는면에 반사에 대한 행렬을 생성 할 것이다 다음 코드 단위 벡터 normal_vector.

gsl_matrix * reflection = gsl_matrix_alloc(3, 3); 
gsl_matrix_set_identity(reflection); 
gsl_linalg_householder_hm(2, normal_vector, reflection); 

그러나 결과는 내가 알 수있는 한 반사 매트릭스가 아닙니다. 특히 내 경우에는 반사 행렬에서는 불가능한 실제 고유치 - (2 + 1/3)을가집니다.

내 질문은 다음과 같습니다.

(1) 내가 뭘 잘못하고 있니? 그것이 저에게 효과가있는 것처럼 보입니다.

(2) 그 방법이 효과가 없다면 누구나 GS11을 사용하여 그러한 매트릭스를 만드는 방법을 알고 있습니까?

[마지막으로, gsl은 행렬을 실제로 찾지 않고 Householder 변환을 적용하는 기능을 제공합니다. 나는 실제로 다른 경우에 행렬을 필요로한다.]

+0

와 당신이 normal_vector 정말 단위 벡터 것을 확실 V를 생성해야합니다, PA 변환을 적용? –

+0

그래, 게시하기 전에 확인 했어. –

답변

1

반사 행렬 P는 결코 형성되지 않는다. 대신에 P = I - \tau v v^T에서와 같이 v를 얻습니다.

gsl_linalg_householder_hm은 먼저 gsl_linalg_householder_transform

+0

네 말이 맞아. 나는 이것이 문서를 전혀 이해하지 못하는 경우라고 생각한다. 나는 아직도 문서가 혼란 스럽다고 느낀다. 그래서이 질문은 누군가 다른 사람들을 장래에 도울 것이다. –

+0

@ Zac 동의합니다. 문서가 거꾸로 보이고, 나를 혼란스럽게합니다. – Anycorn