使用C++ Eigen库求解线性方程组Ax=b

Eigen(http://eigen.tuxfamily.org)是常用的 C++ 矩阵运算库,具有很高的运算效率。大部分 需要在 C++ 中使用矩阵运算的库,都会选用 Eigen 作为基本代数库,例如 Google Tensorflow,Google Ceres,GTSAM 等。本次编程实现***A***为100X100随机矩阵时,用QR和Cholesky分解求x。同时总结了一些有关线性方程组数值解法的原理。

目录

    • 1. 在什么条件下,x有解且唯一?
    • 2. 高斯消元法的原理是什么?
    • 3. QR分解的原理是什么?
    • 4. Cholesky分解的原理是什么?
    • 5. Eigen编程实例

正文:

1. 在什么条件下,x有解且唯一?

使用C++ Eigen库求解线性方程组Ax=b_第1张图片

2. 高斯消元法的原理是什么?

高斯消元主要用来求解线性方程组,也可以求解矩阵的秩,矩阵的逆。其实高斯消元的过程就是手算解方程组的过程:加减消元,消去未知数,如果有多个未知数,就一直消去,直到得到类似kx=b(k和b为常数,x为未知数)的式子,就可以求解出未知数x,然后我们回代,依次求解出各个未知数的值,就解完了方程组。
换句话说,分两步:

  1. 加减消元
  2. 回代求未知数值

以下有高斯消元C++模版:
https://blog.csdn.net/pengwill97/article/details/77200372

3. QR分解的原理是什么?

QR 分解是三种将矩阵分解的方式之一。这种方式,把矩阵分解成一个正交矩阵Q与一个上三角矩阵R的积。
使用C++ Eigen库求解线性方程组Ax=b_第2张图片

对于Ax=b,
直接求A的逆有时过于复杂,因此使用QR分解算法:
使用C++ Eigen库求解线性方程组Ax=b_第3张图片
详细定理见:
https://blog.csdn.net/xyz599/article/details/53759527

4. Cholesky分解的原理是什么?

Pass,整理中。

5. Eigen编程实例

编程实现***A***为100X100随机矩阵时,用QR和Cholesky分解求x。
使用C++ Eigen库求解线性方程组Ax=b_第4张图片
输出结果:
Cholesky分解效率很高。
在这里插入图片描述

你可能感兴趣的:(C++,数学基础,线性代数)