其实列主元高斯消去法无非就是比之前的高斯消去法多了一个判断主元这个步骤,但是里面还是有一些小细节的,比如:你要求一个3*4的增广矩阵,你的主元只需要选两次,第一次是在第一列的0.1.2里面选,第二次就会在第二列的1.2里面选,这里面需要细心一点不然会“连续互换”。其实代码实现也不会太难(本人能力有限,只会用拍照截图来给大家看一道题,大家见谅)。

下面给大家看一道例题帮助大家理解一下列主元高斯消去法:

当然这道题也是非常简单的,但是计算机要解决的话可谓是难上加难,咱们先看下过程分析:

当然过程很简单,下面咱们来看下代码:

​​#include<stdio.h>    //解线性方程组//
#include<math.h>
#define n 3         //n可以自行改变,可以求任意阶的方程组//
int findmain(double a[n][n+1],int l)
{double max;            //定义max为去主元做准备// int k;                 //定义主元所在的行数// k=l;max=fabs(a[l][l]);     //先将第l行l列的元素定位主元,为下面的比大小做准备// for(int i=l;i<n-1;i++){if(max<fabs(a[i+1][i])){max=fabs(a[i+1][i]);k=i+1;      //谁是主元就让k指向谁// }}return k;        //最后返回主元所在的行数//
}
void f(double a[n][n+1])
{double b[n]={0};        //存结果的数组// int p=0,m=0;         //m是次数,p是找主元的行数// double count=0,e=0,q=0;          //e是交换中介,q是保存数组元素,count是计算x的结果用到的值//  while(1){p=findmain(a,m);                 //找主元,找n-1次//for(int l=0;l<n+1;l++)          //将主元行移动到首位(这里的首位随着m的变换而变化)// {e=a[p][l];a[p][l]=a[m][l];a[m][l]=e;}for(int i=m+1;i<n;i++){q=a[i][m];              //保存第i行第m个数要不然后面的元素不会被改变了// for(int j=0;j<n+1;j++){a[i][j]=a[i][j]-(a[m][j]*q/a[m][m]);  //线性代数里面正常变换倒三角// /**********测试*********/ //printf("a[%d][%d]=a[%d][%d]-(a[%d][%d]*a[%d][%d]/a[%d][%d])\n",i,j,i,j,m,j,i,m,m,m);   //printf("%.2lf=%.2lf-(%.2lf*%.2lf/%.2lf)\n",a[i][j],a[i][j],a[m][j],a[i][m],a[m][m]);}}m++;                     //m保持向后移动,同时也是矩阵变换次数//                printf("您的第%d次变换后的矩阵为:\n",m);for(int i=0;i<n;i++)           //每次都可以看见当前矩阵情况// {for(int j=0;j<n+1;j++){printf("%-15lf",a[i][j]);}printf("\n");}if(m==n-1)                                //循环结束条件// break;}int flag=0,w;                              //循环常量,非常重要// b[n-1]=a[n-1][n]/a[n-1][n-1];             //先存xn,后面就会计算方便一点// for(int i=n-2;i>=0;i--)                  //只需要循环n-2次,因为已经又了b[n-1]// {flag++;           //循环的次数// w=n-1;            //循环常量// for(int j=flag;j>0;j--)         //根据flag的变化而循环// {count=b[w]*a[i][w]+count;/**********测试*************/ /*printf("b[%d]*a[%d][%d]\n",w,i,w);printf("%lf*%lf=%lf\n",b[w],a[i][w],b[w]*a[i][w]);printf("%d.count=%lf\n",flag,count);*/w--;      //使a的取值往前走// }b[i]=(a[i][n]-count)/a[i][i];count=0;     //count一定要清0不然的话后面没法计算了(上一次的count就会带到下一次运算当中去)// //   printf("%lf=(%lf-%lf)/%lf\n\n",b[i],a[i][n],count,a[i][i]);} printf("\n该方程组的解是:(");    //正常输出就行// for(int i=0;i<n;i++){printf("%lf ",b[i]);}printf(")\n");
}
int main()
{double a[n][n+1];printf("请输入您的%d*%d阶的增广矩阵\n",n,n+1); for(int i=0;i<n;i++){for(int j=0;j<n+1;j++){scanf("%lf",&a[i][j]);}}printf("您的初始矩阵为:\n");for(int i=0;i<n;i++){for(int j=0;j<n+1;j++){printf("%-15lf",a[i][j]);}printf("\n");}f(a);return 0;
}

当然给大家附上代码运行结果(大家有什么不会可以在讨论区留言,欢迎大家):

列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)相关推荐

  1. C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛

    目录

  2. 列主元高斯消去法解线性方程组——C语言实现

    原理 高斯消去法 的基本原理就是用初等变换将用行的,逐次消去未知数的方法,把原来的方程组,化为与其等价的上三角方程组. 设有线性方程Ax=B\boldsymbol{A}\boldsymbol{x}=\ ...

  3. C语言实现高斯消去法和列主元高斯消去法

    本篇主要实现高斯消去法和列主元高斯消去法 高斯消去法和列主元高斯消去法都是为了解线性方程组的有效方法,但列主元高斯消去法是高斯消去法的一个优化版本,强烈建议后面许多地方用到解方程组时,都用列主元高斯消 ...

  4. 【计算方法】#01 高斯消去法和列主元高斯消去法的原理简介及C++实现

    [计算方法]#01 高斯消去法和列主元高斯消去法的原理简介及C++实现 1. 高斯消去法 1.1 算法的适用条件 1.2 算法步骤和公式 1.3 算法复杂度分析 1.4 算法的C++实现 2 列主元高 ...

  5. 【数值分析】顺序高斯消去法和列主元高斯消去法的三个主要不同点

    概要 求解线性方程组 A x = b Ax=b Ax=b 可以使用[顺序高斯消去法]和[列主元高斯消去法],本文试列举二者的三个主要不同点. 不同点 1. 使用条件

  6. 列主元高斯消去法数学原理及超级纯手工Python实现

    一.引言 从高斯消去法,我们看到还是有缺陷,高斯消去法中,当对角元素=0时,消去无法进行,当对角元素很小的时候,导致其他它元素数量级严重增长和舍入误差扩散1,使结果不可靠.因此引出了列主元高斯消去法. ...

  7. 列主元高斯消去法Matlab实现

    列主元高斯消去法解线性方程组 在求解线性方程组中,可以使用列主元高斯消去法. 步骤如下: 现有方程组:Ax = b (1)提取出方程组的增广矩阵 A = [A b]: (2)进行n-1次消元,分别对应 ...

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

    下述所有内容都是建立在线性方程组有唯一解的情况 高斯消去法主要用来求解线性方程组比如求解下图中的四维线性方程组 该方程组写成行列式形式如下图所示 首先将行列式变为阶梯行列式,以第一行为例: 第一行同时 ...

  9. 关于列主元高斯消去法的matlab实现

    function x  = nagauss1(a,b ,flag) %用途:列主元高斯消去法解线性方程组ax=b % A:系数矩阵,b:右端列变量 % flag:若为0,则显示中间过程,否则不显示,默 ...

最新文章

  1. git pull 报错:权限不够 Permission denied (publickey)
  2. 如何在Chatbot中应用深度学习
  3. 数据中心网络组网的不同方案
  4. web异步开发——json
  5. GDCM:gdcm::DefinedTerms的测试程序
  6. SQL SERVER 高效存储过程分页(Max/Min方法)
  7. 你猜一个 TCP 连接上面能发多少个 HTTP 请求
  8. 用python画漂亮图-零基础用 Python 画图表,让你的论文更美观
  9. 【面试宝典】HR最喜欢的程序员简历模板,最佳建议篇
  10. 新华书店牵手阿里云 要用云计算打造“智慧悦读”
  11. 计算机老是不断重启是什么原因,电脑一直自动重启是什么原因?(盘点电脑老是自动重启的原因!)...
  12. 百度信息流投放效果不稳定,意图词要怎么筛选,先测试词包还是先测试创意好?
  13. 【黑客编程】手把手教你编写POC
  14. 李勇强seo,李勇强SEO
  15. 程序员缓解职业病的秘方
  16. 【生信】第一二三代测序技术原理的理解
  17. 为什么signed char的范围是-128~127
  18. 高亮显示用户键盘输入(kbd)
  19. GICv3软件overview手册之GICv3基本功能(4)
  20. 有GIS有意思︱讲述地图的故事

热门文章

  1. 【Mind】角膜上皮脱落康复记录
  2. MongoDB的学习-安装与springboot的整合
  3. 软件测试行情前景,你可以做测试多久?到底能干到多少岁?
  4. Cesium 注册及移除事件
  5. 自己私藏的一篇:和现在做网络营销、咨询公司业务有关 和技术无关 和CRM有点关系 可能给网络社区和网络营销从业者有启发
  6. 新手使用Docker教程
  7. 【N32G457 】基于RT-Thread和N32G457 数码管时钟
  8. 系统如何自动识别短信验证码
  9. java jar包资源文件_深入jar包:从jar包中读取资源文件
  10. telnet ip地址报接口23连接失败。