为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数值实验报告 - 侯瑞祥

2017-11-24 15页 doc 95KB 35阅读

用户头像

is_594886

暂无简介

举报
数值实验报告 - 侯瑞祥数值实验报告 - 侯瑞祥 . 本科实验报告 课程名称: 计算机数值方法 实验项目: 方程求根 实验地点: 致远楼B301 专业班级: 软件1216 学号:2012005403 学生姓名: 侯瑞祥 指导教师: 田华 2014年 5 月 21 日 .. . 学生姓名 侯瑞祥 实验成绩 实验名称 实验一 方程求根 实验目的和要求 熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择 32上述方法中的两种方法求方程:二分法f(x)=x+4x-10=0在[1,2]内的一个实根,且要 *-5 ...
数值实验报告 - 侯瑞祥
数值实验报告 - 侯瑞祥 . 本科实验报告 课程名称: 计算机数值方法 实验项目: 方程求根 实验地点: 致远楼B301 专业班级: 软件1216 学号:2012005403 学生姓名: 侯瑞祥 指导教师: 田华 2014年 5 月 21 日 .. . 学生姓名 侯瑞祥 实验成绩 实验名称 实验一 方程求根 实验目的和要求 熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择 32上述方法中的两种方法求方程:二分法f(x)=x+4x-10=0在[1,2]内的一个实根,且要 *-5 求满足精度|x-x|<0.5×10n 实验内容和原理 二分法:函数f(x)在区间(x,y)上连续,先在区间(x,y)确定a与b,若f(a),f(b)异号,说明在区间(a,b)内存在零点,然后求f[(a+b)/2]。 假设F(a)<0,F(b)>0,a0,则区间(a,(a+b)/2)内存在零点,(a+b)/2?b; 返回?重新循环,不断接近零点。通过每次把f(x)的零点所在区间收缩一半的方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值。 牛顿法:把非线性函数f(x)在x0处展开成泰勒级数,取其线性部分,作为非线性方程f(x)=0的近似方程,得到解x1=x0-f(x0)/f’(x0),再把f(x)在x1处展开为泰勒级数,取其线性部分f(x)=0的近似方程,如此进行下去,得到牛顿法的迭代公式:Xn+1=Xn-f(Xn)/f’(Xn) 主要仪器设备 Vc++、WIN-TC、HP6470b 实验记录 牛顿法, #include void main() { float x[10]={1.5}; float y,w; int n; y=x[n]*x[n]*x[n]+4*x[n]*x[n]-10; w=3*x[n]*x[n]+8*x[n];//对原函数进行求导 x[1]=1.5-(1.5*1.5*1.5+4*1.5*1.5-10)/(3*1.5*1.5+8*1.5); while(n=0,n>=0,n++){ while(x[n+1]-x[n]<0.000005) { x[n+1]=x[n]-y/w;//牛顿法的迭代式 .. . } } printf("%f\n",x[n]); getch(); } 二分法, #include void main() { float a=1.0,b=2.0; int n; float mid; for(n=0;n<18;n++)//根据1/2^n<=0.5*10^(-3)可得迭代18次后停止迭代 { mid=(a+b)/2; if ((a*a*a+4*a*a-10)*(mid*mid*mid+4*mid*mid-10)<0)//二分法的中心思想 { b=mid; } else { a=mid; } } printf("%f\n",mid); } 实验结果和 牛顿法: 二分法: 分析: 使用二分法和牛顿法均能计算出方程的根~但利用牛顿法要比二分法计算的次数 少~并且能够较早的达到精度要求。 .. . 心得体会 本次数值计算方法程序设计实验是在不断的习题练习中跳脱出来~直接面对实用性较强的程序代码编写。效果很好~不仅加深对二分法、牛顿法的理解~还加强了实际用运能力。将理论成功地转化成实践结果~虽然在实验过程中有很多地方并不是一步到位~但是经过不断的改进~最终达到了目的~这也是对自己能力的一次锻炼。 .. . 本科实验报告 课程名称: 计算机数值方法 实验项目: 线性方程组的直接求法 实验地点: 致远楼B301 专业班级: 软件1216 学号:2012005403 学生姓名: 侯瑞祥 指导教师: 田华 2014年 5 月 21 日 .. . 实验名称 实验二 线性方程组的直接求解 实验目的和要求 合理利用Gauss消元法求解下列方程组: 123x14,,,,,,1,,,,,,012x,8 2,,,,,, ,,,,,,241x133,,,,,, 实验内容 高斯消元法: 将原方程组化为三角形方阵的方程组: l=a/aikikkk a= a- l* a ijijikkj ( k=1,2,…,n-1 i=k+1,k+2, …,n j=k+1,k+2, …,n+1 ) 由回代过程求得原方程组的解: x= a/ a nnn+1nn x=( a-?a x)/ a kkn+1kjjkk 主要仪器设备 VC++、WIN-TC、HP6470b 实验记录 #include void main() { int i,j,xishu3; float d,e,f; int a[3][4]={{1,2,3,14},{0,1,2,8},{2,4,1,13}};//增广矩阵 int xishu1=a[1][0]/a[0][0];//l21的系数 int xishu2=a[2][0]/a[0][0];//l31的系数 for(j=0;j<4;j++) a[1][j]=a[1][j]-xishu1*a[0][j];//将,第二行-xishu1*,第一行,,赋值给 第二行 for(j=0;j<4;j++) a[2][j]=a[2][j]-xishu2*a[0][j];//将,第三行-xishu2*,第一行,,赋值 给第三行 for(i=0;i<3;i++) { .. . for(j=0;j<4;j++) printf("%3d",a[i][j]);//将第一列对角线以下元素变为0 printf("\n"); } xishu3=a[2][1]/a[1][1];//l32的系数 for(j=0;j<4;j++) { a[2][j]=a[2][j]-xishu3*a[1][j];//将,第三行-xishu3*,第二行,,赋值给第 三行 } for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n"); } f=a[2][3]/a[2][2];//x3的值 printf("%f",f); printf("\n"); e=(a[1][3]-a[1][2]*f)/a[1][1];//x2的值 printf("%f",e); printf("\n"); d=(a[0][3]-a[0][2]*f-a[0][1]*e)/a[0][0];//x1的值 printf("%f",d); printf("\n"); } 实验结果和分析 Gauss消元法 分析: 当矩阵的主元素不为零并且顺序主子式不为零是才可使用高斯消元法~思路为 .. . 先消元、再回代~由程序段可以发现~始终消去对角线下方的元素~节约了计算时间。 心得体会 本实验最大的障碍时数组定义和使用~由于对c语言的遗忘~所以高斯消元法程序编写过程相对来说花了好长时间去纠正各种语法。深深感觉到程序学习的不足。不过最后通过查阅资料,如C语言书等,最后问题得到了解决。通过本次的实验深深感觉到所有的事情必须动手去做才能得到提高~不能纸上谈兵~遇到困难要想办法去解决~不能一味地逃避~只有这样自己的能力才能提高。 .. . 本科实验报告 课程名称: 计算机数值方法 实验项目: 线性方程组的迭代求法 实验地点: 致远楼B301 专业班级: 软件1216 学号:2012005403 学生姓名: 侯瑞祥 指导教师: 田华 2014年 5 月 21 日 .. . 实验名称 实验三 线性方程组的迭代求解 实验目的和要求 使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。 实验内容 设线性方程组 Ax=b 的系数矩阵A可逆,且主对角元素a,a,…,a均不为零,令 1122nnD=diag(a,a,…,a) 1122nn 并将A分解成 A=(A-D)+D 从而线性方程组可写成 Dx=(D-A)x+b 则有迭代公式 (k+1)(k)x=Bx+f 11-1-1其中,B=I-DA,f=Db。 11 主要仪器设备 Vc++、WIN-TC、HP6470b 实验记录 雅克比迭代法: #include void main(){ int k; int i,j; int x[2][10]; int y[2][10]; x[1][0]=0, x[2][0]=0, x[3][0]=0; for (k=0;k<10;k++) { x[1][k+1]=0.1*x[2][k]+0.2*x[3][k]+0.72; x[2][k+1]=0.1*x[1][k]+0.2*x[3][k]+0.83; x[3][k+1]=0.2*x[1][k]+0.2*x[2][k]+0.84; } for(i=0;i<2;i++) { .. . for(j=0;j<10;j++){ y[0][j]=x[1][k+1]; y[1][j]=x[2][k+1]; y[2][j]=x[3][k+1]; printf("%5d",y[i][j]); } } getch(); } 实验结果和分析 雅克比迭代 分析: 使用高斯-赛德尔和雅克比迭代都可以求出方程组的解~但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少~收敛快~能够更早的达到精度要求~但是这个结论在一定条件下才是对的~甚至有这样的方程组~雅克比收敛而高斯——赛德尔迭代法却是发散的。 雅克比定义的sum只需有一个~而高斯赛德尔需要两个。 心得体会 这次试验算是比较成功~要归功于授课时候的认真听讲。程序编写之前~对书本的理论知识进行了进一步的探索。预习准备工作很彻底~自然随后的一切也都很顺利。 好好学习~好好编程~好好思考。 .. . 本科实验报告 课程名称: 计算机数值方法 实验项目: 代数插值和最小二乘法拟合 实验地点: 致远楼B301 专业班级: 软件1216 学号:2012005403 学生姓名: 侯瑞祥 指导教师: 田华 2014年 5 月 21 日 .. . 实验名称 实验四 代数插值和最小二乘法拟合 实验目的和要求 使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下所示,运用插值方法,求f(0.596)的近似值。 x 0.40 0.55 0.65 0.80 0.90 1.05 f(x0.4100.5780.6960.8881.0261.253 ) 75 15 75 11 52 86 实验内容 设函数在区间[a,b]上n+1互异节点x,x,…,x上的函数值分别为y,y,…,y,求n次插值01n01n多项式P(x),满足条件 n P(x)=y, j=0,1,…,n njj 令 L(x)=yl(x)+yl(x)+…+yl(x)= ?yl(x) n0011nnii 其中l(x),l(x),…, l(x) 为以x,x,…,x为节点的n次插值基函数, 01n01n 则Ln(x)是一次数不超过n的多项式,且满足 L(x)=y, L=0,1,…,n njj 再由插值多项式的唯一性,得 P(x)?L(x) nn 流程图如下: 建立正规方程组: j+kj?(?x)a=?xy ,j=0,1,…,n ikii 平方误差: 2 kI=?(?ax-y)kii 对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类Φ 中,求p(x)?Φ, 222使误差的平方和E最小,E=?[p(Xi)-Yi]。 主要仪器设备 Vc++、WIN-TC、HP6470b 实验记录 #include void main(){ float y[6]={0.41075,0.57815,0.69675,0.88811,1.02652,1.25386};//将题目中给定的函数值存放在数组y中 .. . float l[6];//定义数组l~用来存放基函数的值 float x[6]={0.40,0.55,0.65,0.80,0.90,1.05},x1=0.596; float Lx; l[0]=(x1-x[1])*(x1-x[2])*(x1-x[3])*(x1-x[4])*(x1-x[5])/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3])*(x[0]-x[4])*(x[0]-x[5])); l[1]=(x1-x[0])*(x1-x[2])*(x1-x[3])*(x1-x[4])*(x1-x[5])/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3])*(x[1]-x[4])*(x[1]-x[5])); l[2]=(x1-x[1])*(x1-x[0])*(x1-x[3])*(x1-x[4])*(x1-x[5])/((x[2]-x[1])*(x[2]-x[0])*(x[2]-x[3])*(x[2]-x[4])*(x[2]-x[5])); l[3]=(x1-x[1])*(x1-x[2])*(x1-x[0])*(x1-x[4])*(x1-x[5])/((x[3]-x[1])*(x[3]-x[2])*(x[3]-x[0])*(x[3]-x[4])*(x[3]-x[5])); l[4]=(x1-x[1])*(x1-x[2])*(x1-x[3])*(x1-x[0])*(x1-x[5])/((x[4]-x[1])*(x[4]-x[2])*(x[4]-x[3])*(x[4]-x[0])*(x[4]-x[5])); l[5]=(x1-x[1])*(x1-x[2])*(x1-x[3])*(x1-x[4])*(x1-x[0])/((x[5]-x[1])*(x[5]-x[2])*(x[5]-x[3])*(x[5]-x[4])*(x[5]-x[0])); Lx=l[0]*y[0]+l[1]*y[1]+l[2]*y[2]+l[3]*y[3]+l[4]*y[4]+l[5]*y[5]; printf("%f",Lx); getch(); } 实验结果和分析 拉格朗日插值法最重要的是基函数的求解,进而求得插值多项式,此实验结果精度自动为小数点后六位,而如果手算的话精度可以更精确,本人猜测可能是计算机的精度所限。 心得体会: 要求插值多项式,可以通过求方程组的解得到,但是这样不但计算复杂,且难于得到多项式的简单表达式,考虑简单的插值问题于是就有了拉格朗日插值法,此插值法的优点是插值多项式特别容易建立,核心是基函数的求解,相比于最初的求解多项式的方法有了很大的改进,无论是代码量还是内存的占用后者都占有较大优势。所以通过此次实验我深刻感受到一个正确的方向是多么重要,做事情不能墨守成规,要善于创新,寻找更好的解决方法。 ..
/
本文档为【数值实验报告 - 侯瑞祥】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索