Eigen(http://eigen.tuxfamily.org)是常用的 C++ 矩阵运算库,具有很高的运算效率。大部分 需要在 C++ 中使用矩阵运算的库,都会选用 Eigen 作为基本代数库,例如 Google Tensorflow,Google Ceres,GTSAM 等。本次编程实现***A***为100X100随机矩阵时,用QR和Cholesky分解求x。同时总结了一些有关线性方程组数值解法的原理。
正文:
1. 在什么条件下,x有解且唯一?
2. 高斯消元法的原理是什么?
高斯消元主要用来求解线性方程组,也可以求解矩阵的秩,矩阵的逆。其实高斯消元的过程就是手算解方程组的过程:加减消元,消去未知数,如果有多个未知数,就一直消去,直到得到类似kx=b(k和b为常数,x为未知数)的式子,就可以求解出未知数x,然后我们回代,依次求解出各个未知数的值,就解完了方程组。
换句话说,分两步:
- 加减消元
- 回代求未知数值
以下有高斯消元C++模版:
https://blog.csdn.net/pengwill97/article/details/77200372
3. QR分解的原理是什么?
QR 分解是三种将矩阵分解的方式之一。这种方式,把矩阵分解成一个正交矩阵Q与一个上三角矩阵R的积。
对于Ax=b,
直接求A的逆有时过于复杂,因此使用QR分解算法:
详细定理见:
https://blog.csdn.net/xyz599/article/details/53759527
4. Cholesky分解的原理是什么?
Pass,整理中。
5. Eigen编程实例
编程实现***A***为100X100随机矩阵时,用QR和Cholesky分解求x。
输出结果:
Cholesky分解效率很高。