您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验4解线性方程组的直接法
西华大学计算机系学生上机实践报告第1页共7页西华数学与计算机学院上机实践报告课程名称:数值计算方法B年级:2009级上机实践成绩:指导教师:严常龙姓名:上机实践名称:解线性方程组的直接法学号:上机实践日期:2011.12.2上机实践编号:4上机实践时间:8:00~9:40一、目的1.通过本实验,加深对解线性方程组的直接法——高斯列主消元法和LU分解法的构造过程的理解;2.能将各种方法的算法描述正确地改编为程序并上机实现;3.熟悉并掌握各种方法的适用对象及优缺点,学会针对不同问题选择不同方法。二、内容与设计思想自选线性方程组,编制一个程序,分别用高斯列主元消元法和LU分解法求解。然后完成作业:分别用高斯列主元消元法和LU分解法求解下面的方程组(以下方程组供选择)。9.369.57.34.05.16.163.11.89.06.58.18.25.33.63.11.155.04.43.22.74321432143214321xxxxxxxxxxxxxxxx三、使用环境操作系统:windowsxp软件平台:vc++6.0四、核心代码及调试过程#includestdio.h#includemath.h#includestring.hvoidmain(){inti,j,k,p,N;floata[50][51],t,x[50];floatmax,temp;printf(\n请输入方程未知数的个数N:);scanf(%d,&N);printf(\n请输入方程的增广矩阵的数据,数据之间按回车键隔开!\n);for(i=0;iN;i++){printf(请输入第%d行的%d个数据:\n,i+1,N+1);for(j=0;jN+1;j++){scanf(%f,&a[i][j]);}printf(\n);西华大学计算机系学生上机实践报告第2页共7页}printf(\n增广矩阵的初始数值:\n);for(i=0;iN;i++){for(j=0;jN+1;j++){printf(%f,a[i][j]);}printf(\n);}for(k=0;kN-1;k++){//*******************************if(a[k][k]=0){max=a[k][k];}else{max=a[k][k];}for(i=k;iN;i++){if((maxa[i][k])||(max-a[i][k])){max=0;if(a[i][k]=0){max=a[i][k];}else{max=-a[i][k];}}}for(i=k;iN;i++){if((max=a[i][k])||(max=-a[i][k])){p=i;break;}}for(j=0;jN+1;j++){temp=a[p][j];a[p][j]=a[k][j];a[k][j]=temp;}//****************************选主列的元。for(i=k+1;iN;i++){t=(a[i][k]/a[k][k]);for(j=k;jN+1;j++){a[i][j]=a[i][j]-t*a[k][j];}西华大学计算机系学生上机实践报告第3页共7页}}printf(\n增广矩阵系数上三角形化得到的矩阵:\n);for(i=0;iN;i++){for(j=0;jN+1;j++){printf(%f,a[i][j]);}printf(\n);}for(k=N-1;k=0;k--){for(i=k-1;i=0;i--){t=(a[i][k]/a[k][k]);for(j=0;jN+1;j++){a[i][j]=a[i][j]-t*a[k][j];}}}printf(\n增广矩阵的系数对角线化得到的矩阵:\n);for(i=0;iN;i++){for(j=0;jN+1;j++){printf(%f,a[i][j]);}printf(\n);}printf(该方程的解为:\n);for(k=0;kN;k++){x[k]=a[k][N]/a[k][k];printf(x[%d]=%f\n,k+1,x[k]);}}西华大学计算机系学生上机实践报告第4页共7页2.L-U分解法://***(L-U)分解法求解线性方程组。#includestdio.h#includemath.h#includestring.hfloata[50][51],x[50],u[50][51];voidmain(){inti,j,k,p,N;floatsum,t;printf(\n请输入方程未知数的个数N:);scanf(%d,&N);//*************************************输入矩阵a的数据。printf(\n请输入方程系数矩阵a的数据,数据之间按回车键隔开!\n);for(i=0;iN;i++){printf(请输入第%d行的%d个数据:\n,i+1,N);for(j=0;jN+1;j++){scanf(%f,&a[i][j]);}西华大学计算机系学生上机实践报告第5页共7页printf(\n);}//**************************************输出矩阵a的数据。printf(\n系数矩阵a的初始数值:\n);for(i=0;iN;i++){for(j=0;jN+1;j++){printf(%f,a[i][j]);}printf(\n);}//*****************************************进行变换计算。for(j=1;jN;j++){a[j][0]=a[j][0]/a[0][0];}for(k=1;kN;k++){for(j=k;jN+1;j++)//从第2行起,先进行行变换。{sum=0;for(p=0;pk;p++){sum=sum+a[k][p]*a[p][j];}a[k][j]=a[k][j]-sum;}t=a[k][k];for(j=k+1;j=N;j++)//从第2列起,进行列变换。{sum=0;for(p=0;pk;p++){sum=sum+a[j][p]*a[p][k];}a[j][k]=(a[j][k]-sum)/t;}}//******************************************************for(i=0;iN;i++)//把a中对应数据赋值给矩阵u。{for(j=0;jN+1;j++){if(ji){u[i][j]=0;}else{u[i][j]=a[i][j];}}}printf(\n系数矩阵u的初始数值:\n);for(i=0;iN;i++){for(j=0;jN+1;j++)西华大学计算机系学生上机实践报告第6页共7页{printf(%f,u[i][j]);}printf(\n);}//***************************************************for(k=N-1;k=0;k--)//把矩阵u对角化。{for(i=k-1;i=0;i--){t=(u[i][k]/u[k][k]);for(j=0;jN+1;j++){u[i][j]=u[i][j]-t*u[k][j];}}}for(k=0;kN;k++)//求出矩阵X并输出。{x[k]=u[k][N]/u[k][k];printf(x[%d]=%f\n,k+1,x[k]);}}西华大学计算机系学生上机实践报告第7页共7页9.369.57.34.05.16.163.11.89.06.58.18.25.33.63.11.155.04.43.22.74321432143214321xxxxxxxxxxxxxxxx五、总结通过本次上机实验,我掌握了高斯列主元消元法和LU分解法求解线性方程组。编程序实现这两种解线性方程组的方法,就要先熟悉具体的操作步骤,逻辑思路要清晰。在程序实现过程种,我主要运用了数组存储数据,调用了数组类型的子函数,编写了求逆矩阵的子函数并在主函数中调用,熟练的使用了数组和循环语句。我编写的程序具有一定的通用性和可读性,可以解决这一类计算。六、附录
本文标题:实验4解线性方程组的直接法
链接地址:https://www.777doc.com/doc-5743285 .html