首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QR算法实现3x3定点

QR算法实现3x3定点
EN

Stack Overflow用户
提问于 2015-03-02 04:57:58
回答 1查看 299关注 0票数 2

我想找出一个3x3矩阵的特征值和特征向量(主要是对称的!!)。我的数字是以定点格式存储的(准确地说是16.16)。

请注意,我并不太在意性能,只是简单地实现了一个完成这项工作的算法。

下面的代码,当您构建并运行它(使用libfixmath库)时,会产生正确的特征值,但不会产生正确的特征向量。

如果我正确理解了算法,那么特征向量就是所有计算出的Qs的乘积。

有没有人知道可能出了什么问题?(甚至纠正代码(写作风格等)任何你能想到的东西,但当然试着把你的注意力集中在特征向量上!:) :P

实际的循环类似于3 lines...and,它做的是:

代码语言:javascript
复制
eigenvectors = identity matrix

1) QR decomposition A = Q*R

2) Anew = R*Q (multiply the factors in the reverse order, and iterate)

3) eigenvectors = eigenvectors * Q

谢谢你!!哦,这里还有C菜鸟……

the code

EN

回答 1

Stack Overflow用户

发布于 2015-03-02 05:18:33

我已经使用LAPACK library很多年了,有几个好处,

要比较结果,可以使用R (默认使用LINPACK例程DQRDC2 ),甚至可以使用MATLAB。

然后,您可以在R中使用带有LAPACK=TRUE选项的qr()命令来使用LAPACK例程:

代码语言:javascript
复制
> QR <- qr(Mat,LAPACK=TRUE)
> QR

但是,您应该知道,本例中的函数qr()使用的是LAPACK例程DGEQP3。与您正在使用的DGEQRF例程相反,DGEQP3使用列旋转来计算矩阵的QR分解。

如果您得到不同的结果,则可能是您使用的方法不同(不知道哪个方法使用了您发布的代码)。

您应该记住,QR分解并不是唯一的解决方案。要知道QR分解是否正确,只需检查Q和R矩阵是否满足要求。例如在R中:

代码语言:javascript
复制
> Q <- qr.Q(QR)
> round( t(Q) %*% Q , 10 )
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]    0    0    1    0
[4,]    0    0    0    1

> all.equal(Q %*% qr.R(QR),Mat)
[1] TRUE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28798987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档