下述所有内容都是建立在线性方程组有唯一解的情况

高斯消去法主要用来求解线性方程组比如求解下图中的四维线性方程组

列主元高斯消去法的C++实现

该方程组写成行列式形式如下图所示

列主元高斯消去法的C++实现

首先将行列式变为阶梯行列式,以第一行为例:

第一行同时除以列主元高斯消去法的C++实现,然后分别乘以列主元高斯消去法的C++实现列主元高斯消去法的C++实现列主元高斯消去法的C++实现并加到第2,3,4行,第一列的列向量中便只有列主元高斯消去法的C++实现为1列主元高斯消去法的C++实现下所有元素为0。

同理对第二行除以列主元高斯消去法的C++实现,使第二列列主元高斯消去法的C++实现下的元素皆为0,依次类推得到如下行列式。

列主元高斯消去法的C++实现

通过回带便可以得到解向量也就是N为线性方程组的唯一解。

 但是这种方法存在一个问题,如果A方阵中对角线中存在为0的元素,那么在变化阶梯行列式的过程中会出现分母为零的情况,导致计算没有意义。因此列主元高斯消去便成为一个更好的选择。

列主元高斯消去法与普通方法唯一的不同在于普通方法需要使A方阵化为上三角阵且对角线元素为1,而列主元高斯消去A方阵的特点有:

  1. 每增加一行,该行0元素项比上一行多一项;
  2. 每行中化为1的项为该行绝对值最大项(不是初始值);
  3. 每一行至少有一项为1,且存在一项为1的其下所有行该列元素皆为0;

比如下述形式为列主元高斯消去的一种最终形式

列主元高斯消去法的C++实现

列主元高斯消去的回带也是由最后一行开始逐列回带得到解向量。

上述就是列主元高斯消去的过程,具体代码在笔者github中。

https://github.com/DevoutPrayer/GaussElimination

相关文章: