在计算光斑中心位置的研究中,选择了高斯中心法,而该方法求解过程中需要用到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
实战
利用高斯中心法计算光斑中心,如感兴趣可见另一篇
<撰写中>
其他
- 使用之前当然要先加入头文件
#include <Eigen/Dense>
using namespace Eigen;
- 上文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;
- 欢迎提问评论,谢谢支持