Построение матрицы отражения 3х3 с использованием GSL - PullRequest
0 голосов
/ 02 августа 2010

На основании документов

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) Если такой подход не работает, кто-нибудь знает, как построить такую ​​матрицу, используя gsl?

[В качестве последнего замечания я понимаю, что gsl предоставляет функции для применения преобразований Домохозяев без фактического нахождения матриц. Мне действительно нужны матрицы в моем случае для другой работы.]

1 Ответ

1 голос
/ 02 августа 2010

Матрица отражения, P, никогда не формируется.Вместо этого вы получаете v как в P = I - \tau v v^T.

gsl_linalg_householder_hm применяет преобразование PA, сначала вы должны сгенерировать v с помощью gsl_linalg_householder_transform

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...