兰州交通大学fortran教学规划.doc

上传人:小** 文档编号:4523169 上传时间:2021-09-26 格式:DOC 页数:25 大小:263.58KB
返回 下载 相关 举报
兰州交通大学fortran教学规划.doc_第1页
第1页 / 共25页
兰州交通大学fortran教学规划.doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《兰州交通大学fortran教学规划.doc》由会员分享,可在线阅读,更多相关《兰州交通大学fortran教学规划.doc(25页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、,目录1求一元方程的根和求定积分11.1求一元方程的根1二分法11.1.1弦截法31.1.2牛顿迭代法51.2求定积分71.2.1矩形法71.2.2梯形法91.2.3辛普生法:112求解线性方程组133编写程序完成链表的建立、插入、查找和删除等操作161求一元方程的根和求定积分1.1 求一元方程的根作业要求1、采用函数子程序定义一元方程;2、程序选择以下三种方法求该方程的根;METHOD = 1 牛顿迭代法METHOD = 2 二分法1 METHOD = 3 弦截法3、对于不同的近似算法分别编写子程序,精度要求10-6。本题用二分法、弦解法和牛顿迭代法求x3-2x2+7x+4=0的根来编写程序

2、求解。二分法二分法基本思路:现任取两个值x1和x2,使得f(x1)* f(x2)0,也就是f(x1)和f(x2)必须异号。这才能保证在x1,x2区间有解,即存在一个x使得f(x)=0。令x=(x1+x2)/2,如果f(x)=0,就找到了这个解,计算完成。由于f(x)是一个实型数据,所以在判断f(x)是否等于0时,是通过判断f(x)是否小于一个很小的数,如果是就认为f(x)=0。若f(x)不等于0,判断如果f(x1)和f(x)异号,就说明解在x1,x区间,就以x1,x为新的取值重复步骤(2),这时用x代替否则x2,否则反之,直到找到满足条件的解为止。程序编写如下:program lt12_1re

3、al x1 ,x2,xreal bisect,func !对要调用的子程序作说明do !输入x1和x2直到f(x1)和f(x2)异号为止 print*,输入x1,x2的值: read*,x1,x2 if(func(x1)*func(x2)1e-6) f1=func(x1)if(f1*fx0) then x2=x else x1=xend ifx=(x1+x2)/2.0fx=func(x)end dobisect=xendfunction func(x) !需要求解的函数real xfunc=x*3-2*x*2+7*x+4end运行结果:1.1.1 弦截法弦截法的基本思路:现任取两个值x1和x2

4、,使得f(x1)* f(x2)0。(1)做一条通过(x1,f(x1)和(x2,f(x2)两点的直线,这条直线与x轴的交点为x。可用以下公式求出 X=x2-(x2- x1)* f(x2)/(f(x1)- f(x2),(2)代入函数求得f(x),判断f(x)是否小于一个很小的数,如果是就认为f(x)=0。(3)否则,判断如果f(x1)和f(x)异号,就说明解在x1,x区间,就以x1,x为新的取值重复步骤(2),否则反之,然后以同样的办法再进一步缩小范围,直到f(x)。程序编写如下:real x1,x2,xreal secant,func !对要调用的子程序作说明do !输入x1和x2直到f(x1)

5、和f(x2)异号为止 print*,输入x1,x2的值read*,x1,x2if(func(x1)*func(x2)1e-6) f1=func(x1) if(f1*fx0)then x2=x else x1=x endif x=x2-(x2-x1)/(func(x2)-func(x1)*func(x2) fx=func(x)enddosecant=xendreal function func(x) !需要求解的函数real xfunc= x*3-2*x*2+7*x+4end运行结果:1.1.2 牛顿迭代法牛顿迭代法基本思路(1)现任取一个值x1(2)做一条通过(x1,f(x1)的切线,即以f(

6、x1)为斜率作直线,直线与x轴的交点为x2,因为f(x1)= f(x1)/(x1- x2) x2=x1- f(x1)/ f(x1) 判断f(x2)是否成立,如果是就找到了这个解,计算完成。(3)否则,重复步骤(2),以f(x1)为斜率做一条通过(x2,f(x2)的切线,直线与x轴的交点为x3,直到f(xn)1e-6)print 10,i,x1x=x1i=i+1x1=x-func(x)/dfunc(x)enddoprint 20,x=,x1 !输出计算结果10 format(i=,i4,6x,x=,f15.7)20 format(a,f15.7)Endreal function func(x)

7、!迭代函数 real x func= x*3-2*x*2+7*x+4end real function dfunc(x) real x dfunc=3*x*2-4*x+7end运行结果:1.2 求定积分作业要求:1、采用函数子程序定义函数f(X);2、程序选择以下三种方法求定积分: 矩形法、梯形法、辛普生法3、对于不同的算法分别编写子程序,选择调用,比较不同方法求解的精度。本题我们用 来讨论矩形法、梯形法、辛普生法求定积分的方法。1.2.1 矩形法矩形法基本思路:用小矩形面积代替小曲边梯形,矩形面积的求解公式为底高。将a,b区间分为n个区间,令h=(b-a)/n。第1个矩形面积:底=h,高=

8、f(a),也可以用f(a+h)为高,S1=hf(a)第i个矩形面积:底=h,高= f(a+(i-1)h),也可以用f(a+ih)为高,Si=hf(a+(i-1)h)程序编写如下:real a,b,sinteger nreal yrectangleprint*,输入a,b和n的值read*,a,b,ns=rectangle(a,b,n)print 10,a,b,nprint 20,s10 format(a=,f5.2,3x,b=,f5.2,3x,n=,i4)20 format(s=,f15.8)Endreal function rectangle(a,b,n)implicit nonereal

9、x,a,b,h,sinteger i,nreal funcx=ah=(b-a)/ns=0do i=1,n s=s+func(x)*h x=x+henddorectangle=sendreal function func(x)real xfunc=1+sin(x)end运行结果:n=10时的输出结果n=100时的输出结果n=1000时的输出结果1.2.2 梯形法梯形法基本思路同上,用小梯形面积代替小曲边梯形第1个梯形面积:底=h,高= f(a),也可以用f(a+h)为高,S1=hf(a) 第i个梯形面积:底=h,高= f(a+(i-1)h),也可以用f(a+ih)为高,Si=hf(a+(i-1)

10、h)程序设计如下real a,b,sinteger nreal trapeziaprint*,输入a,b和n的值read*,a,b,ns=trapezia(a,b,n)print 10,a,b,nprint 20,s10 format(a=,f5.2,3x,b=,f5.2,3x,n=,i4)20 format(s=,f15.8)endreal function trapezia(a,b,n)implicit nonereal x,a,b,h,sinteger i,nreal funcx=ah=(b-a)/ns=0do i=1,n s=s+(func(x+(i-1)*h)+func(x+i*h)

11、*h/2.0enddotrapezia=sendreal function func(x)real xfunc=1+sin(x)end运行结果:n=10时的输出结果 n=100时的输出结果 n=1000时的输出结果1.2.3 辛普生法:程序编写如下:real a,b,sinteger nreal sinpsonprint*,输入a,b和n的值read*,a,b,ns=sinpson(a,b,n)print 10,a,b,nprint 20,s10 format(a=,f5.2,3x,b=,f5.2,3x,n=,i4)20 format(s=,f15.8)endreal function sin

12、pson(a,b,n)implicit nonereal a,b,h,f2,f4,xinteger i,nreal funch=(b-a)/(2.0*n)x=a+hf2=0f4=func(x)do i=1,n-1 x=x+h f2=f2+func(x) x=x+h f4=f4+func(x)enddosinpson=(func(a)+func(b)+4.0*f4+2.0*f2)*h/3.0endreal function func(x)real xfunc=1+sin(x)endn=10时的输出结果n=100时的输出结果n=1000时的输出结果通过对数据分析我们可以发现,辛普生法最为准确,其次

13、为梯形法,矩形法精度最差2 求解线性方程组作业要求用高斯消元法求解线性方程组AX=B的解其中A为n*n系数矩阵,x为解向量,B为方程组右端维列向量。要求程序能够求解任意多个未知数的方程组,并附算例及求解结果。利用Gauss-Jordan法求联立方程组:有以下联立方程组:这组等式可以用矩阵方式表示 他们的关系为,c为要求解的未知数。我们可以先用子程序将矩阵转化为三角矩阵,然后再根据有关方法求出函数的解。程序编写如下:real,allocatable:a(:,:),b(:),c(:)print*,输入未知数个数nread*,nallocate(a(n,n)allocate(b(n)allocate

14、(c(n)print*,输入系数矩阵acall input(a,n) print*,输入等值矩阵bread*,bprint*,联立方程组call output(a,b,n)call Gauss_jordan(a,b,c,n)print*,求解do i=1,n print 10,i,c(i)enddo10 format(x,i1,=,f8.4)deallocate(a)deallocate(b)deallocate(c)endsubroutine input(a,n) !输入子程序real a(n,n)do i=1,n read*,(a(i,j),j=1,n)enddoendsubroutine

15、 Gauss_jordan(a,b,c,n) !高斯消元法的运算dimension a(n,n),b(n),c(n)call up(a,b,n) !引用上三角矩阵子程序call low(a,b,n) !引用下三角矩阵子程序forall(i=1:n) c(i)=b(i)/a(i,i)endforallendsubroutine output(a,b,n) !输出联立方程组real a(n,n),b(n)do i=1,n print 10,a(1,1),i do j=2,n if(a(i,j)0)then print 20,a(i,j),j else print 30,abs(a(i,j),j e

16、ndif enddo print 40,b(i)enddo10 format(f5.2,x,i1)20 format(+,f5.2,x,i1)30 format(-,f5.2,x,i1)40 format(=,f8.4)Endsubroutine up(a,b,n) !上三角矩阵子程序real a(n,n),b(n)do i=1,n-1 do j=i+1,n p=a(j,i)/a(i,i) a(j,i:n)=a(j,i:n)-a(i,i:n)*p b(j)=b(j)-b(i)*penddoenddoendsubroutine low(a,b,n) !下三角矩阵子程序real a(n,n),b(

17、n)do i=n,2,-1 do j=i-1,1,-1 p=a(j,i)/a(i,i) a(j,1:i)=a(j,1:i)-a(i,1:i)*p b(j)=b(j)-b(i)*p enddoenddoend3 编写程序完成链表的建立、插入、查找和删除等操作作业要求用链表完成学生情况的管理,已知学生信息包括姓名、学号和一门课成绩。建立包括n个学生节点的链表(n由键盘输入),完成按学号的排序、插入、查找和删除等操作。操作由菜单选择。分析:本题可以用指针来实现数据的传递,用子程序的有关内容完成按学号的排序、插入、查找和删除等操作,再用主程序将各个子程序结合在一起。实现学生情况管理链表的完成。程序编写

18、如下:module link type node integer num character(10) name real score type(node),pointer:next end typecontainssubroutine creat(head,n) type(node),pointer:head,p1,p2,p integer:i,num nullify(head) print*,请输入学生基本数据: do i=1,n allocate(p1) print 10,输入第,i,个学生的数据: print 20,学号: read*,p1%num print 20,姓名: read*,

19、p1%name print 20,成绩: read*,p1%score nullify(p1%next) if(i=1) then head=p1 else p2=headdo while(p1%nump2%num.and.associated(p2) p=p2 p2=p2%nextend doif(associated(p2) then p1%next=p%next p%next=p1else p%next=p1 endifendifenddo10 format(a,i3,2x,a)20 format(a,)end subroutine creatsubroutine output(head

20、,n)type(node),pointer:head,pinteger:ip=headprint 30,序号,学号,姓名,成绩do i=1,n print 40,i,p%num,p%name,p%score p=p%nextenddo30 format(a4,2x,a4,2x,a8,2x,a6)40 format(i3,3x,i4,2x,a8,2x,f4.1)end subroutine outputsubroutine insert(head,n) type(node),pointer:head,p,p0,p1 print*,请输入插入学生的基本数据: allocate(p0) print

21、20,姓名: read*,p0%name print 20,学号: read*,p0%num print 20,成绩: read*,p0%scoreif(.not.associated(head) then head=p0else if(p0%numhead head=p0else p1=head do while(associated(p1).and.p1%nump1 p1=p1%next enddo if(associated(p1) then p0%next=p%next p0%next=p0 else p%next=p0 endifendifn=n+120 format(a,)end

22、subroutine insertsubroutine del(head,n) type(node),pointer:head,p,p0 print*,请输入要删除学生的学号: read*,num if(.not.associated(head) then print*,无学生数据,删除失败。 else p0=head do while(associated(p0).and.p0%num/=num) p=p0 p0=p0%nextenddoif(associated(p0) then if(associated(p0,head) then head=p0%next deallocate(p0)

23、 else p%next=p0%next deallocate(p0) endif print*,删除:,num,的数据。 n=n-1 else print*,查无此人,删除失败。 endif endif end subroutine delsubroutine index1(head) type(node),pointer:head,p,p1 integer num print*,请输入待查找学生的学号: read*,num p=head do while(associated(p) if(p%num=num) then exit else p=p%next endif enddoif(.n

24、ot.associated(p) then print*,查无此人!else print 30,序号,学号,姓名,成绩 print 40, i,p%num,p%name,p%scoreendif30 format(a4,2x,a4,2x,a8,2x,a6)40 format(i3,3x,i4,2x,a8,2x,f4.1)End subroutine index1End module linkProgram exam10use linktype(node),pointer:head,pInteger n,num,keyDoPrint*Print*, 选 择 菜 单Print*,_Print*Pr

25、int*, 1-输入学生数据, 2-输出学生数据Print*, 3-添加学生数据, 4-删除学生数据Print*, 5-查询学生数据, 6-退出Print*,_Print*Print (a,),请输入选择操作的序号Read*,keyIf(key=1) then Print*,请输入学生人数: Read*,n Call creat(head,n) Call output(head,n)Else if(key=2) then Call output(head,n)Else if(key=3) then Call insert(head,n)Else if(key=4) then Call del(head,n)Else if(key=5) then Call indexl(head)Else ExitEndifEnddoEnd

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com