FORTRAN课程设计报告.docx
- 文档编号:2097082
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:9
- 大小:67.42KB
FORTRAN课程设计报告.docx
《FORTRAN课程设计报告.docx》由会员分享,可在线阅读,更多相关《FORTRAN课程设计报告.docx(9页珍藏版)》请在冰点文库上搜索。
FORTRAN课程设计报告
中南大学
本科生课程设计(实践)设计报告
(程序设计基础)
题目
常微分方程数值解
学生姓名
郑伟
指导教师
杨红雨
学院
土木建筑学院
专业班级
土建类0908
学生学号
1208090814
计算机基础教学实验中心
2010年07月07日
FORTRAN课程设计报告
摘要
本题是通过长期的观察统计,得到一个食饵—捕食者系统的数学模型如下:
,食饵:
r1=1,λ1=0.1,x1(0)=25;
捕食者(鲨鱼):
r2=0.5,λ2=0.02,x2(0)=2;
绘制食饵和鲨鱼数量随时间的变化情况图。
再由已知的初始条件,通过一阶线性微分方程组得到食饵和鲨鱼数量随时间变化关系曲线。
这一过程首先要通过四阶龙格库塔法得到多组鲨鱼和食饵随时间变化的数据,再通过FORTRAN编译程序,QuickWin的图形操作得到变化曲线。
关键词:
四阶龙格—库塔法、FORTRAN、QuickWin图形操作
一、设计思想
(一)总体设想
1、生成数据
用四阶龙格库塔法,取不同的时刻对应鲨鱼和食饵数量,得到多组数据。
2、QuickWin图形操作画出基本图形界面
模仿课本及例题做出一个基本的图形界面,包括界面的大小、颜色、名称等,以为后面绘图作准备。
3、设计主程序连接数据与QuickWin程序,画出相应曲线
将得到的多组数据与绘图程序连接起来,并最终绘制鲨鱼、食饵随时间变化曲线。
(二)系统模块结构简介
常微分方程的数值解
生成数据
QuickWin图形操作生成绘图基本界面
设计主程序连接数据文件和图形界面,绘制曲线
输出数据
二、系统设计与实现
①数据生成模块
首先要查阅资料了解四阶龙格库塔法的原理及其数学形式:
,其中
则
,同理可得
首先在FORTRANPOWERSTATION中建立一个项目文件,命名为myfiles,之后新建一个text.f90文件命名为数据,开始编程。
算法N—S图如下:
直到i=250止,其中步长为1即h
定义数组X1,X2,并将x1,x2的初值赋给数组的第一个元素
根据公式计算
再计算X1(i+1)和X2(i+1)
数组元素均被赋值后,新建文件“鲨鱼数据.txt”、“食饵数据.txt”并将数组中的t值和x1,x2值分别输出到两个文件当中
②图形基本界面模块
图形界面的生成需要用到QuickWin绘图基础,而这一功能与之前所编译的程序性质完全不同,因此需要重新建立一个新的项目mywin,并选择类型TYPE为QuickWinApplication,再新建TEXT,可以开始绘图程序的编译了。
关于图形程序的设计,需要考虑到大量的界面属性,如像素点的多少,窗口的大小、标题,除此之外,很重要的一点是要设置窗口为视窗坐标,即我们通常用的笛卡尔坐标系,以便后面观察图形更直观。
首先要定义绘图类型的变量,定义如下:
usemsflib
integer
(2)status
real(8)df,yf,i,p,q
character*2c
type(wxycoord)wxy
type(windowconfig)wc
type(qwinfo)winfo
定义了绘图类型之后就可以设置图形界面的基本属性了,需要设置像素为800*600,窗口最大化,背景颜色为白色等。
N—S图如下:
设置窗口最大化
winfo.type=qwin$max
设置视窗大小
status=setwindow(.true.,0,0,df,yf)
设置背景为白色
status=setbkcolorrgb(#ffffff)
刷新屏幕
callclearscreen($gclearscreen)
再绘制坐标轴,N—S图如下:
绘制X轴
callmoveto_w(2d0,2d0,wxy)
status=lineto_w(350,2d0)
绘制Y轴
callmoveto_w(2d0,2d0,wxy)
status=lineto_w(2d0,350)
绘制坐标轴时需注意,各坐标点均需要双精度实型的数据类型,否则编译时会出现数据类型错误的提示。
然后开始在坐标轴下面标注坐标刻度,由于在读入数据绘图之前不知道所需刻度即窗口大小,可先预设,在真正开始绘图时再更正:
直到i=35,步长为1
设置坐标颜色为红色
status=setcolorrgb(#0000ff)
输出横坐标刻度
callmoveto_w(i,2d0,wxy)
write(c,"(i2)")int(i-2)
calloutgtext(c)
直到i=90,步长为2
输出纵坐标刻度
callmoveto_w(1d0,i,wxy)
write(c,"(i2)")int(i-2)
calloutgtext(c)
最后,要在图形界面输出必要的标识,如图名、注释等:
添加图形题目,颜色为黑色
status=setcolorrgb(#000000)
callmoveto_w(10d0,70d0,wxy)
calloutgtext("食饵和鲨鱼数量随时间的变化情况图")
红色连续直线的是鲨鱼曲线
callsetlinestyle(#ffff)
status=setcolorrgb(#0000ff)
callmoveto_w(30d0,20d0,wxy)
status=lineto_w(32,20)
calloutgtext("鲨鱼曲线")
蓝色虚线的是食饵曲线
callsetlinestyle(#f0f0)
status=setcolorrgb(#ff0000)
callmoveto_w(30d0,25d0,wxy)
status=lineto_w(32,25)
calloutgtext("食饵曲线")
③主程序模块
主程序模块主要功能是把数据生成模块所输出的文件与绘图程序连接起来,绘制图形。
直到i=n
当文件未读到最后一条(.not.eof(10))
定义动态数组
real,allocatable:
:
t(:
),x1(:
),x2(:
)
确定数组元素个数
read(10,200)
n=n+1
open(10,file="鲨鱼数据.txt")
n=0
确定数组元素个数
allocate(t(n),x1(n),x2(n))
open(12,file="食饵数据.txt")
将文件中数据传送到所定义的数组中
read(10,200)t(i),x1(i)
read(12,200)t(i),x2(i)
t(i)=t(i)+2
x1(i)=x1(i)+2
x2(i)=x2(i)+2
调用子程序绘图
calltx(t,x1,x2,n)
这其中,需要把前面编译的图形程序改为主程序的子程序tx(t,x1,x2,n)
subroutinetx(t,x1,x2,n)
dimensiont(n),x1(n),x2(n)
④画出图形
三、设计总结
编译程序的过程枯燥却也充满乐趣,在编程的过程中,只有不断尝试,不断发现问题、分析问题、解决问题,才能使自己的程序更臻完美。
1、编译过程中出现的问题
①题目的分析
根据对题目的分析可知,只有使用数值分析中的经典方法——四阶龙格—库塔法才能完成该常微分方程的求解过程,因此,首先要知道龙格库塔法的基本原理及其数学表达式。
②数据的生成过程
在由龙格库塔法生成多组数据的过程中,我使用了简单地翻译数学表达式的方法,这是十分不明智的,如果在之前定义一个函数,然后在循环过程中调用,就会使程序简单很多了。
③绘图程序的编译
在绘图程序中,最重要的是过程中所用到各点的坐标,一定要注意坐标一定要是双精度实型的数据类型,否则总会出现数据类型错误。
④主程序的连接
主程序与子程序的连接过程中,总是可能因为读入文件过程不对而出现连接错误,注意一定要把数据生成模块生成的文件放在主程序文件夹下,这样才不会出现连接错误。
2、编译过程中的优点
①生成数据多
在数据生成过程中使用了较小的步长间隔,这样可以生成多组数据,使结果更精确,绘图时所绘制的曲线自然也更流畅优美。
②绘图细节精细
在绘制图形界面的基本情况时,考虑到图形的直观性,较清晰地绘出了坐标轴及其坐标刻度,除此之外,还有图形名称、以及对两条曲线的注释等,便于读图。
3、心得体会
在编译程序时,细心是最重要的一环,万不能粗心大意,有时自己一点点的疏忽就会导致整个程序运行错误,并在很长一段时间里找不到答案,因而浪费了很多时间,这一点一定要吸取教训,不能重蹈覆辙。
一方面在程序设计过程中,发现了自己掌握的只是在文件与数据传输两方面有所欠缺,但同时通过本次课程设计,我对FORTRAN90的了解和理解又更深了一步,巩固了我的FORTRAN基础知识,大大提高了我的学习兴趣。
参考文献
1.刘卫国,蔡旭辉《FORTRAN90程序设计教程》.北京邮电大学出版社.2007.
2.刘卫国,戴忠《FORTRAN90程序设计上机直到与习题选解》.北京邮电大学出版社.2007.
3.史万明,杨骅飞,吴裕树,孙新《数值分析(第二版)》.北京理工大学出版社.2004.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FORTRAN 课程设计 报告