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)相关推荐

  1. FORTRAN+计算物理学学习日记(1)

    第一周:结合李录的计算物理学学习FORTRAN语言,这周的任务是插值函数,大致编写了四个小时,编写了一个双层循环的插值函数,进行了六次插值计算例题. 例题如下: 编写代码如下: program mai ...

  2. FORTRAN+计算物理学学习日记(2)

    利用Fortran编写数值微分函数,利用向前向后两点式以及五点式求微分. 以上节例题为模板,编写向前向后两点式如下: !在例一的条件上,计算两点一次插值的微商,编写向前两点式,向后两点式 progra ...

  3. FORTRAN+计算物理学学习日记(5)

    2.1常微分方程的简单数值解法 本节编写了四种简单的数值方法去求解常微分方程的初始问题,包括 Euler 方法.Taylor 级数 法.后向 Euler 方法和梯形公式. 注意点:定义格式或者数组定义 ...

  4. FORTRAN+计算物理学学习日记(6)

    2.2Runge-Kutta 方法求解常微分方程 "直接利用 Taylor 级数展开提高算法的阶数有许多困难,特别是要确定函 数 f (x, y) 的导数,这在数值计算中是非常不方便的.为了 ...

  5. FORTRAN+计算物理学学习日记(4)

    1.5基本数学运算中的求根 方法一:区间对分法求根 书中例题及编写代码如下 !!利用区间对分法求根 program mainimplicit nonereal(8)::a,b,x,t,ya=2b=3x ...

  6. FORTRAN+计算物理学学习日记(8)

    第三章 边值问题和本征值问题 3.1numerov算法 例题 program mainimplicit noneinteger(8)::i,nreal(8)::x(600),y(600),a,h,pi ...

  7. Java学习日记-Day01

    Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...

  8. 深度学习日记 2 - 概率论与信息论基础

    深度学习日记 2 - 概率论与信息论基础: 1.随机变量(random variable):是可以随机地取不同值的变量.我们通常用打印机 体的小写字母来表示随机变量本身,而用脚本字体中的小写字母来表示 ...

  9. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考

    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...

最新文章

  1. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
  2. 01pxc集群的部署
  3. 基准测试 ApacheBench ab学习
  4. matplotlib 折线图_漂亮图表也可信手拈来,一文学会用Python绘制堆积折线图
  5. MySQL外键命名规范
  6. 美团大咖:程序员35岁前应做好的技术积累
  7. ( 转)Hibernate常用API
  8. Python中抽象类和接口的区别
  9. 洛谷3004 [USACO10DEC]宝箱Treasure Chest
  10. 集成Android SlidingMenu(SlideMenu)
  11. 51单片机实现用一个定时器输出可调PWM
  12. Kafka生产者是如何发送消息的?
  13. [DebugView] dbgv.sys占用 及 KdPrint输出信息无法显示
  14. SM2算法功能简述(一)
  15. Android 下简单的 MP3 播放(代码分析)
  16. windowsXP用户无法远程桌面连接天翼云2008云主机
  17. 安卓手机投屏软件_安卓投屏软件eshow下载
  18. 2018年10月1日起,养老建筑设计须依照此标准
  19. 微信网页发红包服务器卡住,「」实用技巧:微信红包“发放失败,此请求可能存在风险,已被微信拦截”的解决办法...
  20. 汽车电控之节气门位置传感器

热门文章

  1. 如何用yum源安装MySQL5.7
  2. javaScript作用域提升
  3. Sketchup 程序自动化(三)路径、平面拉升
  4. 2021年安全员-A证(江苏省)最新解析及安全员-A证(江苏省)试题及解析
  5. SCI论文写作常见连词及适用情况
  6. linux7如何删除用户,如何在CentOS 7上添加和删除用户
  7. 回文数的判断(三种方法)
  8. word更改所有图片的格式,解决每次图片居中要手动调整的问题
  9. 小猪一键重装系统,XP/win7纯净版,旗舰版32位和64位重装方法
  10. WPS文字粘贴表格有首行缩进怎么取消