雅可比算法求矩阵特征值C语言源代码,雅可比(Jacobi)计算特征值和特征向量

雅可比迭代法法

在图形图像中不少地方用到求矩阵的特征值和特征向量,好比主成分分析、OBB包围盒等。编程时通常都是用数值分析的方法来计算,这里介绍一下雅可比迭代法求解特征值和特征向量。雅可比迭代法的原理,网上资料不少,详细可见参考资料1。这里咱们简单介绍求解矩阵S特征值和特征向量的步骤:ios

初始化特征向量为对角阵V,即主对角线的元素都是1.其余元素为0。

在S的非主对角线元素中,找到绝对值最大元素 Sij。

用下 式计算tan2θ,求 cosθ、sinθ 及旋转矩阵Gij 。

1d80e58db5e664ac895c46a991f98c18.png

用下面公式求S‘;用当前特征向量矩阵V乘以矩阵Gij获得当前的特征向量V。

170d53d4c48232848b173ca6938b198b.png

若当前迭代前的矩阵A的非主对角线元素中最大值小于给定的阈值e时,中止计算;不然, 令S =S‘, 重复执行(2) ~ (5)。 中止计算时,获得特征值 li≈(S‘) ij ,i,j= 1,2,…,n.以及特征向量V。

这一步可选。根据特征值的大小从大到小的顺序从新排列矩阵的特征值和特征向量。

代码实现

用C++实现,并与参考资料1示例对比。web

#include

#include

#include

#include

using namespace std;

/**

* @brief Jacobi eigenvalue algorithm

* @param matrix n*n array

* @param dimdim represent n

* @param eigenvectorsn*n array

* @param eigenvaluesn*1 array

* @param precision precision requirements

* @param maxmax number of iterations

* @return

*/

bool Jacobi(double* matrix, int dim, doubl

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值