Eigen库QR分解

Eigen库QR分解

在计算光斑中心位置的研究中,选择了高斯中心法,而该方法求解过程中需要用到QR分解。所以在这里记录分享Eigen库的QR分解使用方法。

by HPC_ZY

基本

如一个3x3的矩阵,进行QR分解如下,

// 初始化
MatrixXf A(3 ,3);
A <<
	0, 1, 2,
	3, 4, 5,
	6, 7, 8;
// QR分解
HouseholderQR<MatrixXf> qr;
qr.compute(A);
MatrixXf R = qr.matrixQR().triangularView<Eigen::Upper>();
MatrixXf Q = qr.householderQ();
// 显示
cout << "A = " << endl << A << endl << endl;
cout << "Q = " << endl << Q << endl << endl;
cout << "R = " << endl << R << endl << endl;

对应的MATLAB计算方法如下

% QR分解
A = [0,1,2; 3,4,5; 6,7,8];
[Q,R] = qr(A);

结果对比如下,结果一致,ok
在这里插入图片描述

实战

利用高斯中心法计算光斑中心,如感兴趣可见另一篇
<撰写中>

其他

  1. 使用之前当然要先加入头文件
#include <Eigen/Dense>
using namespace Eigen;
  1. 上文C代码中我使用手动赋值的方式,其实对于大矩阵还可以使用循环赋值,如下
MatrixXf A(3 ,3);
for (int i = 0; i < 3; i++)
	for (int j = 0; j < 3; j++)
		A(i, j) = i*3 + j;
		
cout << "A = " << endl << A << endl << endl;
  1. 欢迎提问评论,谢谢支持

猜你喜欢

转载自blog.csdn.net/xsz591541060/article/details/107530981
今日推荐