数值计算方法实验报告(例)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期:2015—2016学年第一学期成绩:指导教师:李耀堂学生姓名:学生学号:实验名称:实验编号:No.实验日期:实验学时:3学院:数学与统计学院专业:年级:级一、实验目的二、实验内容三、实验环境四.实验方法五、实验过程1实验步骤2关键代码及其解释3调试过程六、实验总结1.遇到的问题及解决过程2.产生的错误及原因分析3.体会和收获。七、程序源代码:八、教师评语云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期:2015—2016学年第一学期成绩:指导教师:李耀堂学生姓名:学生学号:实验名称:实验编号:No.实验日期:实验学时:3学院:数学与统计学院专业:年级:一.试验目的:练习用数值方法求解给定的非线性方程。二.实验内容:求解人口方程:)1(5.43e1004.156e要求误差小于410。三.实验环境:PC计算机,FORTRAN、C、C++、VB任选一种。四.实验方法:牛顿法牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:,2,1,0,)()(1kxfxfxxkkkk,当数列kx收敛时,其极限值x即为方程的解。定理:给定方程],[,0)(baxxf1)设0)()(bfaf;2))(xf在],[ba上不变号,且],[,0)(baxxf;3)选取],[0bax,满足0)()(00xfxf;则牛顿法产生的序列kx收敛于0)(xf在],[ba内的唯一解x。五.实验过程:1.编程:用C语言编出牛顿法的源程序。2.开机,打开C语言编译程序,键入所编程序源代码.3.调试程序,修改错误至能正确运行.4.运行程序并输出计算结果.次数初值epsNxxf(xx)10.450.000001100.1528867.12060920.1530.000001100.1022540.16822630.10230.000001100.1009990.000107六.实验总结:(1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得不当而使迭代不收敛或收敛慢,但若能保证)()(1KKxfxf(称为下山条件),则有可能收敛。把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。(2)牛顿法要求)(xf在x附近不为零。亦即x只能是单根,不能求重根。可用重根加速收敛法求重根。(3)牛顿法的每一步迭代中,都要计算一次导数值,若计算)(xf比计算函数的近似值要麻烦的多。为了避免求导数,可用差商近似代替微商11)()()(KKKKKxxxfxfxf此时牛顿迭代法改为)()()()(111KKKKKKKxxxfxfxfxx.(4)由于人口方程来源于实际问题,代表人口增长率,其真实值不会太大,初值不应取得过大.否则会得到该方程的另外一个解七、程序源代码:#includemath.h#defineep1e-4floatf(floatx){floaty;y=100*exp(x)+43.5*(exp(x)-1)/x-156.4;return(y);}floatdf(floatx){floaty;y=100*exp(x)+43.5*(x*exp(x)-exp(x)+1)/(x*x);return(y);}floatroot(floatx){floaty;if(fabs)fep)y=x;elsey=root(x-f(x)/df(x));while(nN)return(y);}main(){floaty,x0;printf(“enterx0:”);scanf(“%f”,&x0);y=root(x);printf(“%f%f’,y,f(y));八、教师评语云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法学期:2015—2016学年第一学期成绩:指导教师:李耀堂学生姓名:学生学号:实验名称:矩阵求逆实验编号:No.2实验日期:实验学时:3学院:数学与统计学院专业:年级:一.试验目的:练习用数值方法求逆矩阵。二.实验内容:求下面矩阵的逆矩阵:491472583A.三.实验环境:PC计算机,C语言。四.实验方法:列主元高斯—约当消去法列高斯—约当消去法简述:高斯—约当消去法是高斯消去法的另一种变种和改进。本算法与高斯消元法的区别在于:(1)不用乘数ikm,改用行标准化,把)(kkka位置上的元素先变为1。(2)高斯消元法只是把)(kkka这一列中)(kkka下面行的元素消为0,而高斯—约当消去法则是把)(kkka这一列元素除1)(kkka以外全部消为0。(3)高斯—约当消去法进行n次消元,把第n列也消为只剩一个元素为1,其余均为0。因此,0n对于消元也是必要条件。高斯—约当消去法算法为:1,)1,,1,()1,,1,(/,,2,1niikjikijijkkkjkjaPRINTxnkkjaaaajinkkjaaank五.实验过程:1.编程:用C语言编出全主元高斯—约当消去法的源程序。2.开机,打开C语言编译程序,键入所编程序源代码.3.调试程序,修改错误至能正确运行.4.运行程序并输出计算结果.计算结果:MATA-1IS:0213.01489.01064.00936.00553.00681.02851.03957.00255.0.六.实验总结:高斯——约当消去法算法具有以下优点和缺点:算法优点:不用换行,换列,不用回代,精度高。算法缺点:循环语句比较难组织,已选过主元素所在行所在列的元素不能再被选作主元素,解向量的分量也不一定按次序排列。七、程序源代码:#include“stdlib.h”#include“math.h”#include“stdio.h”intrinv(n,a)intn;doublea[];{int*is,*js,i,j,k,l,u,v;doubled,p;is=malloc(n*sizeof(int));js=malloc(n*sizeof(int));for(k=0;k=n-1;k++){d=0.0;for(i=k;k=n-1;i++)for(j=k;k=n-1;j++){l=i*n+j;p=fabs(a[l]);if(pd){d=p;is[k]=i;js[k]=j;}}if(d+1.0==1.0){free(is);free(is);print(“err**notinv\n”);return(0);}if(is[k]!=k)for(j=0;j=n-1;j++){u=k*n+j;v=is[k]*n+j;p=a[u];a[u]=a[v];a[v]=p;}if(js[k]!=k)for(i=0;i=n-1;i++){u=i*n+k;v=i*n+js[k];p=a[u];a[u]=a[v];a[v]=p;}l=k*n+k;a[l]=1.0/a[l];for(j=0;j=n-1;j++)if(j!=k){u=k*n+j;a[u]=a[u]*a[l];}for(i=0;i=n-1;i++)if(i!=k)for(j=0;j=n-1;j++)if(j!=k){u=i*n+j;a[u]=a[u]-a[i*n+k]*a[k*n+j];}for(i=0;i=n-1;i++)if(i!=k){u=i*n+k;a[u]=-a[u]*a[l];}}for(k=n-1;k=0;k-){if(is[k]!=k)for(i=0;j=n-1;i++){u=i*n+k;v=i*n+is[k];p=a[u];a[u]=a[v];a[v]=p;}}free(is);free(is);return(1);}#include“stdio.h#include“rinv.c”main(){inti,j;staticdoublea[3][3]={{-3,8,5},{2,-7,4},{1,9,-6}};doubleb[3][3];for(i=0;i=2;i++)for(j=0;j=2;j++)b[i][j]=a[i][j];i=rinv(3,a)if(i!=0){printf(“MATAIS:\n”);for(i=0;i=2;i++){for(j=0;j=2;j++)printf(“%5.4f”,b[i][j]);printf(“\n”);}printf(“\n”);printf(“MATA-1IS:\n”);for(i=0;i=2;i++){for(j=0;j=2;j++)printf(“%5.4f”,b[i][j]);printf(“\n”);}printf(“\n”);}}八、教师评语云南大学数学与统计学实验教学中心实验报告课程名称:数值计算方法实验学期:2015—2016学年第一学期成绩:指导教师:李耀堂学生姓名:学生学号:实验名称:实验编号:No.实验日期:实验学时:3学院:数学与统计学院专业:数学与应用数学年级:级一.试验目的:练习线性方程组的直接解法。二.实验内容:求解如下三对角线方程组:100200200200100414411411411454321xxxxx.三.实验环境:PC计算机,C语言。四.实验方法:追赶法追赶法简述:追赶法主要用于解三对角线方程组,尤其是具有严格对角占优的三对角线方程。用克路特分解法将三对角线矩阵nnnnniiibacbacbacbacbA11122211分解为A=LU:nniiL33221,11111121niU其中11111111,,3,2,,;,,3,2,nnnniiiiiiiibnicbcbnia求解fAx可通过求解两个三角方程组yUxfLy,来实现,其中).1,2,,2,1)(,).,,2,1(/)(,11111nnixyxyxniyfyfyiiiinniiiii五.实验过程:1.编程:用C语言编出追赶法的源程序。2.开机,打开C语言编译程序,键入所编程序源代码.3.调试程序,修改错误至能正确运行.4.运行程序并输出计算结果.计算结果:x(1)=46.1538x(2)=84.6154x(3)=92.3077x(4)=84.6154x(5)=46.1538六.实验总结:追赶法的中间运算没有数量级的很大变化,不会有严重的误差积累,所以此方法是比较稳定的。但在计算过程中要求),,3,2,1(nii不能为零,因此,并不是任何三对角线方程组均可用追赶法求解。七、程序源代码:#include“math.h”#include“stdio.h”inttreede(n,m,b,d)intn,m;doubleb[],d[];{intk,j;floats;if(m!=(3*n-2)){printf(“err\n”);return(-2);}for(k=0;k=n-2;k++){j=3*k;s=b[j];if(fabs(s)+1.0=1.0){printf(“fail\n”);return(0);}b[j+1]=b[j+1]/s;d[k]=d[k]/s;b[j+3]=b[j+3]-b[j+2]*b[j+1];d[k+1]=d[k+1]-b[j+2]*d[k];}s=b[3*n-3];if(fabs(s)+1.0=1.0){printf(“fail\n”);return(0);}d[n-1]=d[n-1]/s;for(k=n-2;k=0;k-)d[k]=d[k]-b[3*k+1]*d[k+1];return(2)}#

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功