列主元消元法.doc_第1页
列主元消元法.doc_第2页
列主元消元法.doc_第3页
列主元消元法.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值算法之列主元消元法 下面的代码直接复制就可以用,代码都做了解释,比较容易看懂。方便学数值算法的同学。供大家交流。#include#include#include#include #include /包含输出格式设置的头文件typedef double array45;double answer4; /answer4代表借的数组;/*void Init_array(array a) /数组的初始化并赋值;int i,j; /i数组的代表行,j代表数组的列;for (i=0;i4;i+)for (j=0;j5;j+)cout请输入数组的第i+1行,第j+1列的值:aij;/改进的Init_array(array a)函数void Init_array(array a)int i,j;cout请输入数组:endl;for(i=0;i4;i+)for(j=0;j5;j+)coutaijaij;coutendl;*/void cout_array(array a) /输出数组的函数,无返回值;int i,j;for(i=0;i4;i+)for (j=0;j5;j+)coutsetw(15)aij; /setw(6)设定输出的每个数组占6位,包含在iomainip头文件中coutendl;int maxelem(array a,int k) /a代表数组a,k代表第k次选组员;函数的返回值是int类型的值,代表最大组员所在的行;double i; /i用来传参int j,m; /j用来返回最大数组所在的列;k-; /使k值与数组对应起来,方便下面操作;i=akk;m=k;j=k+1;for(;kakm) j=k+2; return j;void swapline(array a,int k,int l) /a代表数组a,k代表第k次选组员,l代表最大组员所在的行;函数用来交换组,无返回值;double m; /m用来传参k-; /方便后面的使用l-;for(int j=0;j5;j+)m=akj;akj=alj;alj=m;void cancellist(array a,int k) /a代表数组a,k代表第k次选组员,函数用来消元,把数组转换成上三角,无返回值;double m; /m代表消组员时的乘数;int j;j=k; /让k的值赋给j;因为k的值和含义后面会变,而后面要用到k的初值;for(;k4;k+) if(aj-1j-1!=0) m=akj-1/aj-1j-1; /计算消元时乘的乘数; cout第k次消元的乘数为mendl; for(int i=j-1;i5;i+) /k代表行,i代表列; aki=aki-aj-1i*m; /if(a321e-16) /couta32endl; / 第三次求得的a32是一个小于10的-16次方的小数; /else cout无法进行列主元求解endl; exit(0);void main()array a;array b;int i,j; /验证精度用的double m(0),n(0); /精度验证/Init_array(a); /用改进的方法初始化任意数组/为数组赋值;a00=1 ,a01=-1,a02= 1,a03=-4,a04= 2, a10=5 ,a11=-4,a12= 3,a13=12,a14= 4, a20=2 ,a21= 1,a22= 1,a23=11,a24= 3, a30=2 ,a31=-1,a32= 7,a33=-1,a34= 0; for( i=0;i4;i+)for( j=0;j5;j+) bij=aij;/*a00=5 ,a01=1,a02=1 ,a03=1,a04=8 ,a10=6 ,a11=1,a12=1 ,a13=1,a14=9 ,a20=7 ,a21=1,a22=1 ,a23=1,a24=10 ,a30=8 ,a31=1,a32=1 ,a33=1,a34=11 ; */ /用来测试能不能满足算法要求的一组数据cout_array(a);cout最大组员所在的行:maxelem(a,1)endl;swapline(a,1,maxelem(a,1);cout第一次换行后的数组:endl;cout_array(a);cancellist(a,1);cout第一次消元后的数组:endl;cout_array(a);cout最大组员所在的行:maxelem(a,2)endl;swapline(a,2,maxelem(a,2);cout第二次换行后的数组:endl;cout_array(a);cancellist(a,2);cout第二次消元后的数组:endl;cout_array(a);cout最大组员所在的行:maxelem(a,3)endl;swapline(a,3,maxelem(a,3);cout第三次换行后的数组:endl;cout_array(a);cancellist(a,3);cout第三次消元后的数组:endl;cout_array(a);/人工手代反求解降低算法的重复度answer3=a34/a33;answer2=(a24-a23*answer3)/a22;answer1=(a14-a13*answer3-a12*answer2)/a11;answer0=(a04-a03*answer3-a02*answer2-a01*answer1)/a00;cout则解得方程的解为:endl;for( i=0;i4;i+)coutsetw(15)answeri;coutendl;/ 验证精度for(i=0;i4;i+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论