最近在学数值分析,正好学到求解线性方程组。就自己动手简单实现了一下。关于本算法的原理可以在《数值分析》第5版(李庆扬编),对应于该书的P145页,详细讲解了公式。因本人时间有限,暂时不详细编辑公式,等空闲了再来重新补充。

简要的说明下该算法的应用吧,高斯消元法在线性代数那门课肯定学过了,对于一般简单的3、4阶线性方程组,还可以进行纸上的笔运算,但是当数目过多,算起来就比较吃力了,所以借助于计算机实现。如果很多的数学软件里都有矩阵的求解的函数,如mathematic和matlab,因本人对这些软件不熟悉,所以也没去去尝试使用。

对于非奇异矩阵并且主对角线上的元素不为0。就可以用高斯消元法来求解。

我直接用简单的C++编程方式,有点类C风格,并没有运用C++的奇淫技巧,由于本人技术不成熟,时间有限,就暂时用简单的实现。等空闲了,一定把奇淫技巧运用上去。

先贴代码吧!

#include

using namespace std;

const int n = 3;

void gaussin(double a[n][n], double b[n])

{

//判断能否用高斯消元法,如果矩阵主对角线上有0元素存在是不能用的

for (int i = 0; i < n; i++)

if (a[i][i] == 0)

{

cout << "can't use gaussin meathod" << endl;

return;

}

int i, j, k;

double c[n]; //存储初等行变换的系数,用于行的相减

//消元的整个过程如下,总共n-1次消元过程。

for (k = 0; k < n - 1; k++)

{

//求出第K次初等行变换的系数

for (i = k + 1; i < n; i++)

c[i] = a[i][k] / a[k][k];

//第K次的消元计算

for (i = k + 1; i < n; i++)

{

for (j = 0; j < n; j++)

{

a[i][j] = a[i][j] - c[i] * a[k][j];

}

b[i] = b[i] - c[i] * b[k];

}

}

//解的存储数组

double x[n];

//先计算出最后一个未知数;

x[n - 1] = b[n - 1] / a[n - 1][n - 1];

//求出每个未知数的值

for (i = n - 2; i >= 0; i--)

{

double sum = 0;

for (j = i + 1; j < n; j++)

{

sum += a[i][j] * x[j];

}

x[i] = (b[i] - sum) / a[i][i];

}

cout << " the solution of the equations is:" << endl;

cout << endl;

for (i = 0; i < n; i++)

cout <

}

1.  我们进行判断主对角线元素是否有0值,如果有0值就不能用这个方法了。因为这个简单的高斯消元法并没有进行行列交换,所以主队角线不能为0,否则那个行变换的大小就不能得到(除数为0.undefined).   2.为初等行变换计算变换大小,存储在数组C[N] 3.进行消元过程。 4.外循环继续第二次重复(2)(3)步骤,直到K=N-1次为止。  5.进行解的倒推。                                                                                                               分析一下该算法的不足之处吧,由于我本人能力有限,对于C++的特性还不是很熟悉

1 由于这个数组传参问题就是我的弱项,我的想法是由用户指定任意大小的数组,但这样就要多一个参数。

2 本人只是做了个double类型的矩阵运算。我的思路是可以将这些修改成函数模板,用模板支持各种数据类型的矩阵。如果矩阵是整数类型的,里面的运算可能会产生double型,进行转换赋值会丢失精度。而且一般来说double型的矩阵计算,由于机器运算的原因,会有计算机产生的误差,所以改成模板,似乎没有什么应用。         3.对于空间和性能分析,该算法的局限性很大,首先由于该算法不能对主对角线上为0的元素进行计算,所以局限性很大,关于改进版的算法,接下来我会陆续编写求解方法。其次,对于该算法,我的实现过程用了2个存储n维数组来保存值,对其实可以存储在算矩阵本身,因为消元过程完成后,那个空间基不会再使用了,不加上时间的消耗 ,并不是一个理想的算法,接下里我会改进此算法。

“`

对后续结果产生影响,按理应该能直接存储在矩阵中。   时间分析:该算法时间复杂度是O(N^3),所以运算很大,int main()

{

double a[3][3] = { 1,1,1,0,4,-1,2,-2,1 };

double b[3] = { 6,5,1}

gaussin(a, b);

return 0;

}

“`           这是测试代码,结果运算结果是1,2,3。我时间有限,没有进行很多测试,希望大家能与我多探讨,相互学习和促进,做更多的分析和讨论!如有错误和不适之处,请各位指出!

c语言消去法解线性方程组,高斯消元法解线性方程组(C++实现)相关推荐

  1. matlab用高斯消元法解线性方程组,用matlab利用高斯消元法求解线性方程组

    用matlab利用高斯消元法求解线性方程组Tag内容描述: 1.用C语言编写软件完成以下任务:请用高斯列主元消元法解下列线性方程组:方法说明(以4阶为例):第1步消元在增广矩阵(A,b)第一列中找到绝 ...

  2. 高斯消元法解线性方程组(C++实现)

    高斯消元法解线性方程组(C++实现) #include<cstdio> #include<iostream> using namespace std; void gaosi(d ...

  3. 高斯消元法线性方程组python_高斯消元法解线性方程组mpi并行

    一,高斯消元法简介 将线性方程组写成矩阵的形式,通过两行交换或者某一行加另一行的k倍,构造上三角阵,跟据扩展矩阵秩的关系判断解的个数. 二,hpl标准(一个高性能计算的评测标准,可跳过) HPL是针对 ...

  4. 计算机数值方法:高斯消元法解线性方程组

    题目 用高斯消元法解下列线性方程组(要求按三位小数计算) 高斯消元法简介 高斯消元法(Gaussian elimination)是求解线性方阵组的一种算法,它也可用来求矩阵的秩,以及求可逆方阵的逆矩阵 ...

  5. 计算方法Gauss-Jordan消去法求线性方程组的解

    function x=GaussJordan(A,b) % 用Gauss-Jordan消去法求线性方程组的解 % A为系数矩阵(要求解惟一,则必须为满秩方阵 n*n),b为右值 n*1 % x为所求的 ...

  6. 计算方法LU分解c语言程序解线性方程组,LU分解求线性方程组的解

    LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...

  7. 用列主元高斯(Gauss)消元法求n阶线性方程组的解(python)

    (一)目的 通过设计.编制.调试2~3个求n阶线性方程组数值解的程序,加深对其数值计算方法及有关的基础理论知识的理解. (二)要求 用编程语言实现用高斯(Gauss)消元法求n阶线性方程组的解.用列主 ...

  8. 线性代数:第三章 矩阵的初等变换与线性方程组(2)线性方程组的解 初等方阵

    第三节 线性方程组的解 一. 数学概念 根据矩阵的乘法,可以将线性方程组写成矩阵形式. 1. n元齐次线性方程组  : 2. n元非齐次线性方程组  : 3. 称A为方程组的系数矩阵,B=(A,b)为 ...

  9. 用秩讨论线性方程组的解/三个平面的位置关系

    用秩讨论三个平面的位置关系/线性方程组的解 推荐视频:完整梳理空间平面位置关系与线性方程组解的判定 线性方程组 下图中三个方程对应三个平面 线性方程组的增广矩阵形式 系数矩阵的一个行向量为其对应平面的 ...

最新文章

  1. Subversion基本操作
  2. Python 面向对象封装和继承
  3. mutex的加锁与解锁问题
  4. Linux centosVMware Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl
  5. [SIR数据集实验][2]Java类数据集相应工具使用的小经验
  6. 祝福!微软 46 周年生日快乐!
  7. Centos和UBUNTU之争
  8. javaweb(02) JavaScript基础知识
  9. 网络粘包解包问题杂谈
  10. 前端接收到的Url参数有中文乱码
  11. python右对齐函数_Python这68个内置函数,建议你吃透!
  12. 解决iPhone、iPad 或 iPod touch 无法连接Wi-Fi网络问题
  13. 【语谱图】基于matlab语音信号语谱图【含Matlab源码 137期】
  14. 上海少儿社保参保问题
  15. 利用python打乱xlsx表格
  16. 屌丝Cent OS服务解密
  17. Android简单的编写一个txt阅读器(没有处理字符编码),适用于新手学习
  18. keil5(MDK5)配置S3C2440裸机开发调试环境
  19. 一种具有17路可调PWM直流电机的串口遥控机器人
  20. springboot在Gradle7以上版本不识别compile解决方案

热门文章

  1. HDU6268 Master of Subgraph
  2. 多线程资源共享之同步锁
  3. Software--Architecture--SOA Factory
  4. c#后的完整cookie
  5. ibatis 3.x 实例
  6. [转载] python字符串转有符号数字_在python中将字符串转换为8位带符号整数
  7. [转载] python numpy 子数组_Python学习笔记3:Numpy入门
  8. [转载] Java默认构造方法
  9. 二、将mysql用作一个简单的计算器
  10. 使用jsPlumb插件实现动态连线功能