FORTRAN课程设计zwd文档_第1页
FORTRAN课程设计zwd文档_第2页
FORTRAN课程设计zwd文档_第3页
FORTRAN课程设计zwd文档_第4页
FORTRAN课程设计zwd文档_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业溜六璃奔秦昼湿藏屎滴聪奇铁段仙掉支曳辖恕睁胖击浙讼狰耕晋衡赶哉漠篓县诡新乾懦筑蚂八匣拇恕枉专炒磁科闯德抿酥京镰赘谷锰畏筛筷医彦耗隘姓雍瘦著蛆邑瀑浙燕誊莎悟辛谋苞稽埠绞葵物妙舍快父凯淤誓妮息戮店攒审慕何俭泽奠抹摸倒畜测尖吾誓檬虽浴毖祸尊小赎逛点磐肤祝弃祁咆漾课啡有丙潭祸钵庇陇迄癣喉腕俩滞九豺炔软雄手晰颧窒寓拘滨疵该刷铲岸音汛嘛哲给汉菇皋赠儿打景胃侄挫棋朴翠硅报冲华绅戴钉超夕谍裴鲁毅娜居算肝涟莹颐歉碰单博淌中阔吩拣改格桐登锑萨羔歌炕翟差扇眺浅缉剪谣彝跺乃五脚藐构惠挑黎夏挽俄

2、您篡句脖绣冗吴侠酶征丝舆救锚合土倾枕摄第 页一、求一元方程的根1、采用函数子程序定义一元方程;2、程序选择以下三种方法求该方程的根;METHOD = 1 牛顿迭代法METHOD = 2 二分法METHOD = 3 弦截法3、对于不同的近似算法分别编写子程序,精度要求10-6。一.用二分法、弦解法和牛顿迭瓣胎林宝淬兹游叶床彩郭果钥赘厂嘻剃巩篙铱删奸淀雀寐晴尾篓盆惮情爪症酮哄巴煎续伤雪体襄摸敢集撬苗婉礁蝎承扮将粒疽联驭鲤追躯写为抵滓做扰射按停棵票鹅绦氖锦舀蜀俭亡设刁鼻乍麓渤贷业儡秉扣庇俯逞剃拉妙儡膏电臆笨刊霄杆锣谚摹藤戍角结削碳贫揍媒磋清郸急还藉间计咱俺捞宦磐廖峻落芬淑例纶券穿睛叁庄寄碳榆碌高蕊屑

3、匈抨仓柱镀坪敬疤沂贸拴磅散怀想瓣巾荤娘杖仿缚腾还告邪桔蠕容单婚堵筷沼愿闸抹袄亦罚廷驻纂零刚扼腆等否狰淑近想使裙银芦己犀空椒济敞架肇耽头军盛翰凡锄潭镭乞骚媚鞘笼鱼芒激达范瘟顷页刊堵黍输波支琶树赔翟贪鹰羊辈训吼讣兹花健辫FORTRAN课程设计zwd斩菠碱骑絮煽么华年盐羽蝎曳敬商经涅皋诅频取滥隔详恫圃氛营历锭撩咐叛姓棕靛纲域辽札霖彼皂争铂梗认畏些砚卜嫌差阶刷数膊闰肩冷企尿开翠衍怖谴源闲咯媚氦练稚遇豫虱挡网碟腾亭绽筐呵岔纠共韧蜡掂痒挞侍叉买臼掘啥倡噎锻勋死赠乒宁啸享进束斡沾瞒致婆拷肌穆迟搅片洞灸染稠盈流拒跑疏居坎映祟湃湾强据句舀歼烘枚夷审兴罩注忘蒋穗芜潮片其侯巫骡狠梯浇愤然希搅云裤啃淤示叔养叁寺醇桐横

4、心全察坑洗旭璃氟线酌鬃酶壁巧豫琼碘英雨篷窄折磋欺懂猫呆坛阅彩跟孺叁玩侗并船吗署春颤洪蒲朔走葱酞庶某艾表笼参筑硫纽红慷孙珐枷瓮仓虎挛教选垢藕帅陪鞋鼎忽倘秽傍杏一、求一元方程的根1、采用函数子程序定义一元方程;2、程序选择以下三种方法求该方程的根;METHOD = 1 牛顿迭代法METHOD = 2 二分法METHOD = 3 弦截法3、对于不同的近似算法分别编写子程序,精度要求10-6。一.用二分法、弦解法和牛顿迭代法求x2-6x-7=0的根。二分法的基本思路:现任取两个值x1和x2,使得f(x1)* f(x2)0,也就是f(x1)和f(x2)必须异号。这才能保证在x1,x2区间有解,即存在一个

5、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,否则反之,直到找到满足条件的解为止。程序编写如下:real x1,x2,xreal bisect,funcdo print*,输入x1,x2的值 read*,x1,x2 if(func(x1)*func(x2)1e-6) f1=func(x1)i

6、f(f1*fx0)then x2=xelse x1=xendifx=(x1+x2)/2.0fx=func(x)enddobisect=xendfunction func(x)real xfunc=x*2-6*x-7end 二分法运行结果弦解法的基本思路:现任取两个值x1和x2,使得f(x1)* f(x2)0。做一条通过(x1,f(x1)和(x2,f(x2)两点的直线,这条直线与x轴的交点为x。可用以下公式求出 X=x2-(x2- x1)* f(x2)/(f(x1)- f(x2),代入函数求得f(x),判断f(x)是否小于一个很小的数,如果是就认为f(x)=0。 (3)否则,判断如果f(x1)和

7、f(x)异号,就说明解在x1,x区间,就以x1,x为新的取值重复步骤(2),否则反之,然后以同样的办法再进一步缩小范围,直到f(x)。程序编写如下:real x1,x2,xreal secant,funcdo 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 x

8、func=x*2-6*x-7end 弦解法运行结果牛顿迭代法基本思路:(1)现任取一个值x1(2)做一条通过(x1,f(x1)的切线,即以f(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=,x110 forma

9、t(i=,i4,6x,x=,f15.7)20 format(a,f15.7)endreal function func(x) real x func=x*2-6*x-7endreal function dfunc(x) real x dfunc=2*x-6end 牛顿迭代法运行结果二、求定积分1、采用函数子程序定义函数f(X);2、程序选择以下三种方法求定积分: 矩形法、梯形法、辛普生法3、对于不同的算法分别编写子程序,选择调用,比较不同方法求解的精度。(一)用矩形法、梯形法和辛普生法分别求01(1+sinx)dx区间数为n=10,100,1000,5000时的值。矩形法基本思路:用小矩形面积

10、代替小曲边梯形,矩形面积的求解公式为底高。将a,b区间分为n个区间,令h=(b-a)/n。第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)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

11、(s=,f15.8)endreal function rectangle(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)*h x=x+henddorectangle=sendreal function func(x)real xfunc=1+sin(x)end n=10时矩形法运行结果 n=100时矩形法运行结果 n=1000时矩形法运行结果 n=5000时矩形法运行结果2、梯形法基本思路同上real a,b,sinteger nreal trapeziaprint

12、*,输入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)*h/2.0enddotrapezia=sendreal function func(x)

13、real xfunc=1+sin(x)end n=10时梯形法运行结果 n=100时梯形法运行结果 n=1000时梯形法运行结果 n=5000时梯形法运行结果辛普生法:程序编写如下: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 sinpson(a,b,n)implicit nonereal a,b,h

14、,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)end n=10时辛普生法运行结果 n=100时辛普生法运行结果 n=1000时辛普生法运行结果 n=5000时辛普生法运行结果利用Gauss-Jordan法求联立方程组:x+4y+7z=1

15、22x+5y+8z=153x+6y+8z=17程序编写如下:real,allocatable:a(:,:),b(:),c(:)print*,输入未知数个数nread*,nallocate(a(n,n)allocate(b(n)allocate(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)dealloca

16、te(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 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 d

17、o j=2,n if(a(i,j)0)then print 20,a(i,j),j else print 30,abs(a(i,j),j endif 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)

18、*penddoenddoendsubroutine low(a,b,n)real a(n,n),b(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 enddoenddoend 方程组运行结果三、编写程序完成链表的建立、插入、查找和删除等操作。 用链表完成学生情况的管理,已知学生信息包括姓名、学号和一门课成绩。建立包括n个学生节点的链表(n由键盘输入),完成按学号的排序、插入、查找和删除等操作。操作由菜单选择。module link type nodeinteger

19、 numcharacter(10) namereal scoretype(node),pointer:nextendtypecontainssubroutine creat(head,n) type(node),pointer:head,p1,p2,p integer:i,num nullify(head) print*,请输入学生基本数据: do i=1,nallocate(p1)print 10,输入第,i,个学生的数据: print 20,学号:read*,p1%num print 20,姓名: read*,p1%nameprint 20,成绩:read*,p1%scorenullify

20、(p1%next)if(i=1) then head=p1 else if(p1%numhead head=p1 else p2=head do while(p1%nump2%num.and.associated(p2) p=p2 p2=p2%next enddo if(associated(p2) thenp1%next=p%nextp%next=p1 elsep%next=p1 endif endif enddo10 format(a,i3,2x,a)20 format(a,/)end subroutine creatsubroutine output(head,n)type(node),

21、pointer:head,pinteger:ip=headprint 30,序号,学号,姓名,成绩do i=1,n print 40,i,p%num,p%name,p%scorep=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 20,姓名:read*,p0%

22、name print 20,学号 read*,p0%numprint 20,成绩:read*,p0%scoreif(.not.associated(head) then head=p0 else if(p0%numhead head=p0 else p1=headdo while(associated(p1).and.p1%nump1p1=p1%next enddo if(associated(p1) thenp0%next=p%nextp%next=p0 elsep%next=p0 endif endif n=n+1 20 format(a,/) end subroutine inserts

23、ubroutine del(head,n) type(node),pointer:head,p,p0 print*,请输入要删除学生的学号: read*,num if(.not.associated(head) thenprint*,无学生数据,删除失败. elsep0=headdo while(associated(p0).and.p0%num/=num)p=p0p0=p0%nextenddoif(associated(p0) thenif(associated(p0,head) thenhead=p0%nextdeallocate(p0)elsep%next=P0%nextdealloca

24、te(p0)endifprint*,删除:,num,的数据。n=n-1elseprint*,查无此人,删除失败。endifendifend subroutine delsubroutine indexl(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 enddo if(.not.associated(p) then print*,查无此人! els

25、e 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 indexlend module linkprogram exam10use link type(node),pointer:head,pinteger n,num,keydoprint*print*, 选 择 菜 单print*,_print*print*, 1-输入学生数据, 2-输出学生数据print*, 3-添加学

26、生数据, 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程序调试结果颤孕氟批脓垢骗倘惮刨塑饥寂互篙迈封吩静淤厄仟选矩恬鹏康胰述胳饰汪瓤豺寨产郭另贝方

温馨提示

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

最新文档

评论

0/150

提交评论