在cpp所在的文件夹中创建一个txt文件,并且将条件这个输入:%矩阵行数9%矩阵列数9%矩阵元素31 -13 0 0 0 -10 0 0 0-13 35 -9 0 -11 0 0 0 00 -9 31 -10 0 0 0 0 00 0 -10 79 -30 0 0 0 -90 0 0 -30 57 -7 0 -5 00 0 0 0 -7 47 -30 0 00 0 0 0 0 -30 41 0 00 0 0 0 0 -5 0 0 27 -20 0 0 -9 0 0 0 -2 29 %对应的右侧的元素:-15 27 -23 0 -20 12 -7 7 10 #include#include#include#define R 50#define C 50using namespace std;float Mar[R][C];int InputToTxt(float a,float b);int sort(float a[],int n);void getGauss(float bk[],float num);float jidu(float a);int exchangeMar(int m,int curpos);int chude(int num,int curpos);float sum(float xx[],float yy[],int num);void solve(int curpos);float row,col;int main(void){FILE *stream;char msg[40]; float bb[R];stream=fopen("data.txt","r"); fseek(stream,0,SEEK_SET);fgets(msg,20,stream);printf("%s",msg);float a,b;fscanf(stream,"%f",&a);cout<<a<<endl;fseek(stream,2,1); fgets(msg,20,stream);printf("%s",msg);fscanf(stream,"%f",&b);cout<<b<<endl;row=a;col=b+1;fseek(stream,2,1); fgets(msg,20,stream); printf("%s",msg); for(int i=0;i<a;i++){for(int j=0;j<b;j++){fscanf(stream,"%f",&Mar[i][j]);cout<<Mar[i][j]<<" ";}cout<<endl;}fseek(stream,4,1);fgets(msg,40,stream);printf("%s",msg);for(int k=0;k<a;k++){ fscanf(stream,"%f",&bb[k]); cout<<bb[k]<<" ";};cout<<endl;//得到增广矩阵,并且将增广矩阵放到文件中去for(int ii=0;ii<a;ii++){Mar[ii][int(b)]=bb[ii];}fclose(stream);int curpos1=InputToTxt(a,b+1); //现在我要将里面的值进行交换 int curpos2=exchangeMar(0,curpos1); int curpos4=curpos2; //现在我要用第二行去消去第三行 for(int i5=1;i5<a-1;i5++){ curpos4=chude(i5,curpos4);} //现在要做的是解方程 solve(curpos4); return 0;}//将增广矩阵输入到文件中 int InputToTxt(float a,float b) {FILE *stream=fopen("data.txt","a+");char str[]="%增广矩阵:"; fprintf(stream,"%s",str); fprintf(stream,"\n");int curpos=ftell(stream);for(int i=0;i<a;i++){for(int j=0;j<b;j++){fprintf(stream,"%f",Mar[i][j]);fprintf(stream,"%c"," ");} fprintf(stream,"\n"); }fclose(stream);return curpos; } //从矩阵中获取一列的元素int sort(float a[],int n){float max=a[0];int k=0;for(int i=1;i<n;i++){ if(max<a[i]){max=a[i];k=i;}}//此时返回的是数组对应的元素的下标return k;}//这个函数是得到一个gauss变换的矩阵并且将这个矩阵在写文件上int exchangeMar(int m,int curpos){float G1[50][50];char ch; FILE *stream;stream=fopen("data.txt","r");fseek(stream,curpos,0);cout<<"增广矩阵"<<endl;cout<<"-----------------------------------------------------------"<<endl; for(int i=0;i<row;i++){for(int j=0;j<col;j++){ fscanf(stream,"%f",&G1[i][j]); fscanf(stream,"%c",&ch); cout<<G1[i][j]<<" ";}cout<<endl;}cout<<"-----------------------------------------------------------"<<endl;//我要第一列进行Gauss消去float ga=-G1[1][0]*1.0/G1[0][0]; for(int i1=0;i1<col;i1++){ if(G1[0][i1]!=0){ G1[1][i1]=G1[1][i1]+G1[0][i1]*ga;}}for(int i4=1;i4<row;i4++){if(G1[i4][0]!=0){ga=-G1[i4][0]*1.0/G1[0][0]; for(int j4=0;j4<col;j4++){ G1[i4][j4]=G1[i4][j4]+G1[0][j4]*ga;}}}cout<<"第一次初等行变换之后:"<<endl; cout<<"-------------------------------------------------------------"<<endl; for(int i2=0;i2<row;i2++){for(int j2=0;j2<col;j2++){ if(jidu(G1[i2][j2])<0.0001) { G1[i2][j2]=0; } cout<<G1[i2][j2]<<" ";}cout<<endl;}cout<<"--------------------------------------------------------------"<<endl;fclose(stream);//现在要将这个矩阵写入到文件中 stream=fopen("data.txt","a+");char msg[]="第一次初等行变换之后:";fprintf(stream,"%s",msg);fprintf(stream,"\n");int curpos1=ftell(stream);for(int i3=0;i3<row;i3++){for(int j3=0;j3<col;j3++){fprintf(stream,"%f",G1[i3][j3]);fprintf(stream,"%c"," ");}fprintf(stream,"\n");}fclose(stream);return curpos1;}float jidu(float a){if(a<0)return -a;elsereturn a;}int chude(int num,int curpos){//获取上一次的矩阵 float bk[50][50];char ch;FILE *stream=fopen("data.txt","r");fseek(stream,curpos,0);//获取第一次行变换之后的矩阵for(int i=0;i<row;i++){for(int j=0;j<col;j++){fscanf(stream,"%f",&bk[i][j]);fscanf(stream,"%c",&ch);}}fclose(stream);//用第二行去消去第三行float aa=-bk[num+1][num]*1.0/bk[num][num];for(int i1=0;i1<col;i1++){ if(bk[num][i1]!=0){ bk[num+1][i1]=bk[num+1][i1]+bk[num][i1]*aa;}} for(int i4=num+1;i4<row;i4++){if(bk[i4][num]!=0){aa=-bk[i4][num]*1.0/bk[num][num]; for(int j4=0;j4<col;j4++){ bk[i4][j4]=bk[i4][j4]+bk[num][j4]*aa;}}}cout<<"第"<<num+1<<"初等行变换之后的矩阵:"<<endl;cout<<"-----------------------------------------------"<<endl;for(int i2=0;i2<row;i2++){for(int j2=0;j2<col;j2++){if(jidu(bk[i2][j2])<0.0001){ bk[i2][j2]=0;}cout<<bk[i2][j2]<<" ";}cout<<endl;}cout<<"------------------------------------------------"<<endl;//现在要做的是将这个矩阵写到文件中去 stream=fopen("data.txt","a+"); char msg[]="然后再初等变换之后的矩阵:"; fprintf(stream,"%s",msg); fprintf(stream,"\n"); curpos=ftell(stream); for(int i3=0;i3<row;i3++) { for(int j3=0;j3<col;j3++) { fprintf(stream,"%f",bk[i3][j3]); fprintf(stream,"%c"," "); } fprintf(stream,"\n"); } fclose(stream); return curpos;}void solve(int curpos){//首先是从文件中获取到这个矩阵FILE *stream=fopen("data.txt","r");float xx[50];float bk[50][50];char ch;fseek(stream,curpos,0);for(int i=0;i<row;i++){for(int j=0;j<col;j++){fscanf(stream,"%f",&bk[i][j]);fscanf(stream,"%c",&ch);}}cout<<"方程组Ax=b的解:"<<endl; cout<<"--------------------------------------------"<=0;i1--){ xx[i1]=(bk[i1][9]-sum(xx,bk[i1],i1))/bk[i1][i1];}for(int i2=0;i2<row;i2++){cout<<"X"<<i2+1<<"= "<<xx[i2]<<endl;} }float sum(float xx[],float yy[],int num){float summ=0.0;for(int i=1;i<row-num;i++){summ+=yy[num+i]*xx[num+i];}return summ;}

求解方程Ax=b的通用程序相关推荐

  1. 利用追赶法来求解方程Ax=b的C++程序

    在写程序之前需要完成矩阵的输入操作,在这个地方我们是通过在txt文件上对矩阵输入,创建一个txt文件并且输入下面的内容: --------------------------------------- ...

  2. 编程序求解方程实数根

    上机内容:C程序的编写和运行 上机目的:掌握简单C程序的编辑.编译.连接和运行的一般过程 我的程序: #include<stdio.h> #include<math.h>flo ...

  3. matlab容许误差范围,s2 给定初值及容许误差,编制牛顿法解方程f(x) 0的通用程序 联合开发网 - pudn.com...

    s2 所属分类:matlab例程 开发工具:matlab 文件大小:2KB 下载次数:6 上传日期:2016-10-20 17:16:56 上 传 者:幸福vip 说明:  给定初值及容许误差,编制牛 ...

  4. 【MPC的前身方法二】(5.3)机器人动力学模型+反馈控制+齐次线性方程AX=B求解反作用力并优化方法

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.建立单刚体动力学模型(近似抽象模型) 二.建立单刚体模型的运动方 ...

  5. matlab用牛顿迭代法求解方程,牛顿迭代法求方程解 程序如下

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function [x_reality,n_reality] = Newt( f_name,x_start,tolerance,n_limit) %% % ...

  6. 求ax^2+bx+c=0(ao)根的c语言程序,【C语言】求方程ax^2+bx+c=0的根

    //求方程ax^2+bx+c=0的根 #include #include int main() { float a,b,c,dis,x1,x2; printf("请输入a,b,c的值: &q ...

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

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

  8. matlab求解方程和多元函数方程组

    核心函数solve 一般形式 S=solve(eqns,vars,Name,Value) ,其中: eqns是需要求解的方程组: vars是需要求解的变量: Name-Value对用于指定求解的属性( ...

  9. Java黑皮书课后题第3章:*3.3(代数:求解2*2线性方程)编写程序,提示用户输入a、b、c、d、e和f,然后显示结果

    *3.3(代数:求解2*2线性方程)编写程序,提示用户输入a.b.c.d.e和f,然后显示结果 题目 题目描述 运行示例 破题 代码 题目 题目描述 3.3(代数:求解22线性方程) 编写程序,提示用 ...

最新文章

  1. 抄2gua一篇文章提醒自己
  2. Hulu 2013北京地区校招笔试题
  3. 站点分析基础概念之目标转化率
  4. JS:两个json数组合并、去重,以及删除某一项元素
  5. 图像处理理论(一)——直方图、二值化、滤波基础
  6. 【赠书活动】优雅免费领书指南
  7. [导入]相片: 53787515.jpg
  8. php $handle,laravel $kernel-handle 报错的解决办法_PHP开发框架教程
  9. Error:Trailing spaces not allowed no-trailing-spaces
  10. 微软:Windows 7 和 10 都将删除自动更新!
  11. SpringMVC源码阅读(三)
  12. Linux基础 权限与用户管理命令
  13. OpenLayers坐标转换
  14. 沿海信标台站rbn-dgps的文献综述
  15. 什么叫主语、谓语、宾语、定语、状语、补语?
  16. AUTOCAD——表格样式
  17. emi滤波matlab,EMI电源滤波器选型方法 浅析EMI电源滤波器及其原理介绍
  18. php支付宝封装类,android封装支付宝支付
  19. java实验 声明银行账户类__Java实验13 银行账户存取款业务
  20. 回复 程序员如何做SOHO接私单

热门文章

  1. [AX]AX2012 使用.NET程序集部署
  2. mysql的root用户添加密码
  3. Java 8 Stream原理解析
  4. 小记 | 从 0 到 1,看我玩弄千万日志于股掌
  5. 某多多买菜程序员:最长持续工作时间高达30小时!睁眼就工作,闭眼就睡觉!多多买菜离职率超级高!公司不得不降低门槛持续招人!...
  6. 一个小需求,能够做到月活跃用户5000万,就是真牛逼!
  7. 阿里P8都留不住的程序员和他们的公众号!
  8. 从零到百亿级,揭秘科大讯飞广告平台架构演进之路
  9. MyBatis包含这9种设计模式,你知道几个?
  10. HR收到Dota天梯2000分玩家的简历,给不给面试的机会呢?