




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include iostream.hconst int Max=8;/声明各个函数,end_line 和end_row分别是指矩阵的列数,行数。void jie_ti_hua(int end_row,int end_line,double jMax+1);/功能是把矩阵阶梯化int qiu_zhi(int end_row,int end_line,double dMax+1);/求秩double hang_lie_shi(int n,double fang_zhenMax+1);/求一个N阶方阵的行列式void swing(int end_row,int end_line,double bMax+1);/把矩阵顺时针180度旋转void upside_down(int end_row,int end_line,double cMax+1);/把矩阵上下翻转/以上函数的矩阵是以数组首位置(0,0)为起点储存在数组中。int main() cout这个程序可以计算任意的多元一次方程组,endl 不论方程数多于未知数个数,或者未知数个数多于方程数。endl 方程组可以有有且只有唯一解,有无数解,无解三种情况endl; int hang,lie;/定义hang,lie接受输入的值 cout请输入方程组的方程个数hang; cout请输入方程组的未知数个数lie; double zgjzMaxMax+1=0;/初始化数组是为了避免下标超界 for(int i=0;ihang;i+)/接收值 for(int j=0;jlie;j+) cout请输入第i+1个方程组Xj+1 的系数zgjzij; for(int k=0;khang;k+) cout请输入第k+1个方程组=号右边的常数zgjzklie; /至此完成把一个方程组存于一个数组中,即增广矩阵 jie_ti_hua(hang,lie+1,zgjz);/把矩阵阶梯化 /以下是找出系数矩阵与增广矩阵的秩,比较大小判断解的情况 int xishu_zhi,zengguang_zhi; xishu_zhi=qiu_zhi(hang,lie,zgjz); zengguang_zhi=qiu_zhi(hang,lie+1,zgjz); if(xishu_zhizengguang_zhi)/第一种情况 cout方程组无解endl; if(xishu_zhi=zengguang_zhi & xishu_zhi=lie)/第二种情况 cout方程组有且只有唯一解endl; double ju_zhen1MaxMax+1;/利用克莱姆公式求解会改变zgjz的值,因此新建一个 double ke_lai_muMax;/接收个未知数的解 for(int t=0;tlie;t+) for(int i=0;ilie;i+) for(int j=0;jlie;j+) ju_zhen1ij=zgjzij;/每次都先恢复系数矩阵 for(int k=0;klie;k+) ju_zhen1kt=zgjzklie;/再把常数列赋值给某一列 ke_lai_mut=hang_lie_shi(lie,ju_zhen1);/求行列式的值 double D=1; for(int i=0;ilie;i+) D=D*zgjzii;/原系数矩阵已阶梯化,求行列式简单 for (int ii=0;iilie;ii+) ke_lai_muii=ke_lai_muii/D;/储存各未知数的解 for (int iii=0;iiilie;iii+) coutXiii+1=ke_lai_muiiiendl;/输出各未知数 if(xishu_zhi=zengguang_zhi & xishu_zhilie)/第三种情况,需求出基础解系和特解 cout方程组有无数解endl; /找出自由变量和非自由变量,并保存于数组中 int jishu1=0; int jishu2=0; int free_variableMax;/保存自由变量的数组 int non_free_variableMax-1;/保存非自由变量的数组 for(int line=0;linelie;line+) if(zgjzjishu1line!=0) non_free_variablejishu1=line; jishu1=jishu1+1; else free_variablejishu2=line; jishu2=jishu2+1; int non_free_num=xishu_zhi,free_num=lie-xishu_zhi;/定义自由变量数和非自由变量数 cout方程组有free_num个自由变量,分别为:endl; for(int i=0;ifree_num;i+) cout Xfree_variablei+1 ;/此处必须+1 coutendl; cout方程组的free_num个基础解系分别为:endl;/把矩阵的每行元素除以该行首个非零元素 for(int Hh=0;Hhnon_free_variableHh;Ii-) zgjzHhIi=zgjzHhIi/zgjzHhnon_free_variableHh; zgjzHhnon_free_variableHh=1; double ju_zhen2MaxMax+1;/接收原矩阵改变列后的顺序 for(int x=0;xnon_free_num;x+) ju_zhen2x0=zgjzxlie;/方程常数移到最左边 for(int line1=1;line1free_num+1;line1+) for(int row1=0;row1non_free_num;row1+) ju_zhen2row1line1=zgjzrow1free_variableline1-1;/自由变量列顺次移到左边 for(int line2=1;line2non_free_num+1;line2+) for(int row2=0;row2non_free_num;row2+) ju_zhen2row2line2+free_num=zgjzrow2non_free_variableline2-1;/最后的是非自由变量列 swing(xishu_zhi,lie+1,ju_zhen2);/顺时针180度旋转 jie_ti_hua(xishu_zhi,lie+1,ju_zhen2);/阶梯化 upside_down(xishu_zhi,lie+1,ju_zhen2);/上下翻转 /此时这个数组已经可以直接读取我们要的基础解系和特解了 /原理是线性代数书本某个定理一 int shuzuMaxMax;/使自由向量顺次取值1,0 for(int h4=0;h4free_num;h4+) for(int h5=0;h5free_num;h5+) if(h4=h5) shuzuh4h5=1; else shuzuh4h5=0; /输出对应齐次方程基础解系 for(int i5=0;i5free_num;i5+) for(int i6=0;i6free_num;i6+) cout ; coutXfree_variablei6+1=shuzui5i6 ; for(int i7=0;i7non_free_num;i7+) coutXnon_free_variablei7+1=-1*ju_zhen2i7i5+non_free_num ; coutendl; /输出特解 cout方程组的一个特解为:endl; for(int i9=0;i9lie;i9+) if(i9free_num) cout ; coutXfree_variablei9+1=0 ; else cout Xnon_free_variablei9-free_num+1=ju_zhen2i9-free_numlie ; coutendl; return 0;void jie_ti_hua(int end_row,int end_line,double jMax+1) int tt=0; for(int l=0;lend_line;l+) for(int h=tt;htt) double aMax+1; for(int i=0;iend_line;i+) ai=-1*jhi; jhi=jtti; jtti=ai; for(int i=tt+1;il;t-) jit=jit-jil*jttt/jttl; jil=0; tt=tt+1; int qiu_zhi(int end_row,int end_line,double dMax+1) if(end_rowend_line) end_row=end_line; int count=0; for(int i=0;iend_row;i+)8楼 for(int j=i;jend_line;j+) if(dij!=0) count=count+1; break; return count;double hang_lie_shi(int n,double fang_zhenMax+1) jie_ti_hua(n,n,fang_zhen); double cj=1; for(int i=0;in;i+) cj=cj*fang_zhenii; return cj;void swing(int end_row,int end_line,double bMax+1) double bbMaxMax+1; for(int line=0;lineend_line;line+) for(int row=0;rowend_row;row+) bbrowline=bend_row-1-rowend_line-1-line; for(int j=0;jend_line;j+) for(int i=0;iend_row;i+) bij=bbij; void upside_down(int end_row,int end_line,double cMax+1) double ccMaxMax+1; for(int line=0;lineend_line;line+) for(int row=0;rowend_row;row+) ccrowline=cend_row-1-rowline; for(int j=0;jend_line;j+) for(int i=0;iend_row;i+) cij=ccij; if (derta=0) x1=(-b)/(2*a);if (derta=0) x1=(-b)/(2*a);这里有问题 if后面要跟两个等号的,一个等号是赋值,两个等号才是条件判断。 等会 我改好了传给你啊。 你试试这个,刚改的。#include math.h#include stdio.hmain()float a,b,c,derta,x;double x1,x2; printf(请输入二次项系数:n); scanf(%f,&a); printf(请输入一次项系数:n); scanf(%f,&b); printf(请输入常数:n); scanf(%f,&c); derta=b*b-4*a*c; if (a!=0) if (derta0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 键盘的使用课件
- 土建现场安全培训
- 小学语文《太阳》教学课件设计
- 少儿拼音班课件
- 钓鱼分类游戏课件
- 广东河北自考试题及答案
- 广东广东美学自考试题及答案
- 冷库考试题及答案大全
- 烤灯考试题及答案
- 抗震减灾考试题及答案
- 陕旅版小学六年级上册全册英语教案
- 海洋工程装备概述
- 第5章 相交线与平行线 复习课件
- 幼儿园玩具售后服务承诺及保证措施方案
- 2025年江苏省高考招生统一考试高考真题物理试卷(真题+答案)
- CJ/T 191-2004板式换热机组
- 《智能机电系统设计与开发》课件 第三章-机械系统设计与开发
- 食品卫生考试试题及答案
- T/CECS 10187-2022无机复合聚苯不燃保温板
- 睾丸常见肿瘤超声诊断要点
- 重症医学科肺康复综合体系建设
评论
0/150
提交评论