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->row);for (int c = 0; c < col - 1; ++c) {//选主元int MainRow = c;for (int r = c; r < row; ++r) {if (abs(A->M[r * col + c]) > abs(A->M[MainRow * col + c])) {MainRow = r;}}if (A->M[MainRow * col + c] == 0) {continue;}if (MainRow != c) {SwapRow(A, c, MainRow);SwapRow(b, c, MainRow);}//消元for (int r = c + 1; r < row; ++r) {value k = A->M[r * col + c] / A->M[c * col + c] ;ConversRow(A, k, c, r, c, col - 1);b->M[r] = b->M[r] - k * b->M[c];}}printMatrix(A);printMatrix(b);//回代matrix *x;x = (matrix *)malloc(sizeof(Matrix));InitialMatrix(0, x, row, 1);x->M[row - 1] = b->M[row - 1] / A->M[(row - 1)*col + col - 1];for (int r = row - 2; r >= 0; --r) {x->M[r] = b->M[r];for (int c = col - 1; c > r; --c) {            x->M[r] = x->M[r] - x->M[c] * A->M[r * col + c];}x->M[r] = x->M[r] / A->M[r * col + r];}return x;
}

其中,SwapRow和ConversRow函数的功能分别为交换行和进行初等行变换,函数的输入格式为:

void ConversRow(matrix *A, value k, int row1, int row2, int start, int end)
void SwapRow(matrix *A, int row1, int row2)

函数的书写特别简单我就不贴了(主要是函数的输入格式写的丑,就不献丑了)。其他的函数在矩阵的操作中有讲,就不说了。
算法中唯一需要注意的地方就是选主元时可能会出现主元素为0的情况,这个时候只需要跳过当前循环进入下一次循环即可。

高斯列主元消去法——C实现相关推荐

  1. 高斯列主元消去法解线性方程组

    最近在看惯导的东西,然后想要用C++解惯导控制方程,然后就重头把C++解方程组这方面的知识回顾了一下,首先就是高斯列主元消去法,这个方法还算实用,这里以3*3的矩阵为例,里面注释很详细,各位小白可以参 ...

  2. 计算方法实验(五):高斯列主元消去法

    Gauss列主元消去法数学原理 高斯(Gauss)列主元消去法:对给定的nnn阶线性方程组Ax=bAx = bAx=b,首先进行列主元消元过程,然后进行回代过程,最后得到解或确定该线性方程组是奇异的. ...

  3. 高斯列元素消去法c语言,【大神在哪里】高斯-列主元消去法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include main() { int k,i,j,my; int n=3; double m=1e-8,mx; double a[ ...

  4. matlab顺序消元法例题,求助,关于用matlab解列主元消去法的题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给定一个n阶线性方程组Ax=b,其中A的元素aij(i,j,=1,-,n)与阶数为:aij=(i+j-1)2, n=3,4,5,-,9; 这是我所编的程序 ...

  5. 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)

    Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...

  6. 数值分析原理课程实验——(高斯)Gauss列主元消去法

    高斯(Gauss)列主元消去法 方法概要 待求问题 程序流程 程序代码 /*Matlab函数 function Result = Gauss(n, A, b)for k = 1:n-1max = ab ...

  7. 列主元消去法例题详解_高斯列主元消元法解方程组的步骤

    高斯列主元消元法求解线性方程组 AX=b 的简要步骤                                      ...

  8. 解线性方程组的python实现(1)——高斯主元消去法

    解线性方程组的python实现1--高斯主元消去法 1. 高斯(顺序)主元消去法 1.1 消去过程 1.2 回代过程求解 实现代码 2 列主元消去法 实现代码 3 高斯-约旦(Gauss-Jordan ...

  9. 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法

    对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...

最新文章

  1. python多线程爬虫实例-python多线程爬虫实例讲解
  2. C#3.0扩展方法[转]
  3. SAP ABAP 平台新的编程模型
  4. 工作经验--他人经验
  5. 在iOS项目中引入MVVM
  6. 如何查看注解实现_SpringBoot的注解@ConditonOnClass注解是如何实现的?
  7. windows7系统iis安装不了应该怎么办
  8. HMI设计RGB配色表
  9. git官网下载太慢解决方法
  10. 百宝云数据防破解分析
  11. 博物馆 库房rfid_博物馆RFID综合管理解决方案
  12. JavaEE | 集合2之Map
  13. phpAdmin导入sql文件太大
  14. IDEA中一直indexing问题
  15. win10计算机组共享的打印机,Win10系统局域网共享打印机设置 共享大地Win10打印机的方法...
  16. 关于版本号的基本介绍
  17. 面试再问ThreadLocal,别说你不会!
  18. 携程是如何做React Native优化的
  19. python随机森林筛选变量_用随机森林分类器和GBDT进行特征筛选
  20. dell电脑java下载_【亲测不管用】【DELL安装系统的坑】亲测UEFI启动模式的电脑安装Win10和Ubuntu双系统(dell笔记本和hp笔记本)...

热门文章

  1. html背景视频模糊效果,视频背景如何模糊效果 ae视频模糊效果怎么做
  2. eset nod32 最新升级ID(2009年2月3日更新)
  3. 从 SPA 到 PWA:Web App的下一站在哪?
  4. 【iMessage苹果相册推信息推】 Apple DeviceToken生成的装备上的多个利用程序。 public void subscribe(int clientId, Looper looper
  5. Stream流使用详解
  6. 滴水逆向三期实践10:动态链接库
  7. 无需代码,极简5步大屏可视化教程,3分钟就能轻松做出酷炫报表
  8. 【GPLT】L1-057 PTA使我精神焕发
  9. Web目录文件扫描程序(python)
  10. 超好用的鼠标增强软件:Smooze for Mac