实验由本人当时亲自完成仅供参考,希望可以帮助大家本科实验报告课程名称:计算机数值方法B实验项目:Gauss消元法,迭代法,方程求根,拉格朗日插值法,幂法,最小二乘法,追赶法实验地点:中区ZSA301专业班级:0000学号:0000000000学生姓名:氣宇軒昂指导教师:2012年13月13日实验一:Gauss消元法实验一、实验目的《数值计算方法》是一门实践性和实用性都很强的课程,学习的目的在于应用已有的理论基础和技术方法,实现对实际计算问题的计算机求解。本实验配合《计算数值方法》课堂教学,通过上机实践实验环节,巩固课堂和书本上所学的知识、加强实践能力、提高解决实际计算问题的水平、启发创新思想。其基本目的是:(1)培养理论联系实际的思路,训练综合运用已经学过的理论和实际知识去分析和解决实际问题的能力。(2)帮助学生全面消化已学的相关课程内容,深刻理解计算数值方法课程的内涵,培养使用电子计算机进行科学计算和解决问题的能力。(3)进行基本技能训练和巩固。使学生得到选择算法、编写程序、分析数值结果、写数值试验报告、课堂讨论等环节的综合训练。二、实验内容合理利用Gauss消元法、LU分解法或追赶法求解下列方程组:①13814142210321321xxx②2178.4617.5911212592.1121130.6291.51314.59103.0432115xxxx③3772201161263841027851244321xxxx④55572112112112121nnxxxx(n=5,10,100,…)三、主要仪器设备1.笔记本电脑;2.软件vc++6.0;四、操作方法与实验步骤(代码)1.Guass消元法;#includeStdio.h#defineN3voidGauss_eliminant(doublea[N][N+1])/*建立系数及常数项的二维数组*/{doubleb[N];/*建立解的一位数组*/doubles;/*计算解系时的变量*/inti,j,k;for(k=0;kN;k++)/*消元过程*/{for(i=k;iN-1;i++){for(j=N;j=0;j--){a[i+1][j]=a[i+1][j]-a[k][j]*a[i+1][k]/a[k][k];}}}printf(消元后得到上三角矩阵:);printf(\n);for(i=0;iN;i++)/*输出消元后的上三角矩阵*/{for(j=0;j=N;j++){printf(%lf,a[i][j]);}printf(\n);}printf(回代求得原方程组的解为:);printf(\n);for(i=N-1;i=0;i--)/*回代过程*/{s=0;for(j=N-1;ji;j--){s=a[i][j]*b[j]+s;}b[i]=(a[i][N]-s)/a[i][i];}for(i=0;iN;i++)/*输出解系*/{printf(x(%d)=%lf\n,i+1,b[i]);}}main(){inti,j;doublea[N][N+1];printf(输入系数及常数项矩阵:);printf(\n);for(i=0;iN;i++){for(j=0;j=N;j++){scanf(%lf,&a[i][j]);}}Gauss_eliminant(a);getch();}实验结果与分析宏定义的N代表了N维矩阵改变N可以解决n维矩阵;先给出N=3,解决第一个方程组;1.第一步执行如下:2.输入矩阵后执行如下:再给出N=4,解决第三个方程;1.第一步执行如下:2,输入矩阵执行如下:2.Gauss_列主元消元法;#includeStdio.h#defineN2voidGauss_eliminant(doublea[N][N+1])/*建立系数及常数项的二维数组*/{doubleb[N];/*建立解的一位数组*/doubles;/*计算解系时的变量*/inti,j,k,m,n;for(k=0;kN;k++)/*列主消元过程*/{for(m=N-1;m0;m--){for(n=N-m;nm-1;n++){if(a[n][k]a[n+1][k]){s=a[n][k];a[n][k]=a[n+1][k];a[n+1][k]=s;}}}for(i=k;iN-1;i++){for(j=N;j=0;j--){a[i+1][j]=a[i+1][j]-a[k][j]*a[i+1][k]/a[k][k];}}}printf(消元后得到上三角矩阵:);printf(\n);for(i=0;iN;i++)/*输出消元后的上三角矩阵*/{for(j=0;j=N;j++){printf(%lf,a[i][j]);}printf(\n);}printf(回代求得原方程组的解为:);printf(\n);for(i=N-1;i=0;i--)/*回代过程*/{s=0;for(j=N-1;ji;j--){s=a[i][j]*b[j]+s;}b[i]=(a[i][N]-s)/a[i][i];}for(i=0;iN;i++)/*输出解系*/{printf(x(%d)=%lf\n,i+1,b[i]);}}main(){inti,j;doublea[N][N+1];printf(输入系数及常数项矩阵:);printf(\n);for(i=0;iN;i++){for(j=0;j=N;j++){scanf(%lf,&a[i][j]);}}Gauss_eliminant(a);getch();}}实验结果与分析宏定义的N代表了N维矩阵改变N可以解决n维矩阵;先给出N=4,解决第二个方程组;五、第一步执行如下:2,输入矩阵执行如下:3.①追赶法(n=5)#includeStdio.h#defineN5main(){doublea[3*N-2];/*三角矩阵行的一维数组*/doublel[2*N-1];/*l(ij)行的一维数组*/doubleu[N-1];/*u(ij)行的一维数组*/doubleb[N];/*常数项数组*/doubleb1[N];/*ly=b中的y数组*/doubleb2[N];/*ux=y中的y数组*/inti,j,k,m;printf(输入N维三对角矩阵的行的一维数组:);printf(\n);for(i=0;i3*N-2;i++)/*输入三对角矩阵的行的一维数组*/{scanf(%lf,&a[i]);}l[0]=a[0];u[0]=a[1]/l[0];i=1,j=1,k=2;/*计算l(ij)和u(ij)*/do{l[i]=a[k];k++;i++;l[i]=a[k]-u[j-1]*l[i-1];k++;u[j]=a[k]/l[i];j++;k++;i++;}while(i2*N-1);printf(输出一维行的l(ij):);printf(\n);l[0]=a[0];for(k=0;k2*N-1;k++)printf(%lf,l[k]);printf(\n);printf(输出一维行的u(ij):);printf(\n);for(k=0;kN-1;k++)printf(%lf,u[k]);printf(\n);printf(输入常数项数组:);printf(\n);for(i=0;iN;i++)/*输入常数项*/{scanf(%lf,&b[i]);}printf(输出y:);printf(\n);b1[0]=b[0]/l[0];/*计算y*/printf(y(0)=%lf,b1[0]);for(i=1,j=1;iN;i++){m=j+1;b1[i]=(b[i]-l[j]*b1[i-1])/l[m];j++;j++;printf(y(%d)=%lf,i,b1[i]);}printf(\n);printf(输出解x:);printf(\n);b2[N-1]=b1[N-1];/*计算x*/for(i=N-2;i=0;i--){b2[i]=b1[i]-u[i]*b2[i+1];}for(i=0;iN;i++){printf(x(%d)=%lf\n,i,b2[i]);}getch();}实验结果与分析宏定义的N代表了N维矩阵改变N可以解决n维矩阵;先给出N=5,解决第四个方程组的n=5;1.第一步执行结果如下:2.输入三对角行的矩阵后执行结果如下:3.输入常数项数组后执行结果如下:②追赶法(n=任意有规律的整数);#includeStdio.h#defineN10main(){doublea[3*N-2];/*三角矩阵行的一维数组*/doublel[2*N-1];/*l(ij)行的一维数组*/doubleu[N-1];/*u(ij)行的一维数组*/doubleb[N];/*常数项数组*/doubleb1[N];/*ly=b中的y数组*/doubleb2[N];/*ux=y中的y数组*/inti,j,k,m;printf(输入N维三对角矩阵第一行的矩阵:);printf(\n);for(i=0;i2;i++)/*输入三对角矩阵的行的一维数组*/{scanf(%lf,&a[i]);}for(i=2;i3*N-2;i++){a[i]=a[1];i++;a[i]=a[0];i++;if(i3*N-2){a[i]=a[1];}}l[0]=a[0];u[0]=a[1]/l[0];i=1,j=1,k=2;/*计算l(ij)和u(ij)*/do{l[i]=a[k];k++;i++;l[i]=a[k]-u[j-1]*l[i-1];k++;u[j]=a[k]/l[i];j++;k++;i++;}while(i2*N-1);l[0]=a[0];printf(输入常数项的前两个:);printf(\n);for(i=0;i2;i++)/*输入常数项*/{scanf(%lf,&b[i]);}for(i=2;iN;i++){b[i]=b[1];}b1[0]=b[0]/l[0];/*计算y*/for(i=1,j=1;iN;i++){m=j+1;b1[i]=(b[i]-l[j]*b1[i-1])/l[m];j++;j++;}printf(输出解x:);printf(\n);b2[N-1]=b1[N-1];/*计算x*/for(i=N-2;i=0;i--){b2[i]=b1[i]-u[i]*b2[i+1];}for(i=0;iN;i++){printf(x(%d)=%lf\t,i,b2[i]);}getch();}实验结果与分析宏定义的N代表了N维矩阵改变N可以解决n维矩阵;先给出N=10,解决第四个方程组的n=10;1.第一步执行结果如下:2.输入三对角第一行后执行结果如下:3.输入常数项的前两个后执行结果如下:当N=100时执行最后结果如下:七、讨论、心得主要是对算法更熟悉,更熟悉对c语言的利用!1.笔记本电脑;2.软件vc++6.0;三、操作方法与实验步骤(代码)1.Guass消元法;#includeStdio.h#defineN3voidGauss_eliminant(doublea[N][N+1])/*建立系数及常数项的二维数组*/{doubleb[N];/*建立解的一位数组*/doubles;/*计算解系时的变量*/inti,j,k;for(k=0;kN;k++)/*消元过程*/{for(i=k;iN-1;i++){for(j=N;j=0;j--){a[i+1][j]=a[i+1][j]-a[k][j]*a[i+1][k]/a[k][k];}}}printf(消元后得到上三角矩阵:);prin