《数值计算方法实验报告(例)(共19页).doc》由会员分享,可在线阅读,更多相关《数值计算方法实验报告(例)(共19页).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 年级:级一、实验目的二、实验内容三、实验环境四.实验方法五、实验过程1实验步骤2 关键代码及其解释3 调试过程六、实验总结1遇到的问题及解决过程2产生的错误及原因分析3体会和收获。 七、程序源代码:八、教师评语云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓
2、名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 年级: 一.试验目的:练习用数值方法求解给定的非线性方程。二.实验内容:求解人口方程: 要求误差小于。三.实验环境:PC计算机,FORTRAN、C、C+、VB任选一种。四.实验方法:牛顿法 牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:,当数列收敛时,其极限值即为方程的解。定理:给定方程1)设;2)在上不变号,且;3)选取,满足;则牛顿法产生的序列收敛于在内的唯一解。五.实验过程:1编程: 用C语言编出牛顿法的源程序。2. 开机, 打开C语言编译程序,键入所编程序源代码.3. 调试程序,
3、修改错误至能正确运行.4. 运行程序并输出计算结果.次数初值epsNxxf(xx)10.450.100.7.20.1530.100.0.30.10230.100.0.六实验总结: (1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得不当而使迭代不收敛或收敛慢,但若能保证(称为下山条件),则有可能收敛。把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。 (2)牛顿法要求在附近不为零。亦即只能是单根, 不能求重根。可用重根加速收敛法求重根。 (3)牛顿法的每一步迭代中,都要计算一次导数值,若计算比计算函数的近似值要麻烦的多。为了避免求导数,可用差商近似代替微商 此时牛顿迭代
4、法改为. (4) 由于人口方程来源于实际问题, 代表人口增长率, 其真实值不会太大, 初值不应取得过大.否则会得到该方程的另外一个解七、程序源代码: #include #define ep 1e-4 float f (float x) float y; y=100*exp(x)+43.5*(exp(x)-1)/x-156.4;return(y);float df (float x) float y; y=100*exp(x)+43.5*( x*exp(x)-exp(x)+1)/(x*x);return(y);float root(float x) float y; if (fabs)fep)y
5、=x;else y=root(x-f(x)/df(x);while(nN)return(y);main()float y,x0;printf(“enter x0:”);scanf(“%f”,&x0);y=root(x);printf(“%f%f,y,f(y);八、教师评语云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称:矩阵求逆实验编号:No. 2实验日期: 实验学时: 3学院: 数学与统计学院专业: 年级: 一.试验目的:练习用数值方法求逆矩阵。二.实验内容:求下面矩阵的逆矩阵:. 三. 实
6、验环境:PC计算机, C语言。四.实验方法: 列主元高斯约当消去法 列高斯约当消去法简述:高斯约当消去法是高斯消去法的另一种变种和改进。本算法与高斯消元法的区别在于:(1)不用乘数,改用行标准化,把位置上的元素先变为1。(2)高斯消元法只是把这一列中下面行的元素消为0,而高斯约当消去法则是把这一列元素除以外全部消为0。(3)高斯约当消去法进行n次消元,把第n列也消为只剩一个元素为1,其余均为0。因此,对于消元也是必要条件。高斯约当消去法算法为:五.实验过程:1编程: 用C语言编出全主元高斯约当消去法的源程序。2. 开机, 打开C语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正
7、确运行.4. 运行程序并输出计算结果.计算结果:MAT A-1 IS: .六. 实验总结: 高斯约当消去法算法具有以下优点和缺点: 算法优点:不用换行,换列,不用回代,精度高。 算法缺点:循环语句比较难组织,已选过主元素所在行所在列的元素不能再被选作主元素,解向量的分量也不一定按次序排列。七、程序源代码:#include “stdlib.h”#include “math.h”#include “stdio.h”int rinv(n,a)int n;double a;int*is,*js,i,j,k,l,u,v; double d ,p; is=malloc(n*sizeof(int); js=
8、malloc(n*sizeof(int); for (k=0;k=n-1;k+)d=0.0; for (i=k;k=n-1;i+) for (j=k;kd)d=p;isk=i; jsk=j; if(d+1.0=1.0) free(is); free(is);print(“err*not invn”); return(0); if(isk!=k) for(j=0;j=n-1;j+)u=k*n+j;v=isk*n+j; p=au;au=av;av=p;if(jsk!=k) for(i=0;i=n-1;i+)u=i*n+k;v=i*n+jsk; p=au;au=av;av=p;l=k*n+k;al=
9、1.0/al;for(j=0;j=n-1;j+) if(j!=k)u=k*n+j; au=au*al;for(i=0;i=n-1;i+)if(i!=k) for(j=0;j=n-1;j+)if(j!=k)u=i*n+j; au=au-ai*n+k*ak*n+j;for(i=0;i=0;k-)if(isk!=k) for(i=0;j=n-1;i+)u=i*n+k;v= i*n+isk; p=au;au=av;av=p; free(is); free(is); return(1);#include “stdio.h#include “rinv.c”main()int i,j; static dou
10、ble a33=-3,8,5,2,-7,4,1,9,-6; double b33; for (i=0;i=2;i+) for (j=0;j=2;j+)bij =aij; i=rinv(3,a) if(i!=0) printf(“MAT A IS:n”); for (i=0;i=2;i+) for (j=0;j=2;j+) printf(“%5.4f”,bij); printf(“n”); printf(“n”); printf(“MAT A-1 IS:n”); for (i=0;i=2;i+) for (j=0;j=2;j+) printf(“%5.4f”,bij); printf(“n”);
11、 printf(“n”); 八、教师评语云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 数学与应用数学年级: 级一.试验目的:练习线性方程组的直接解法。二.实验内容:求解如下三对角线方程组:.三.实验环境:PC计算机, C语言。四.实验方法:追赶法追赶法简述:追赶法主要用于解三对角线方程组,尤其是具有严格对角占优的三对角线方程。用克路特分解法将三对角线矩阵分解为A=LU: , 其中求解可通过求解两个三角方程组来实
12、现,其中五.实验过程:1编程: 用C语言编出追赶法的源程序。2. 开机, 打开C语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正确运行.4. 运行程序并输出计算结果.计算结果:x(1) = 46.1538 x(2) = 84.6154 x(3) = 92.3077 x(4) = 84.6154 x(5) = 46.1538六. 实验总结: 追赶法的中间运算没有数量级的很大变化,不会有严重的误差积累,所以此方法是比较稳定的。但在计算过程中要求不能为零,因此,并不是任何三对角线方程组均可用追赶法求解。七、程序源代码:#include “math.h”#include “stdio
13、.h”int treede(n,m,b,d)int n,m;double b,d;int k,j;float s; if(m!=(3*n-2)printf(“errn”);return(-2); for (k=0;k=0;k-)dk= dk- b3*k+1*dk+1; return(2) #include “stdio.h”#include “treede.c”main()int i; static double b13=4.0, 4.0, 4.0, 4.0, 4.0,-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0; static double d
14、5=100.0,200.0, 200.0, 200.0,100.0; if(treede(5,13,b,d)0) for (i=0;i=4;i+) printf(“x(%d)=%5.4n”,i+1,di);八教师评语: 云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 数学与应用数学年级: 级一.试验目的:练习线性方程组的迭代解法。二.实验内容:. 分别用雅可比(Jacobi)迭代法和高斯塞德尔(GaussSeid
15、el)迭代法求解下列线性方程组,且比较收敛速度,要求当是迭代终止。 1) 2).三.实验环境:PC计算机, C语言。四.实验方法: 雅可比(Jacobi)迭代法、高斯塞德尔(GaussSeidel)迭代法.1) 雅可比方法:用迭代法解线性方程组,设非奇异,且对角线元素, 把A分裂成三个矩阵之和A=L+D+U,其中则雅可比迭代法的分量形式为:雅可比迭代的矩阵形式为: 其中 2)高斯塞德尔迭代法:高斯塞德尔迭代法的分量形式为:.高斯塞德尔迭代法的矩阵形式为:, 其中 .五.实验过程:1编程: 用C语言编出追赶法的源程序。2. 开机, 打开C语言编译程序,键入所编程序源代码.3. 编译、运行上述程序
16、源代码,依提示输入方程组1)的系数矩阵及右端向量,记录运算结果。4. 对于方程组2),将上述程序源代码中有注释的代码中的3改为6,再编译、运行,依提示输入方程组2)的系数矩阵及右端向量,记录运算结果。 计算结果: 1) The approximate solution by Jacobin Method is .after 5 iterations.The approximate solution by G-S Method is .after 4 iterations.2) The approximate solution by Jacobin Method is .after 12 ite
17、rations.The approximate solution by G-S Method is .after 7 iterations.六. 实验总结:由于高斯塞德尔方法与雅可比法迭代阵不同,雅可比方法收敛并不能保证高斯塞德尔方法收敛,反之也如此。但运算结果表明当二者均收敛时,高斯塞德尔方法比雅可比方法收敛速度快。另一方面,高斯塞德尔方法算出一个新的分量就把先一次的分量覆盖,只需一组工作单元,算法更加简单。七:程序源代码:#define N 3 /*依具体情况,3可改为相应方程组的阶数*/#includemath.hvoid jacobi2(fioat mN N, float fN, fl
18、oat eps, long imax)double a,b,x,eps; int i, j, tail=0; long k; float err, sum xN, xkN; for(i=0;iN;i+) xki=0; k=1; while (k=imax) err=0; for(i=0;iN;i+0) sum=0; for (j=0;j=N;j+) if(j!=i) sum+=mi j*xkj; xi=(fi-sum)/mi i; err+=(xi-xki)*(xi-xki); for(i=0;iN;i+) xki=xi; if (sqrt (err)=eps) printf(“The app
19、roximate solution by Jacoban method isn”); for(i=0;iN;i+0) printf(“%fn”,xi); printf(“after %1d iterations. n”, k); tail=1; break; k+; if (!tail) printf(“nMaximum number of iteration exceeded. n”);void gauss_siedel2(float mN N, float fN, float eps, long imax) int i, j, tail=0; long k; float err, sum,
20、 xtmp, xN; for(i=0;iN;i+) xi=0; k=1; while (k=imax) err=0; for(i=0;iN;i+) xtmp=xi; sum=0; for (j=0;j=N;j+) if (j!=i) sum+=mi j*xj; xi=(fi-sum)/mi i; err+=(xi-xtmp)*(xi-xtmp); if (sqrt (err)=eps) printf(“The approximate solution by G-S method isn”); for(i=0;iN;i+0) printf(“%fn”,xi); printf(“after %1d
21、 iterations. n”, k); tail=1; break; k+; if (!tail) printf(“nMaximum number of iteration exceeded. n”);main() int I, j; float aN N, bN, trans; printf(“Please input the coefficiency matrix. n”); for(i=0;iN;i+) for (j=0;j=N;j+) scanf(“%f”, &trans); ai j=trans; printf(“Please input the ordinary vector.
22、n”); for(i=0;iN;i+) scanf(“%f”, &bi); printf(“n”); jacobi2(a,b,0.01,); guass_siedel2(a,b,0.01,);八教师评语:云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 数学与应用数学年级: 级一.试验目的:练习用数值方法计算矩阵特征值与特征向量。二.实验内容:计算矩阵的全部特征根与相应的特征向量。三.实验环境:PC计算机,C语言。
23、四.实验方法: 雅可比(Jacobi)过关法。 方法简述:先计算的非主对角线元素的平方和S(A),并记 , 将作为第一次过关数,在非主对角线元素中按行扫描,只要,就把作为主元素进行平面旋转变换,若,就让过关一遍扫描结束后继续进行第二遍扫描(原因是原来满足的过关元素,经过其他变换还有可能过不了关),直到扫到某一遍时,全都过关,再设第二道关口,重复前面的过程,又再设等关口,直到为止,其中是精度要求五.实验过程:1编程: 用C语言编出雅可比(Jacobi)过关法的源程序。2. 开机, 打开C语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正确运行.4. 运行程序并输出计算结果.计算结
24、果:;.六:实验总结: 雅可比过关法是雅可比方法的改进,是为消除雅可比方法因要选主元素而花费很多机器时间而设计的,从上述计算可看出雅可比过关法确有此优点。七:程序源代码:新建文件jcbj.c如下: #include”math.h” void jcbj(n,a,v,eps)int n;double a,v,eps;int i, j,p,q, u,w,t,s; double ff,fm,cn,sn,omega,x,y,d; for(i=0;in-1;i+) vi*n+i=1.0; for (j=0;j=n-1;j+) if(i!=j)vi*n+j=0.0; ff=0.0;for(i=0;in-1;
25、i+) for (j=0;j=n-1;j+) d=ai*n+j;ff=ff+d*d;ff=sqrt(2.0*ff);loop0:ff=ff(1.0*n);loop1:for(i=1;in-1;i+) for (j=0;jff) p=i; q=j; goto loop; if(ffeps)return;goto loop0:loop:u=p*n+1;w=p*n+p;s=q*n+q;x=-au;y=(as-aw)/2.0;omega=x/sqrt(x*y+y*y);if(y0.0)omega=-omega;sn=1.0+sqrt(1.0+-omega*omega);sn=omega/sqrt(2.
26、0*sn);fm=aw;aw=fm*cn*cn+as*sn*sn+au*omega;as=fm*sn*sn+as*cn*cn-au*omega;au=0.0;at=0.0;for(j=0;j=n-1;j+)if(j!=p)&(j!=q) u=p*n+j;w=q*n+j; fm=au;au=fm*cn+aw*sn; aw=-fm*sn+sn+aw*cn; for(i=0;in-1;i+) if(i!=p)&(i!=q) u=i*n+p;w=i*n+q; fm=au; au=fm*cn+aw*sn; aw=-fm*sn+sn+aw*cn; goto loop1;建立主函数文件“jcbj0.c”如下
27、: #include”stdio.h”#include”jcbj.c”main( )int i;j; double eps;static double a33= 1.0, 1.0,0.5,1.0, 1.0, 0.25, 0.5, 0.25, 2.0static double x7 ,b6=0.0,5.0,0.0,6.0,-2.0,6.0;eps=0.;jcbj(3,a,v,eps);for(i=0;i=2;i+) printf(“% 5,4fn”,ai i);printf(“nn”);for(i=0;i=2;j+)printf(“%5.4f”,vij); printf(“n”); 八教师评语:
28、云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 数学与应用数学年级: 级一.试验目的:练习用数值方法计算进行函数插值。二.实验内容:已知正弦函数表 0.50.70.91.11.31.51.71.90.47940.64420.78330.89120.96360.99750.99170.9463试分别计算与的近似值(用线性插值和抛物线插值),并估计它的误差。三.实验环境:PC计算机,FORTRAN、C、C+、VB任选
29、一种。四.实验方法:线性插值和抛物线插值法。 方法简述:五.实验步骤:1编程: 根据所用算法及选用语言编出源程序2. 开机, 打开所用语言系统输入所编源程序.3. 调试程序, 修改错误直至能正确运行.4. 运行程序并输出计算结果.计算结果:六实验总结: 七:程序源代码:八教师评语:云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期: 20152016学年第一学期成绩:指导教师: 李耀堂学生姓名:学生学号:实验名称: 实验编号:No. 实验日期: 实验学时: 3学院: 数学与统计学院专业: 年级: 级 一.试验目的:练习用数值方法计算定积分。二.实验内容: 用复化梯形求积公式和复化Simpson求积公式计算 , 并估计误差。三.实验环境:PC计算机,FORTRAN、C、C+、VB任选一种。四.实验方法:复化梯形求积公式和复化Simpson求积公式。 方法简述:五.实验步骤:1编程: 根据所用算法及选用语言编出源程序2. 开机, 打开所用语言系统输入所编源程序.3. 调试程序, 修改错误直至能正确运行.4. 运行程序并输出计算结果.计算结果:六实验总结: 七:程序源代码:八教师评语:专心-专注-专业