




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/解线性方程组# include # include # include /-全局变量定义区const int Number=15;/方程最大个数double aNumberNumber, bNumber,copy_aNumberNumber,copy_bNumber;/系数行列式int A_yNumber;/a中随着横坐标增加列坐标的排列顺序,如a00,a12,a21.则A_y=0,2,1.;int length, copy_length;/方程的个数double a_sum;/计算行列式的值char * x;/未知量a,b,c的载体/-函数声明区void input();/输入方程组void print_menu();/打印主菜单int choose ();/输入选择void cramer();/Cramer算法解方程组void gauss_row();/Gauss列主元解方程组void guass_all();/Gauss全主元解方程组void Doolittle();/用Doolittle算法解方程组int Doolittle_check(double aNumber,double bNumber);/判断是否行列式0,若是,调整为顺序主子式全0void xiaoqu_u_l();/将行列式Doolittle分解void calculate_u_l();/计算Doolittle结果double & calculate_A(int n,int m);/计算行列式double quanpailie_A();/根据列坐标的排列计算的值,如A_y=0,2,1,得sum=a0 A_y0 * a1 A_y1 * a2 A_y2 =a00*a12*a21;void exchange(int m,int i);/交换A_ym,A_yivoid exchange_lie(int j);/交换aj与b;void exchange_hang(int m,int n);/分别交换a和b中的m与n两行void gauss_row_xiaoqu();/Gauss列主元消去法void gauss_all_xiaoqu();/Gauss全主元消去法void gauss_calculate();/根据Gauss消去法结果计算未知量的值void exchange_a_lie(int m,int n);/交换a中的m和n列void exchange_x(int m,int n);/交换x中的xm和xnvoid recovery();/恢复数据/主函数void main()int flag=1;input();/输入方程while(flag)print_menu();/打印主菜单flag=choose();/选择解答方式/函数定义区void print_menu()system(cls);cout-方程系数和常数矩阵表示如下:n;for(int j=0;jlenth;j+)cout系数j+1 ;coutt常数;coutendl;for(int i=0;ilenth;i+)for(j=0;jlenth;j+)coutsetw(8)setiosflags(ios:left)aij;couttbiendl;cout-请选择方程解答的方案-;coutn 1. 克拉默(Cramer)法则;coutn 2. Gauss列主元消去法;coutn 3. Gauss全主元消去法;coutn 4. Doolittle分解法;coutn 5. 退出;coutn 输入你的选择:;void input()int i,j;coutlenth;if(lenthNumber)coutIt is too big.n;return;x=new charlenth;for(i=0;ilenth;i+)xi=a+i;/输入方程矩阵/提示如何输入cout=n;cout请在每个方程里输入lenth系数和一个常数:n;cout例:n方程:a;for(i=1;ilenth;i+)cout+i+1xi;cout=10n;cout应输入:;for(i=0;ilenth;i+)couti+1 ;cout10n;cout=n;/输入每个方程for(i=0;ilenth;i+)cout输入方程i+1:;for(j=0;jaij;cinbi;/备份数据for(i=0;ilenth;i+)for(j=0;jlenth;j+)copy_aij=aij;for(i=0;ichoice;switch(choice)case 1:cramer();break;case 2:gauss_row();break;case 3:guass_all();break;case 4:Doolittle();break;case 5:return 0;default:cout输入错误,请重新输入:;choose();break;coutch;if(ch=n|ch=N) return 0;recovery();coutnnn;return 1;/用克拉默法则求解方程.void cramer()int i,j;double sum,sum_x;char ch;/令第i行的列坐标为icout用克拉默(Cramer)法则结果如下:n;for(i=0;ilenth;i+)A_yi=i;sum=calculate_A(lenth,0);if(sum!=0)cout系数行列式不为零,方程有唯一的解:;for(i=0;ilenth;i+)ch=a+i;a_sum=0;for(j=0;jlenth;j+)A_yj=j;exchange_lie(i);sum_x=calculate_A(lenth,0);coutendlch=sum_x/sum;exchange_lie(i);elsecout系数行列式等于零,方程没有唯一的解.;coutn;double & calculate_A(int n,int m)/计算行列式int i;if(n=1)a_sum+= quanpailie_A();elsefor(i=0;in;i+)exchange(m,m+i);calculate_A(n-1,m+1);exchange(m,m+i);return a_sum;double quanpailie_A()/计算行列式中一种全排列的值int i,j,l;double sum=0,p;for(i=0,l=0;ilenth;i+)for(j=0;A_yj!=i&ji)l+;for(p=1,i=0;ilenth;i+)p*=aiA_yi;sum+=p*(l%2=0)?(1):(-1);return sum;/高斯列主元排列求解方程void gauss_row()int i,j;gauss_row_xiaoqu();/用高斯列主元消区法将系数矩阵变成一个上三角矩阵for(i=0;ilenth;i+)for(j=0;jlenth;j+)coutsetw(10)setprecision(5)aij;coutsetw(10)biendl;if(alenth-1lenth-1!=0)cout系数行列式不为零,方程有唯一的解:n;gauss_calculate();for(i=0;ilenth;i+)/输出结果coutxi=bin;elsecout系数行列式等于零,方程没有唯一的解.n;void gauss_row_xiaoqu()/高斯列主元消去法int i,j,k,maxi;double lik;cout用Gauss列主元消去法结果如下:n;for(k=0;klenth-1;k+)j=k;for(maxi=i=k;iamaxij)maxi=i;if(maxi!=k)exchange_hang(k,maxi);/for(i=k+1;ilenth;i+)lik=aik/akk;for(j=k;jlenth;j+)aij=aij-akj*lik;bi=bi-bk*lik;/高斯全主元排列求解方程void guass_all()int i,j;gauss_all_xiaoqu();for(i=0;ilenth;i+)for(j=0;jlenth;j+)coutsetw(10)setprecision(5)aij;coutsetw(10)biendl;if(alenth-1lenth-1!=0)cout系数行列式不为零,方程有唯一的解:n;gauss_calculate();for(i=0;ilenth;i+)/输出结果for(j=0;xj!=a+i&jlenth;j+);coutxj=bjendl;elsecout系数行列式等于零,方程没有唯一的解.n;void gauss_all_xiaoqu()/Gauss全主元消去法int i,j,k,maxi,maxj;double lik;cout用Gauss全主元消去法结果如下:n;for(k=0;klenth-1;k+)for(maxi=maxj=i=k;ilenth;i+)for(j=k;jamaxi maxj)maxi=i;maxj=j;if(maxi!=k)exchange_hang(k,maxi);if(maxj!=k)exchange_a_lie(maxj,k);/交换两列exchange_x(maxj,k);for(i=k+1;ilenth;i+)lik=aik/akk;for(j=k;j=0;i-)for(j=i+1,sum_ax=0;jlenth;j+)sum_ax+=aij*bj;bi=(bi-sum_ax)/aii;void Doolittle()/Doolittle消去法计算方程组double temp_aNumberNumber,temp_bNumber;int i,j,flag;for(i=0;ilenth;i+)for(j=0;jlenth;j+)temp_aij=aij;flag=Doolittle_check(temp_a,temp_b);if(flag=0)coutn行列式为零.无法用Doolittle求解.;xiaoqu_u_l();calculate_u_l();cout用Doolittle方法求得结果如下:n;for(i=0;ilenth;i+)/输出结果for(j=0;xj!=a+i&jlenth;j+);coutxj=bjendl;void calculate_u_l()/计算Doolittle结果int i,j;double sum_ax=0;for(i=0;ilenth;i+)for(j=0,sum_ax=0;j=0;i-)for(j=i+1,sum_ax=0;jlenth;j+)sum_ax+=aij*bj;bi=(bi-sum_ax)/aii;void xiaoqu_u_l()/将行列式按Doolittle分解int i,j,n,k;double temp;for(i=1,j=0;ilenth;i+)aij=aij/a00;for(n=1;nlenth;n+)/求第n+1层的上三角矩阵部分即Ufor(j=n;jlenth;j+)for(k=0,temp=0;kn;k+)temp+=ank*akj;anj-=temp;for(i=n+1;ilenth;i+)/求第n+1层的下三角矩阵部分即Lfor(k=0,temp=0;kn;k+)temp+=aik*akn;ain=(ain-temp)/ann;int Doolittle_check(double temp_aNumber,double temp_bNumber)/若行列式不为零,将系数矩阵调整为顺序主子式大于零int i,j,k,maxi;double lik,temp;for(k=0;klenth-1;k+)j=k;for(maxi=i=k;itemp_amaxij)maxi=i;if(maxi!=k)exchange_hang(k,maxi);for(j=0;jlenth;j+)temp=temp_akj;temp_akj=temp_amaxij;temp_amaxij=temp;for(i=k+1;ilenth;i+)lik=temp_aik/temp_akk;for(j=k;jlenth;j+)temp_aij=temp_aij-temp_akj*lik;temp_bi=temp_bi-temp_bk*lik;if(temp_alenth-1lenth-1=0)return 0;return 1;void exchange_hang(int m,int n)/交换a中和b两行int j;double temp;for(j=0;jlenth;j+)temp=amj;amj=anj;anj=temp;temp=bm;bm=bn;bn=temp;void exchange(int m,int i)/交换A_ym,A_yi int temp;temp=A_ym;A_ym=A_yi;A_yi=temp;void exchange_lie(int j)/交换未知量b和第i列double temp;int i;for(i=0;ilenth;i+)temp=aij;aij=bi;bi=temp;void exchange_a_lie(int m,int n)/交换a中的两列double temp;int i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肿瘤学典型病例诊疗全流程解析
- 住院医师规范化培训病例讨论
- 生物线上培训课件
- 育婴员保健与护理
- 心肌梗死护理质量改进项目
- 培训行业公司简介
- 工厂培训内容总结
- 肝癌患者人文关怀护理
- 原辅料检验培训课件
- 临床实践护理的伦理道德
- 儿童篮球教学课件视频
- 注塑公司规章管理制度
- 呼吸康复讲课
- 2025年霍州煤电招聘笔试冲刺题(带答案解析)
- 2025年 汾西矿业井下岗位高校毕业生招聘考试笔试试题(山西省)含答案
- 浙江省杭州市(2024年-2025年小学五年级语文)人教版期末考试(下学期)试卷及答案
- 四川省成都市2024年七年级下学期期末数学试题附答案
- 2023版押品考试题库必考点含答案
- Q∕GDW 11445-2015 国家电网公司管理信息系统安全基线要求
- 材料科学基础 第2章 晶体结构
- 结构化思维PPT通用课件
评论
0/150
提交评论