2010-08-02 47 views
0

一个3x3的反射矩阵基于文件构建使用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)如果这种方法不起作用,是否有人知道如何使用gsl来构建这样一个矩阵? [作为最后一点,我意识到gsl提供了应用Householder转换而不实际找到矩阵的函数。实际上我需要矩阵在我的情况下进行其他工作。]

+0

你肯定normal_vector真的是一个单位矢量? – 2010-08-02 04:36:24

+0

是的,在我发布之前,我仔细检查了一下。 – 2010-08-02 04:45:21

回答

1

反射矩阵P永远不会形成。 取而代之,你会得到如P = I - \tau v v^T中的v。

gsl_linalg_householder_hm适用PA转化,必须产生第V与gsl_linalg_householder_transform

+0

你说得对。我想这是一个我根本不理解文档的例子。我仍然觉得文档很混乱,所以也许这个问题会在未来帮助别人。 – 2010-08-02 04:58:51

+0

@Zac我同意。文档看起来颠倒了,也让我感到困惑 – Anycorn 2010-08-02 05:03:30