您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《实验4:解线性方程组的直接法》
2实验名称实验4实验地点6A-XXX实验类型设计实验学时2实验日期20/X/X★撰写注意:版面格式已设置好(不得更改),填入内容即可。一、实验目的1.高斯列主消元法2.LU分解法3.LDLT分解法二、实验内容1.实验任务1.高斯列主消元法2.LU分解法3.LDLT分解法2.程序设计1)数据输入(输入哪些数据、个数、类型、来源、输入方式)doubleA[N][N],doubleb[N]doublea[N][N]2)数据存储(输入数据在内存中的存储)函数voidguass_列主元(doubleA[N][N],doubleb[N])voidDoolittle(doubleA[N][N],doubleb[N])voidLDL(doublea[N][N],doubleb[N])voidRevMatrix(doublea[N][N])3)数据处理(说明处理步骤。若不是非常简单,需要绘制流程图)1.输入要处理的数据进入变量中2.进行函数处理3.输出函数处理结果4)数据输出(贴图:程序运行结果截图。图幅大小适当,不能太大)3三、实验环境1.操作系统:WINDOWS7及以上2.开发工具:VS20153.实验设备:PC四、提交文档提交本实验报告(电子版),文件名命名:学号姓名《实验X:XXXXXXX》.doc教师将批阅后(有分数)的全体学生实验报告刻入一张光盘存档,保证光盘可读。五、附:源代码#includeiostreamusingnamespacestd;constintN=4;voidguass_列主元(doubleA[N][N],doubleb[N]){doublex[N],aug[N][N+1],Mtemp[N+1],pe,m;intn,r;n=N;for(inti=0;in;i++){for(intj=0;jn;j++){aug[i][j]=A[i][j];}aug[i][n]=b[i];}4for(intk=0;kn-1;k++){r=k;pe=fabs(aug[k][k]);for(inti=k+1;in;i++){if(pefabs(aug[i][k])){pe=aug[i][k];r=i;}}if(r!=k){for(inti=0;in+1;i++){Mtemp[i]=aug[k][i];aug[k][i]=aug[r][i];aug[r][i]=Mtemp[i];}}if(aug[k][k]==0)return;for(inti=k+1;in;i++){m=aug[i][k]/aug[k][k];for(intj=k;jn+1;j++){aug[i][j]=aug[i][j]-m*aug[k][j];}}}for(inti=0;in;i++){for(intj=0;jn+1;j++){coutaug[i][j];if((j+1)%5==0)coutendl;}}x[n-1]=aug[n-1][n]/aug[n-1][n-1];for(inti=n-2;i=0;i--){doublesum=0.0;5for(intj=i+1;j=n-1;j++){sum=sum+aug[i][j]*x[j];}x[i]=(aug[i][n]-sum)/aug[i][i];}for(inti=0;in;i++){coutx[i]=x[i];}coutendl;}voidDoolittle(doubleA[N][N],doubleb[N]){intn=N;doubleL[N][N],U[N][N],x[N],y[N];for(inti=0;in;i++){for(intj=0;jn;j++){L[i][j]=0;}L[i][i]=1;}for(inti=0;in;i++){for(intj=0;jn;j++)U[i][j]=0;}for(intk=0;k=n-1;k++){for(intj=k;j=n-1;j++){U[k][j]=A[k][j];for(intr=0;r=k-1;r++){U[k][j]=U[k][j]-L[k][r]*U[k][r];}}for(inti=k+1;i=n-1;i++){L[i][k]=A[i][k];for(intr=1;r=k-1;r++){6L[i][k]=L[i][k]-L[i][r]*U[r][k];}L[i][k]=L[i][k]/U[k][k];}}cout分解后的U[4][4]:endl;for(inti=0;in;i++){for(intj=0;jn;j++){coutU[i][j];if((j+1)%n==0)coutendl;}}cout分解后的L[4][4]:endl;for(inti=0;in;i++){for(intj=0;jn;j++){coutL[i][j];if((j+1)%n==0)coutendl;}}for(inti=0;i=n-1;i++){y[i]=b[i];for(intj=0;j=i-1;j++){y[i]=y[i]-L[i][j]*y[j];}}for(inti=n-1;i=0;i--){x[i]=y[i];for(intj=i+1;j=n-1;j++){y[i]=y[i]-U[i][j]*x[j];}x[i]=y[i]/U[i][i];}for(inti=0;in;i++){7coutx[i]=x[i];}coutendl;}voidLDL(doublea[N][N],doubleb[N]){doublex[N],y[N],z[N],l[N][N],d[N];intn=N;for(inti=0;in;i++){l[i][i]=1;}for(intk=0;kn;k++){d[k]=a[k][k];for(intj=0;j=k-1;j++)d[k]=d[k]-l[k][j]*l[k][j]*d[j];for(inti=k+1;in;i++){l[i][k]=a[i][k];for(intj=0;j=k-1;j++)l[i][k]=l[i][k]-l[i][j]*l[k][j]*d[j];l[i][k]=l[i][k]/d[k];}}for(inti=0;in;i++){z[i]=b[i];for(intj=0;j=i-1;j++)z[i]=z[i]-l[i][j]*z[j];}for(inti=0;in;i++)y[i]=z[i]/d[i];for(inti=n-1;i=0;i--){x[i]=y[i];for(intj=i+1;jn;j++)x[i]=x[i]-l[j][i]*x[j];}cout方程组的解为:endl;for(inti=0;in;i++)coutx[i]=x[i]endl;}voidRevMatrix(doublea[N][N])8{doubled[N][N];intn=N;for(inti=0;in;i++){for(intj=0;jn;j++)d[i][j]=0;d[i][i]=1;}doublex[N][N],m,t=0,h=0;doublepe;intr,i,k,j;coutshowpos;cout原矩阵:endl;for(i=0;in;i++){for(j=0;jn;j++){couta[i][j];if((j+1)%n==0)coutendl;}}for(k=0;kn-1;k++){r=k;pe=fabs(a[k][k]);for(i=k+1;in;i++){if(pefabs(a[i][k])){pe=fabs(a[i][k]);r=i;}}if(r!=k){for(intm=0;mn;m++){t=a[r][m];a[r][m]=a[k][m];a[k][m]=t;h=d[r][m];d[r][m]=d[k][m];9d[k][m]=h;}}if(a[k][k]==0){coutmethodfailed!;system(pause);return;}for(i=k+1;in;i++){m=a[i][k]/a[k][k];for(j=k;jn;j++){a[i][j]=a[i][j]-m*a[k][j];d[i][j]=d[i][j]-m*d[k][j];}}}for(inti=n-1;i0;i--)for(intj=i-1;j=0;j--){m=a[j][i]/a[i][i];for(intk=n-1;k=0;k--){a[j][k]=a[j][k]-m*a[i][k];d[j][k]=d[j][k]-m*d[i][k];}}for(inti=0;in;i++){for(intj=0;jn;j++)d[i][j]=d[i][j]/a[i][i];}coutendl逆矩阵:endl;for(inti=0;in;i++){for(intj=0;jn;j++){coutd[i][j];if((j+1)%n==0)coutendl;}10}}intmain(){doubleAa[4][4]={{7.2,2.3,-4.4,0.5},{1.3,6.3,-3.5,2.8},{5.6,0.9,8.1,-1.3},{1.5,0.4,3.7,5.9}};doubleba[4]={15.1,1.8,16.6,36.9};guass_列主元(Aa,ba);Doolittle(Aa,ba);LDL(Aa,ba);RevMatrix(Aa);system(pause);return0;}
本文标题:《实验4:解线性方程组的直接法》
链接地址:https://www.777doc.com/doc-5818911 .html