《计算方法课程设计》word版.doc_第1页
《计算方法课程设计》word版.doc_第2页
《计算方法课程设计》word版.doc_第3页
《计算方法课程设计》word版.doc_第4页
《计算方法课程设计》word版.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算方法课程设计摘要:计算方法就是将要求解的数学模型简化成一系列算术运算和逻辑运算,以便在计算机上求出问题的数值解,并对算法的收敛性,稳定性和误差进行分析。关键词:计算方法;插值法;数学思想;算法一、 简介1.引言 计算机科学和工程设计中应用日益广泛,它已经成为从事计算机工程计算的极为有用的工具。 随着科学技术的突飞猛进,无论是工业生产还是国防尖端技术,都有大量复杂的数值计算问题需要解决。在处理工程实际和科学技术中的具体技术问题时,应该先把具体问题抽象为数学问题,即建立起能描述并等价代替该实际问题的模型,以得出所欲求解的结果来。数学是现代文化的重要组成部分,数学思想方法向一切领域渗透,数学的应用越来越被社会所重视。能够运用所学知识解决实际问题,使学生形成用数学的意识,这是把数学教育转到提高公民素质教育轨道的一个重要措施。目前,大部分学生动手能力差,应用意识弱。长此以往,必将学而无用,适应不了社会发展的需要。如何培养学生的数学应用意识,针对计算方法谈谈我的学习体会。2.内容 在第一章数值计算,我了解到数值的计算方法就是将要求解的数学模型简化成一系列算术运算和逻辑运算,以便在计算机上求出问题的数值解,并对算法的收敛性,稳定性和误差进行分析。而这里的“算法”,不是单纯的数学公式,而且是指由基本运算和运算顺序的规定所组成的整个解题方案。在研究算法的同时,还必须正确掌握误差的作用。否则,一个合理的算法也可能得出一个错误的结果。为了防止误差传播和积累带来的危害,以提高计算的稳定性,在数值计算中应注意以下几点: (1)选用稳定性好的计算公式。 (2)简化计算步骤和公式,设法减少运算次数。 (3)合理安排运算顺序,避免大数淹没小数;多个数相加时,其绝对值小者先加;多个数相乘时,其有效位数多者先乘。 (4)避免两相近数相减。 (5)避免绝对值太小的数作为除数。3插值法 在生产和科研中的出现的函数是多种多样的,常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数F(x)在区间a,b上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值。显然,要利用这张函数表来分析函数F(x)的形态,甚至求出其他一些点上的函数值可能是非常困难的。在有些情况下,虽然可以写出函数F(x)的解析式,但由于结构相当复杂,使用起来不方便。面对这些情况,总希望根据所得函数表,构造某个简单函数P(x)作为F(x)的近似值。像拉格朗日插值多项式,牛顿插值多项式(向前/后差分与牛顿向前插值公式)等方法,在实际的应用起着很重要的作用。 插值法是一个古老而有实用的数值方法。它不仅是数值微分,数值积分,函数逼近以及微分方程数值解等数值分析的基础,而且在许多实际问题中,也有直接的应用。二、算法1C语言算法及运行截图(1)(2)矩阵的三角分解(3)对称方程组的平方根法(4)产生任意均值与方差的正态分布的随机数序列(5)切比雪夫曲线拟合(6)艾尔米特插值(7)最小二乘曲线拟合(8)变步长梯形求积法 (9)勒让德-高斯求积法(10)龙贝格求积法(11)高斯约当消去法2C+语言算法及运行截图(1)选主元高斯消去法 用逐次消去未知数的方法把原方程组AXb化为与其等价的三角形方程组,而求解三角形方程组可用回代的方法求解。其中,每一步选取系数矩阵中绝对值最大的元素作为主元素。 三、总结在学习计算方法中, 如何培养学生的数学应用意识,谈谈我的学习体会。1.认清数学知识的实用性数学知识的应用是广泛的,大至宏观的天体运动,小至微观的质子、中子的研究,都离不开数学知识,甚至某些学科的生命力也取决于对数学知识的应用程度。马克思曾指出:“一门科学只有成功地应用了数学时,才算真正达到了完善的地步。”生活中充满着数学,数学教师要善于从学生的生活中抽象出数学问题,使学生感到数学就在自己身边,从而产生兴趣。比如,“比的意义”讲完之后,可让学生了解自己身上的许多有趣的比;体重比血液之比大约为:,身高与脚长之比大约为:。知道这些有趣的比有什么用途呢?如果要知道自己血液的重量,只要称一称自身的体重,马上就可以算出来;如果你当了公安人员,凭借坏人的脚印就可以估计到坏人的身高。再比如,学完了利息的计算公式:利息本金利率期数,就可以让学生把自己节省的钱存入银行,并且预算一定时间后得到的利息。2.课后应该联系实际从知识的掌握到知识的应用不是一件简单、自然而然就能实现的事情,没有充分的、有意识的培养,同学的应用意识是不会形成的。学习中应该注重从具体的事物提炼数学问题,这引导我们自己联系在日常生活中的一些问题用数学知识来解决,这有助于学生数学应用意识的形成。比如在讲“行程应用题”时,利用这样一个生活中常遇到的问题:甲乙两地有三条公路相通,通常情况下,由甲地去乙地我们选择最短的一条路(省时,省路);特殊情况下,如果最短的那条路太拥挤,在一定时间内由甲地赶到乙地我们就选择另外的一条路,宁肯多走路,加快步伐(速度),来保证时间(时间一定,路程与速度成正比)。从数学角度给学生分析这个问题用于“行程应用题”,是路程、时间、速度三者关系的实际应用。又比如,在讲“解直角三角形”时,可利用这样一个实际问题。修建某扬水站时,要沿斜坡辅设水管,从剖面图看到,斜坡与水平面所成的可用测角器测出,水管的长度也可直接量得,当水管辅到处时,设离水平面的距离为,如果你是施工人员,如何测得处离水平面的高度?有的同学提出从处向处钻个洞,测洞深;有的同学反对,因为根据实际情况,这样做费力;有的同学又反对,因为这不是费力问题,点无法确定。这实在是一个施工中经常遇到的问题,这一问题的提出可以使我们感到具体的实际问题就在自己身边等待解决,增强了主动意识,激发了兴趣。3.开展数学知识应用竞赛数学知识应用竞赛实质是由“知识型人才”向“智能型人才”过渡的教育策略。自己区队定期开展数学知识应用竞赛活动,这是培养自己用数学意识的好形式。竞赛的内容可以制作教具、模型、实地测量、讲解实物、计算实际问题、面画(与比例、平行、垂直、对抽等数学知识有关的)。此类竞赛与书面形式的竞赛相比,由于形式新颖、内容丰富、实际操作性强、应用知识灵活,可以吸引很多学生来参加,有效地促进数学教学质量的提高,同学们的应用能力也得到很好地培养。4.加强课外实践实践对于知识的理解、掌握和熟练运用起着重要作用。听到的终会忘掉、看到的才能记住,亲身体验过的才会理解和运用。因此,要加强课外实践活动,比如,“垂线段最短”性质学完了,利用体育活动时间让学生跳远,并测出自己的跳远成绩;等分圆周学完了,让学生制作五角星图案;统计初步知识学完了,让学生自己估算学习成绩波动情况等等。这样做,学生既理了知识,又学会了解决实际问题的方法。经常让学生去实践,运用所学知识解决实际问题,学生应用数学的意识就会逐渐形成。这也是课堂教学转变教育观念,实施素质教育的有效途径。我们应该把科学技术各领域的问题通过建立数学模型与数学产生了紧密的联系,但实际应用中所导出的数学模型往往不能方便地求出精确解,只能简化模型或利用其他方法求出近似解,数值计算方法就是求模型近似解的重要方法。而对精度的要求和数值方法的又直接影响到计算量的大小,因此数值方法的构造便是关键。本课程的目的是应用为主,理论为辅,使学生掌握有关代数、微积分和微分方程的常见数值方法的构造原理和使用方法,并能作简单的理论(方法的误差、方法的稳定性、所研究问题的性态等)分析,同时要求学生掌握一定的计算机编程技巧,能将常见的数值方法编写成计算机程序,并且能应用到实际中去。参考文献1李庆扬,王能超,易大义,数值分析M,西安:西安电子科技大学出版社。2 谭浩强,C程序设计M,合肥:中国科学技术大学出版社。附录一、界面程序清单#include #include #include voidalgorithm1(void) system(./8chir0);voidalgorithm2(void) system(./8hmt0);voidalgorithm3(void) system(./8pirl0);voidalgorithm4(void) system(./9ffts0);voidalgorithm5(void) system(./4lluu0);voidalgorithm6(void) system(./6chlk0);voidalgorithm7(void) system(./6gsdl0);voidalgorithm8(void) system(./9lrgs0);voidalgorithm9(void) system(./9romb0);voidalgorithm10(void) system(./3grns0);intmain(void) int i; char name2; initscr(); move(1,2); printw( a-Chebyshey); printw( b-Hermite); printw( c-least square method); printw( d-echelon); printw( e-triangular decomposition); printw( f-Cholesky); printw( g-Gauss-Seidil); printw( h-Legendre-Gauss); printw( i-Romberg); printw( j-normal distribution); /* sleep(5);*/ move(5, 15); printw(%s, Algorithm:); /* system(./b);*/ move(6,15);/*for (i=0;i=11;i+) getstr(name); if (*name = a) algorithm1(); sleep(2); clear(); move(6,15); if (*name = b) algorithm2(); sleep(2); clear(); move(6,15); if (*name = c) algorithm3(); sleep(2); clear(); move(6,15); if (*name = d) algorithm4(); sleep(2); clear(); move(6,15); if (*name = e) algorithm5(); sleep(2); clear(); move(6,15); if (*name = f) algorithm6(); sleep(2); clear(); move(6,15); if (*name = g) algorithm7(); sleep(2); clear(); move(6,15); if (*name = h) algorithm8(); sleep(2); clear(); move(6,15); if (*name = i) algorithm9(); sleep(2); clear(); move(6,15); if (*name = j) algorithm10(); sleep(2); printw(Programming is over!) if (*name) printw(%s,algorithm can not find!);*/*loop:switch(*name) case a: algorithm1(); break; case b: algorithm2(); break; case c: algorithm3(); break; case d: algorithm4(); break; default: printw(%s,algorithm error); break;*/for (i=0;i=11;i+) getstr(name); switch(*name) case a: algorithm1(); sleep(2); clear(); move(6,15); break; case b: algorithm2(); sleep(2); clear(); move(6,15); break; case c: algorithm3(); sleep(2); clear(); move(6,15); break; case d: algorithm4(); sleep(2); clear(); move(6,15); break; case e: algorithm5(); sleep(2); clear(); move(6,15); break; case f: algorithm6(); sleep(2); clear(); move(6,15); break; case g: algorithm7(); sleep(2); clear(); move(6,15); break; case h: algorithm8(); sleep(2); clear(); move(6,15); break; case i: algorithm9(); sleep(2); clear(); move(6,15); break; case j: algorithm10(); sleep(2); printw(Programming is over!); break; default: printw(%s,algorithm can not find!); break; refresh(); sleep(2); endwin(); exit(EXIT_SUCCESS);二、C语言程序清单1void grns(u,g,r,n,a)int n;double u,g,*r,a; int i,k,m; double s,w,v,t; s=65536.0; w=2053.0; v=13849.0; for (k=0; k=n-1; k+) t=0.0; for (i=1; i=12; i+) *r=(*r)*w+v; m=(int)(*r/s); *r=*r-m*s; t=t+(*r)/s; ak=u+g*(t-6.0); return;2#include stdio.h#include lib.hmain() int i,j; double u,g,r,a50; r=3.0; u=1.0; g=1.5; printf(n); grns(u,g,&r,50,a); for (i=0; i+9; i+) for (j=0; j+4; j+) printf(%10.71f ,ai*5+j); printf(n); printf(n);3#include stdio.h#include math.hint lluu(a,n,l,u)int n;double a,l,u;int i,j,k,w,v,ll; for (k=0;k=n-2;k+) ll=k*n+k; if (fabs(all)+1.0=1.0) printf(failn); return(0); for (i=k+1;i=n-1;i+) w=i*n+k;aw=aw/all; for (i=k+1;i=n-1;i+) w=i*n+k; for (j=k+1;j=n-1;j+) v=i*n+j; av=av-aw*ak*n+j; for (i=0;i=n-1;i+) for (j=0;j=i;j+) w=i*n+j;lw=aw;uw=0.0; w=i*n+i; lw=1.0;uw=aw; for(j=i+1;j=n-1;j+) w=i*n+j;lw=0.0;uw=aw; return(1); 4#include stdio.h#include lib.hmain()int i,j; static double l44,u44; static double a44=2.0,4.0,4.0,2.0,3.0,3.0,12.0,6.0,2.0,4.0,-1.0,2.0,4.0,2.0,1.0,1.0; i=lluu(a,4,l,u); if (i!=0) printf(MAT L IS:n); for(i=0;i=3;i+) for(j=0;j=3;j+) printf(%13.7e,lij); printf(n); printf(n); printf(MAT U IS:n); for(i=0;i=3;i+) for(j=0;j=3;j+) printf(%13.7e,uij); printf(n); printf(n); 5#include math.h#include stdio.hint chlk(a,n,m,d)int n,m;double a,d;int i,j,k,u,v; if (a0+1.0=1.0)|(a00.0) printf(failn); return(-2); a0=sqrt(a0); for (j=1;j=n-1;j+) aj=aj/a0; for (i=1;i=n-1;i+) u=i*n+i; for (j=1;j=i;j+) v=(j-1)*n+i; au=au-av*av; if (au+1.0=1.0)|(au0.0) printf(failn); return(-2); au=sqrt(au); if (i!=(n-1) for (j=i+1;j=n-1;j+) v=i*n+j; for (k=1;k=i;k+) av=av-a(k-1)*n+i*a(k-1)*n+j; av=av/au; for (j=0;j=m-1;j+) dj=dj/a0; for (i=0;i=n-1;i+) u=i*n+i;v=i*m+j; for (k=1;k=i;k+) dv=dv-a(k-1)*n+i*d(k-1)*m+j; dv=dv/au; for (j=0;j=1;k-) u=(k-1)*m+j; for (i=k;i0) for (i=0;i=3;i+) printf(x(%d)=%13.7e,%13.7en,i,di0,di1);7#include math.h#include stdio.hint gsdl (a,b,n,x,eps)int n;double a,b,x,eps; int i,j,u,v; double p,t,s,q; for (i=0;i=n-1;i+) u=i*n+1; p=0.0; xi=0.0; for (j=0;j=fabs(au) printf(failn); return(-1); p=eps+1.0; while (p=eps) p=0.0; for (i=0; i=n-1; j+) t=xi; s=0.0; for (j=0; jp) p=q; return(1);8#include stdio.h#include lib.hmain()int i; double eps; static double a44=7.0,2.0,-1.0,2.0,9.0,15.0,3.0,-2.0, -2.0,-2.0,11.0,5.0,1.0,3.0,2.0,13.0; static double x5,b4=4.0,7.0,-1.0,0.0; eps=0.000001; if (gsdl (a,b,4,x,eps)0) for (i=0; i=3; i+) printf(x(%d)=%13.7en,i,xi); 9#include math.hvoid chir (x,y,n,a,m)int n,m;double x,y,a; int m1,i,j,l,ii,k,im,ix21; double h21,ha,hh,y1,y2,h1,h2,d,hm; for(i=0;i=n) m=n-1; if (m=20) m=19; m1=m+1; ha=0.0; ix0=0;ixm=n-1; l=(n-1)/m;j=1; for (i=1;i=m-1;i+) ixi=j;j=j+1; while (l=1) hh=1.0; for (i=0;i=m;i+) ai=yixi;hi=-hh;hh=-hh; for(j=1;j=m;j+) ii=m1;y2=aii-1;h2=hii-1; for(i=j;i=m;i+) d=xixii-1-xixm1-i-1; y1=am-i+j-1; h1=hm-i+j-1; aii-1=(y2-y1)/d; hii-1=(h2-h1)/d; ii=m-i+j;y2=y1;h2=h1; hh=-am/hm; for (i=0;i=m;i+) ai=ai+hi*hh; for(j=1;j=m-1;j+) ii=m-j;d=xixii-1; y2=aii-1; for (k=m1-j;k=m;k+) y1=ak-1;aii-1=y2-d*y1; y2=y1;ii=k; hm=fabs(hh); if (hm=ha) am=-hm;return; am=hm;ha=hm;im=ix0;h1=hh; j=0; for (i=0;i=n-1;i+) if(i=ixj) if(j=0;k-) h2=h2*xi+ak; h2=h2-yi; if (fabs(h2)hm) hm=fabs(h2);h1=h2;im=i; if (im=ix0) return; i=0;l=1; while (l=1) l=0; if (im=ixi) i=i+1; if (im) i=m; if (i=(i/2)*2) h2=-hh; else h2=hh; if (h1*h2=0.0) ixi=im; else if (im=0;j-) ixj+1=ixj; ix0=im; else if (imixm) for (j=1;j=m;j+) ixj-1=ixj; ixm=im; else ixi-1=im; 10#include math.h#include stdio.h#include 8chir.cmain () int i; double x101,y101,a7; for (i=0;i=100;i+) xi=-1.0+0.02*i; yi=atan(xi); chir (x,y,101,a,6); printf(n); for (i=0;i=5;i+) printf(a(%2d)=%en,i,ai); printf( n); printf(MAX(p-f)=%en,a6); printf(n); 11#include #include lib.hmain()int i; double t,z; static double x10=0.1,0.15,0.3,0.45,0.55,0.6,0.7,0.85,0.9,1.0; static double y10=0.904837,0.860708,0.740818,0.637628,0.576950, 0.548812,0.496585,0.427415,0.406570,0.367879; static double dy10; printf(n); for (i=0;i=9;i+) dyi=-yi; t=0.356; z=hmt(x,y,dy,10,t); printf(t=%6.3f,z=%en,t,z); printf(n); 12#include stdio.h#include lib.h#include math.hmain()int i; double x20,y20,a6,dt3; for (i=0;i=19;i+) xi=0.1*i; yi=xi-exp(-xi); pirl(x,y,20,a,6,dt); printf(n); for (i=0;i=5;i+) printf(a(%2d)=%en,i,ai); printf(n); for (i=0;i=eps) s=0.0; for (k=0;k=n-1;k+) x=a+(k+0.5)*h; s=s+(*fftsf)(x); t=(t1+h*s)/2.0; p=fabs(t1-t); t1=t;n=n+n;h=h/2.0; return(t); 14#include #include lib.hmain() double a,b,eps,t,fftsf(double); a=0.0;b=1.0;eps=0.000001; t=ffts(a,b,eps,fftsf); printf(n); printf(t=%en,t); printf(n);15#include math.hdouble lrgs(a,b,eps,f)double a,b,eps,(*f)(); int m,i,j; double s,p,ep,h,aa,bb,w,x,g; static double t5=-0.9061798459,-0.538469310,0.0,0.5384693101,0.9061798459; static double c5= 0.2369268851,0.4786286705,0.5688888889,0.4786286705,0.2369268851; m=1; h=b-a;s=fabs(0.001*h); p=1.0e+35;ep=eps+1.0; while (ep=eps)&(fabs(h)s) g=0.0; for (i=1;i=m;i+) aa=a+(i-1.0)*h;bb=a+i*h; w=0.0; for (j=0;j=4;j+) x=(bb-aa)*tj+(bb+aa)/2.0; w=w+(*f)(x)*cj; g=g+w; g=g*h/2.0; ep=fabs(g-p)/(1.0+fabs(g); p=g;m=m+1;h=(b-a)/m; return(g); 16#include #include #include lib.hmain() double a,b,eps,g,lrgsf(double); a=2.5;b=8.4;eps=0.000001; g=lrgs(a,b,eps,lrgsf); printf(n); printf(g=%en,g); printf(n); double lrgsf(x) double x; double y; y=x*x+sin(x); return(y); #include math.hdouble romb(a,b,eps,f)double a,b,eps,(*f)(); int m,n,i,k; double y10,h,ep,p,x,s,q; h=b-a; y0=h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论