常用算法的程序设计举例

上传人:M****1 文档编号:579905111 上传时间:2024-08-27 格式:PPT 页数:21 大小:760.53KB
返回 下载 相关 举报
常用算法的程序设计举例_第1页
第1页 / 共21页
常用算法的程序设计举例_第2页
第2页 / 共21页
常用算法的程序设计举例_第3页
第3页 / 共21页
常用算法的程序设计举例_第4页
第4页 / 共21页
常用算法的程序设计举例_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《常用算法的程序设计举例》由会员分享,可在线阅读,更多相关《常用算法的程序设计举例(21页珍藏版)》请在金锄头文库上搜索。

1、第八章 常用算法的程序设计举例第一章 算法第二章 计算机和计算机程序第四章 逻辑运算和选择结构第五章 循环结构的实现第六章 Fortran的数据结构第七章 数据的输入、输出第三章 Fortran语言程序设计初步Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.1一、数值积分一、数值积分几何意义:几何意义:Evaluation only.Created with Aspose.Slides for .NET 3.5 Cl

2、ient Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.2近似求小曲边梯形面积的方法:近似求小曲边梯形面积的方法:(1)用小矩形代替小曲边梯形;)用小矩形代替小曲边梯形;(2)用小梯形代替小曲边梯形;)用小梯形代替小曲边梯形;(3)在小区间范围内,用一条抛物线代替该区间内的)在小区间范围内,用一条抛物线代替该区间内的f(x)。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pt

3、y Ltd.3read(*,*) a,b,nx=ah=(b-a)/nf0=exp(x)s=0.0do 10 i=1,n si=f0*h s=s+si x=x+h f0=exp(x)10continuewrite(*,100) a,b,nwrite(*,200) s100format(1x,a=,f10.3,3x,b=, $ f10.3,3x,n=,i4)200format(1x,s=,f15.8)end1. 矩形法矩形法Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright

4、 2004-2011 Aspose Pty Ltd.4read(*,*) a,b,nx=ah=(b-a)/ns=0.0do 10 i=1,n si=(sin(x+(i-1)*h)+ $ sin(x+i*h)*h/2.0 s=s+si10continuewrite(*,100) a,b,nwrite(*,200) s100format(1x,a=,f10.3,3x, $ b=,f10.3,3x,n=,i4)200format(1x,s=,f15.8)end2. 梯形法梯形法Evaluation only.Created with Aspose.Slides for .NET 3.5 Client

5、 Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.5其他几种其他几种程序变形程序变形 . . .f1=sin(a) . . . do 10 i=1,n f2=sin(a+i*h) si=(f1+f2)*h/2.0 s=s+si f1=f210continue . . . . . .x2=a . . .do 10 i=1,n x1=x2 x2=x2+h si=(sin(x1)+ $ sin(x2)*h/2.0 s=s+si10continue . . . . . .f0=sin(a)h=(b-a)/ns=f0do 10 i=1,n f=sin

6、(a+i*h) s=s+2.0*f10continues=(s-sin(b)*h/2.0 . . .Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.63. Sinpson法法 取取a,b中点中点c(a+b)/2,0),通过,通过f(a),f(b),f(c)三点可作唯一一条抛物三点可作唯一一条抛物线线f1(x)。 根据抛物线定积分求值公式,有:根据抛物线定积分求值公式,有:如果将如果将(a,b)分成两个小区间分成两个小

7、区间(a,c) 和和(c,b):Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.7如果将如果将(a,b)分成四个小区间分成四个小区间:如果将如果将(a,b)分成分成n个小区间个小区间:Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.8rea

8、d(*,*) a,b,nh=(b-a)/(2.0*n)s=0.0fa=1.0/(1.0+a)fb=1.0/(1.0+b)x=a+hf2=0.0f4=1.0/(1.0+x)do 10 i=1,n-1 x=x+h f2=f2+1.0/(1.0+x) x=x+h f4=f4+1.0/(1.0+x)10continues=h/3.0*(fa+fb+4.0*f4+2.0*f2)write(*,100) a,b,nwrite(*,150) s100format(1x,a=,f8.2,2x,b=,f8.2, $ 2x,n=,i4)150format(1x,s=,f16.7)end三种求定积分的方法中,矩形法

9、的误差较大,三种求定积分的方法中,矩形法的误差较大,梯形法次之,辛普生法最好。梯形法次之,辛普生法最好。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.9二、解一元方程(解非线性函数)二、解一元方程(解非线性函数)1. 直接迭代法直接迭代法read(*,*) x,mdo 10 i=1,mx1=(-x*3-2.0*x*x-2.0)/2.0write(*,100) i,x1if(abs(x-x1).gt.1e-6) th

10、en x=x1else stopend if10continuewrite(*,200) m100format(1x,i=,i3,5x,x1=,f15.7)200format(1x,computation has not, $ converged after,i4,iteration)end因有收敛问题,要因有收敛问题,要设最大循环次数。设最大循环次数。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.10 有的有的g

11、(x)是收敛的,而有的是收敛的,而有的g(x)是不收敛的。是不收敛的。同一个同一个g(x),对某些,对某些x0是收敛的,对有的是收敛的,对有的x0则是不则是不收敛的。收敛的。 如果如果g(x)具有一阶导数连续,且对于所有的具有一阶导数连续,且对于所有的x,若,若|g(x)|q1(q为一个定数),那么为一个定数),那么x=g(x)对于对于任意的任意的x0均收敛,且均收敛,且q愈小,收敛速度愈快。如果愈小,收敛速度愈快。如果不满足对所有的不满足对所有的x存在存在|g(x)|q1 ,则可能对有的,则可能对有的x0收敛,对有的收敛,对有的x0不收敛。不收敛。 因此要恰当的选择因此要恰当的选择g(x)形

12、式和初值形式和初值x0。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.112. 牛顿迭代法牛顿迭代法read(*,*) xn=1 10 x1=xf=x1*3-2.0*x1*2+4.0*x1+1.0f1=3.0*x1*2-4.0*x1+4.0x=x1-f/f1write(*,100) n,x1,xn=n+1if(abs(x-x1).gt.1e-6) goto 10100format(1x,n=,i3,3x,x1=,f

13、15.7, $ 3x,x=,f15.7)endEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.123. 二分法二分法5read(*,*) x1,x2f1=x1*3-6.0*x1-1.0f2=x2*3-6.0*x2-1.0if(sign(f1,f2).eq.f1) goto 510x=(x1+x2)/2.0f=x*3-6.0*x-1.0if(sign(f,f1).eq.f) then x1=x f1=felse x2=

14、x f2=fend ifif(abs(x1-x2).gt.1e-5).and. $ abs(f).gt.1e-6) goto 10if(abs(f).gt.1e-6) x=(x1+x2)/2.0write(*,100) x100format(1x,x=,f15.7)endEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.134. 弦截法(割线法)弦截法(割线法)5read(*,*) x1,x2f1=x1*3-2.0*x

15、1*2+7.0*x1+4.0f2=x2*3-2.0*x2*2+7.0*x2+4.0if(sign(f1,f2).eq.f1) goto 5f=1.020if(abs(x1-x2).gt.1e-5).and. $ abs(f).gt.1e-6) then x=x2-(x2-x1)/(f2-f1)*f2 f=x*3-2.0*x*2+7.0*x+4.0 if(sign(f,f1).eq.f) then x1=x f1=f else x2=x f2=f end if goto 20end ifif(abs(f).gt.1e-6) x=(x1+x2)/2.0write(*,100) x100format

16、(1x,x=,f15.7)endEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.14 以上方法都是近似求根,得到不是准确值而是近以上方法都是近似求根,得到不是准确值而是近似值。但只要给定的误差足够小,就可以认为它们之似值。但只要给定的误差足够小,就可以认为它们之间足够近似。间足够近似。 事实上,只有少数的方程才能用解析的方法求出事实上,只有少数的方程才能用解析的方法求出准确的根值。准确的根值。 计算机可以解任何有实根

17、的一元方程,它采用的计算机可以解任何有实根的一元方程,它采用的基本方法就是迭代,经过多次迭代,使近似根逐渐趋基本方法就是迭代,经过多次迭代,使近似根逐渐趋近于真实根。迭代可以用循环实现,正好充分发挥计近于真实根。迭代可以用循环实现,正好充分发挥计算机快速运算的特点。算机快速运算的特点。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.15三、求函数极值三、求函数极值Fibonacci搜索算法,或搜索算法,或0.618法

18、,或黄金值搜索法。法,或黄金值搜索法。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.16 f1=x1*x1-4.0*x1+5.0f2=x2*x2-4.0*x2+5.0if(f1.gt.f2) then f=f2 x=x2else f=f1 x=x1end ifwrite(*,204) x,f200format(12x,x1,14x,f1, $ 13x,x2,13x,f2/)202format(1x,4f15.7)2

19、04format(0,x=,f10.6,5x, $ f(x)=,f10.7)end real low,high,x1,x2read(*,*) low,highwrite(*,200)x1=low+0.618*(high-low)x2=high-0.618*(high-low)10if(high-low.gt.1e-4) then f1=x1*x1-4.0*x1+5.0 f2=x2*x2-4.0*x2+5.0 write(*,202) x1,f1,x2,f2 if(f1.gt.f2) then high=x1 x1=x2 x2=high-0.618*(high-low) else low=x2

20、x2=x1 x1=low+0.618*(high-low) end if goto 10end ifEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.17五、计算机模拟五、计算机模拟 计算机模拟(计算机模拟(Computer Simulation),又称又称“仿真仿真”:用计算机模仿实物系统进行测试,从测试用计算机模仿实物系统进行测试,从测试的结果获得期望的资料。的结果获得期望的资料。 根据模拟对象的不同特点,可分为:

21、根据模拟对象的不同特点,可分为: 确定性模拟(确定性模拟(Deterministic Mode);); 随机性模拟(随机性模拟(Stochastic Mode) 。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.18 小球以小球以10m/s沿沿45斜抛,落地反斜抛,落地反弹方向同前,速度弹方向同前,速度减小减小10%,求前三,求前三次周期轨迹。次周期轨迹。Evaluation only.Created with As

22、pose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.19 if(abs(y).gt.0.001) then t=t-dt dt=0.1*dt t=t+dt x=v*t+x0 y=v*t-0.5*g*t*2 else write(*,100) t,x,y flag=.false. end if end if goto 5 end if v=0.9*v t=0.0 x0=x write(*,*)10continue100format(1x,t=,f8.4,3x,x=, $ f12.6,

23、3x,y=,f12.6)end logical flagparameter (g=9.8)read(*,*) v0,dt=0.0x0=0.0v=v0*cos(3.1415926/4.0)do 10 i=1,3 dt=d flag=.true. x=v*t+x0 y=v*t-0.5*g*t*25 if(flag) then if(y.ge.0.0) then if(dt.ge.d) $ write(*,100) t,x,y t=t+dt x=v*t+x0 y=v*t-0.5*g*t*2 elseEvaluation only.Created with Aspose.Slides for .NET

24、 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.20上机目的:上机目的:1. 掌握数值积分的矩形法、梯形法和掌握数值积分的矩形法、梯形法和Simpson法;法;2. 掌握求解一元方程的迭代法、牛顿迭代法、掌握求解一元方程的迭代法、牛顿迭代法、二分法和弦截法;二分法和弦截法;3. 掌握计算机模拟的一般方法。掌握计算机模拟的一般方法。上机内容:上机内容:1. 调试课本中的所有程序;调试课本中的所有程序;2. 习题第习题第5、10题。题。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.21

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号