FORTRAN+计算物理学学习日记(7)
2.3多步法求解常微分方程
program mainimplicit noneinteger(8)::n,m,i,kreal(8),external::fa,fbreal(8)::h,x(200),ya(200),yb(200),yc(200,200),yd(200)n=100m=100h=4.0/nopen(unit=99,file="xable.csv")open(unit=100,file="Adams-two.csv")open(unit=101,file="Adams-four.csv")open(unit=102,file="Adams-Moulton two.csv")open(unit=103,file="exact.csv")do i=1,n+1,1x(i)=(i-1)*hwrite(99,*)x(i)end doclose(99)!The Adams two-step algorithmya(1)=1ya(2)=1-h*h/2.0write(100,*)ya(1)write(100,*)ya(2)do i=2,n,1ya(i+1)=ya(i)+h*(3.0/2.0*fa(x(i-1),ya(i))-fa(x(i-1),ya(i-1))/2.0)write(100,*)ya(i+1)end doclose(100)!The Adams four-step algorithmyb(1)=1write(101,*)yb(1)do i=1,3,1yb(i+1)=yb(i)+h*fa(x(i),yb(i))write(101,*)yb(i+1)end dodo i=4,n,1yb(i+1)=yb(i)+h/24.0*(55.0*fa(x(i),yb(i))-59.0*fa(x(i-1),yb(i-1))&+37.0*fa(x(i-2),yb(i-2))-9.0*fa(x(i-3),yb(i-3)))write(101,*)yb(i+1)end doclose(101)!The Adams-Moulton two-step algorithmyc(1,1)=1yc(1,2)=1-h*h/2.0do i=2,n,1yc(1,i+1)=yc(1,i)+h*(3.0/2.0*fa(x(i),yc(1,i))&-fa(x(i-1),yc(1,i-1))/2.0)end dodo i=2,n,1do k=1,m,1yc(k+1,1)=1yc(k+1,2)=yc(1,2)yc(k+1,i+1)=yc(1,i)+h/12.0*(5.0*fa(x(i+1),yc(k,i+1))&+8.0*fa(x(i),yc(k,i))-9.0*fa(x(i-1),yc(k,i-1))) end doend dodo i=1,n+1,1write(102,*)yc(m+1,i)end doclose(102)!The exact solutiondo i=1,n+1,1yd(i)=fb(x(i))write(103,*)yd(i)end doclose(103)
end program main!!exact solution 的function函数
function fb(x)implicit nonereal(8)::xreal(8)::fbfb=dexp(-x*x/2.0)return
end
!!-x*y的function函数
function fa(x,y)implicit nonereal(8)::x,yreal(8)::fafa=-x*yreturn
end
FORTRAN+计算物理学学习日记(7)相关推荐
- FORTRAN+计算物理学学习日记(1)
第一周:结合李录的计算物理学学习FORTRAN语言,这周的任务是插值函数,大致编写了四个小时,编写了一个双层循环的插值函数,进行了六次插值计算例题. 例题如下: 编写代码如下: program mai ...
- FORTRAN+计算物理学学习日记(2)
利用Fortran编写数值微分函数,利用向前向后两点式以及五点式求微分. 以上节例题为模板,编写向前向后两点式如下: !在例一的条件上,计算两点一次插值的微商,编写向前两点式,向后两点式 progra ...
- FORTRAN+计算物理学学习日记(5)
2.1常微分方程的简单数值解法 本节编写了四种简单的数值方法去求解常微分方程的初始问题,包括 Euler 方法.Taylor 级数 法.后向 Euler 方法和梯形公式. 注意点:定义格式或者数组定义 ...
- FORTRAN+计算物理学学习日记(6)
2.2Runge-Kutta 方法求解常微分方程 "直接利用 Taylor 级数展开提高算法的阶数有许多困难,特别是要确定函 数 f (x, y) 的导数,这在数值计算中是非常不方便的.为了 ...
- FORTRAN+计算物理学学习日记(4)
1.5基本数学运算中的求根 方法一:区间对分法求根 书中例题及编写代码如下 !!利用区间对分法求根 program mainimplicit nonereal(8)::a,b,x,t,ya=2b=3x ...
- FORTRAN+计算物理学学习日记(8)
第三章 边值问题和本征值问题 3.1numerov算法 例题 program mainimplicit noneinteger(8)::i,nreal(8)::x(600),y(600),a,h,pi ...
- Java学习日记-Day01
Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...
- 深度学习日记 2 - 概率论与信息论基础
深度学习日记 2 - 概率论与信息论基础: 1.随机变量(random variable):是可以随机地取不同值的变量.我们通常用打印机 体的小写字母来表示随机变量本身,而用脚本字体中的小写字母来表示 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
最新文章
- 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
- 01pxc集群的部署
- 基准测试 ApacheBench ab学习
- matplotlib 折线图_漂亮图表也可信手拈来,一文学会用Python绘制堆积折线图
- MySQL外键命名规范
- 美团大咖:程序员35岁前应做好的技术积累
- ( 转)Hibernate常用API
- Python中抽象类和接口的区别
- 洛谷3004 [USACO10DEC]宝箱Treasure Chest
- 集成Android SlidingMenu(SlideMenu)
- 51单片机实现用一个定时器输出可调PWM
- Kafka生产者是如何发送消息的?
- [DebugView] dbgv.sys占用 及 KdPrint输出信息无法显示
- SM2算法功能简述(一)
- Android 下简单的 MP3 播放(代码分析)
- windowsXP用户无法远程桌面连接天翼云2008云主机
- 安卓手机投屏软件_安卓投屏软件eshow下载
- 2018年10月1日起,养老建筑设计须依照此标准
- 微信网页发红包服务器卡住,「」实用技巧:微信红包“发放失败,此请求可能存在风险,已被微信拦截”的解决办法...
- 汽车电控之节气门位置传感器