题目描述:

给定一个线性方程组,对其求解
输入格式:第一行,一个正整数n第二至n+1行,每行n+1个整数,为a1,a2…am和b,代表一组方程
输出格式:共n行,每行一个数,第i行为xi(保留2位小数)如果不存在唯一解,在第一行输出”No Solution”.
输入样例#1:
3
1 3 4 5
1 4 7 3
9 3 2 2
输出样例#1:
-0.97
5.18
-2.39
说明:1<=n<=100,|ai|<=10^ 4,|b|<=10^4。

高斯消元法详解:

[这位讲的比较详细:大家可以看一看]
http://t.csdn.cn/mOYlz

伪代码

第一步:两个for 循环输入每行系数以及常数。再加一个for循环验证是否有唯一解(当任意一个第i行第i列元素为0时,有无穷个解)。若没有唯一解,则输出“No Solution”结束计算,否则,进入第二步。
第二步:从第 i ( i 为未知量的个数)个系数开始,依次对后面行的第i个系数进行消元(两行元素互相乘另一行第i 个元素的值并进行相减)。使得每行(举例为第i行)的第i个元素之前都为0。再加一个for循环验证是否有唯一解(当任意一个第i行第i列元素为0时,有无穷个解)。若没有唯一解,则输出“No Solution”结束计算,否则,进入第三步。
第三步:从二维数组最后一行算起,第i个未知量的值都等于每行最后一个常数减去这个未知量后面所有想的值,再除这一项的系数(a[i][i])。进入第四步。
第四步:输出所有未知量的解。

代码实现

#include<stdio.h>
#include<math.h>float MIN=1e-8;
float ans[100];
int a[100][101];//系数以及常数的数组a[1][1]*X1+a[1][2]*X2+...+a[1][n]*Xn=a[1][n+1] int  isUniqueAns(int a[100][101],int i);
int  init(int a[100][101],int i,int j);
void printfResult(float ans[100],int i);
void getResult(int a[100][101],float ans[100],int i);
void mul(int num,int a[101],int j);
void offset(int a[101],int b[100],int i,int j);
int  Guss(int a[100][101],int i,int j);int main(){int numberOfUnknown;//未知量的数量 printf("请输入线性方程组未知数数量:");scanf("%d",&numberOfUnknown);int init_f=init(a,numberOfUnknown,numberOfUnknown+1);if(init_f==0){return 0;}int Guss_f=Guss(a,numberOfUnknown,numberOfUnknown+1);if(Guss_f==0){return 0;}return 0;
}int isUniqueAns(int a[100][101],int i){for(int m=1;m<=i;m++){if(abs(a[m][m])<MIN){printf("No Solution");return 0;}}return 1;
}int init(int a[100][101],int i,int j){//输入所有的系数和常数 for(int m=1;m<=i;m++){printf("请输入第%d行系数与常数:",m);for(int n=1;n<=j;n++){scanf("%d",&a[m][n]);}}if(isUniqueAns(a,i)==0){return 0;}return 1;
}void printfResult(float ans[100],int i){//结果输出 for(int m=1;m<i;m++){printf("%.2f\n",ans[m]);}printf("%.2f",ans[i]);
}void getResult(int a[100][101],float ans[100],int i){for(int m=i;m>=1;m--){//从最后一行开始向前算出每个未知数的值 float sum=0;//初始值为第m行的常数 for(int n=i+1;n>m;n--){//第m行其他数换为常数 sum+=a[m][n]*ans[n];}ans[m]=(a[m][i+1]-sum)/a[m][m];//结合系数进行计算 }printfResult(ans,i);
}void mul(int num,int a[101],int j){//将一个一维数组进行乘某个整数的变换 for(int m=1;m<=j;m++){a[m]=num*a[m];}
}void offset(int a[101],int b[101],int i,int j){//两个一维数组相减,前者减去后者的变换 for(int m=i;m<=j;m++){a[m]=a[m]-b[m];}
}int Guss(int a[100][101],int i,int j){//高斯消元法 for(int m=1;m<i;m++){//第m行,表示第m个未知数的消元 for(int n=m+1;n<=i;n++){//第m+1行,表示要进行变换的那一行 //将两行的数字进行乘mul(a[m][m],a[n],j);mul(a[n][m],a[m],j);//两行抵消offset(a[n],a[m],m,j);} }if(isUniqueAns(a,i)==0){//再次判断是否有解 return 0;}getResult(a,ans,i);return 1;
}

运行结果截图



代码分析

时间复杂度:O(n^3)
空间复杂度:O(1)
[时间复杂度和空间复杂度的详解请看这位大神]
http://t.csdn.cn/59zHc

高斯消元法求解线性方程组——C语言实现相关推荐

  1. 高斯消元法解矩阵方程c语言,c++高斯消元法求解线性方程组

    //高斯消元法求解方程组 #include #include using namespace std; #define MaxNum 10 int array[MaxNum][MaxNum] = { ...

  2. 课程设计—C++实现高斯消元法求解线性方程组Ax=b(附源码)

    (一)需求和规格说明 输入是 N(N<256) 元线性方程组 Ax=B, 输出是方程组的解,也可能无解或有多组解.可以用高斯消去法求解,也可以采用其它方法. 要求给出线性方程组的矩阵,能够输出线 ...

  3. C++ 数学与算法系列之高斯消元法求解线性方程组

    1. 前言 什么是消元法? 消元法是指将多个方程式组成的方程组中的若干个变量通过有限次地变换,消去方程式中的变量,通过简化方程式,从而获取结果的一种解题方法. 消元法主要有代入消元法.加减消元法.整体 ...

  4. 高斯消元法求解线性方程组(附python代码)

    输入:a是m×n的系数矩阵,b是m×1的(列)向量. 输出:方程组的通解. 用高斯消元法(行化简法)解线性方程组步骤 1.构造方程组的增广矩阵 2.从最左边列往右,使用行化简算法把增广矩阵化为阶梯形, ...

  5. c++用类实现高斯消元法求解线性方程组的解_高斯消元

    高斯消元 众所周知,高斯消元是线性代数中重要的一课.通过矩阵来解线性方程组.高斯消元最大的用途就是用来解多元一次方程组. 前置技能 1.线性方程组 线性方程组是各个方程关于未知量均为一次的方程组(例如 ...

  6. MATLAB 用高斯消元法求解线性方程组

    %MATLAB程序 %这是C语言的思考方式,并没有完全利用MATLAB语言的优势.function[x]=myGauss(A,b) [m,n]=size(A); mb=size(b); if m~=m ...

  7. 高斯消元法 求解线性方程组

    小辣鸡第一次发文,欢迎大家指正!

  8. 计算方法——C语言实现——全主元高斯消元法求解非线性方程

    最近在上计算方法这门课,要求是用MATLAB做练习题,但是我觉得C语言也很棒棒啊~ 题目: 高斯消元法是线性方程组的直接解法,可能会造成很大的失真,尤其是高斯顺序消元法,对方法进行改进,使每次都选取绝 ...

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

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

最新文章

  1. java 定義json并賦值_java是值传递还是引用传递?
  2. springmvc-配置文件
  3. 信息收集——Web目录扫描
  4. 驻定相位原理(POSP)以及线性调频信号的频谱
  5. 前端学习(1351)模板引擎
  6. 文件已经上传到服务器翻译,服务器接受上传的优化 翻译+源码分析
  7. 云原生,智慧营销破圈新利器
  8. jQuery中each的用法之退出循环和结束本次循环
  9. 二叉树——求先序排列(洛谷 P1030)
  10. Ubuntu 上安装 Node.js
  11. mysql group by rowid_MySQL里面的group by问题浅析
  12. shell脚本的逻辑判断
  13. JS特效--字体逐渐浮现效果
  14. (最新)天津各片区,各小区,各学校 对应关系,持续更新
  15. 微端更新慢、甚至不更新是怎么回事?
  16. 孙陶然:三段式工作法是非常有效的聪明工作方法
  17. 腾讯通 admin.php,配置RTX腾讯通升级使用SQL Server数据库
  18. 知网复制太麻烦了?试试这个方法
  19. python网络编程 赵宏_2018年Python爱好者社区历史文章合集(作者篇)
  20. Vue3表单验证 单个验证 统一验证 自定验证

热门文章

  1. PLSQL如何保存用户名和密码
  2. windows文件同步工具
  3. 企业视觉识别系统(vi)的设计过程
  4. Proteus8.9 VSM Studio Keil编译器仿真AT89C51RD2系列018_lcd12864竖屏
  5. qemu中的新版vga仿真
  6. canvas 动态镂空
  7. RK3399+FPGA+MIPI 方案细节之subLVDS to MIPI处理
  8. 基于hexo搭建博客后更换主题butterfly
  9. 谁在押注“脱口秀直播带货”?
  10. IP编址(小白入门篇)