1. 高斯消去法算法原理
消去法是求解线性方程组的一种方法,它对增广矩阵进行初等行变换得到一个可回代求解的矩阵,然后再进行回代求得一组解向量。
高斯列主元法在使用初等行变换消元之前增加了选主元的过程。为减小计算机计算过程中的舍入误差,选取绝对值大的数作为主元素,再使用初等行变换将方程组转化为一个同解的上三角方程组,最后通过回代法求解该三角形方程组。
例:
方程组的系数矩阵为:
等式右端的常数列向量为:
那么这个方程组的增广矩阵就是:
高斯列主元消去法第一步先选主元,即第一列中绝对值最大数所在的行,将这一行和第一行交换:
再以第一行作为工具行处理以下几行:
重复该步骤,直到把系数矩阵化成一个下三角矩阵全0的矩阵:
这样就可以进行回代求解了。
高斯列主元法的优势在于它有一个选主元的过程,这样做可以避免程序在进行消去操作时选取的主元素为0的情况,也减小了计算的舍入误差,从而提高了程序的普适性和结果的准确性。
2.高斯消去法的C++代码
从以上的讲解中中我们可以知道,高斯消去法需要输入一个系数矩阵和一个常数列向量,并且系数矩阵应该是方阵,系数矩阵的行数和常数列向量的行数相等,最后返回一个行数相等的解向量。
那么函数格式就可以这样写:
matrix* magauss(matrix *A, matrix *b)
传入两个matrix类型的指针,返回值为一个matrix类型的指针,关于矩阵的定义,请参照博客:矩阵的相关操作——C++实现
再根据算法原理和输入要求,编写主程序:
//高斯列主元法
matrix* magauss(matrix *A, matrix *b) {
int row = A->row;
int col = A->col;
assert(row == col);
assert(row == b->