2.2Runge-Kutta 方法求解常微分方程
“直接利用 Taylor 级数展开提高算法的阶数有许多困难,特别是要确定函
f (x, y) 的导数,这在数值计算中是非常不方便的.为了避免直接展开的困难,Runge-Kutta 提出了一 个源于 Taylor 级数展开的算法”
program mainimplicit noneinteger(8)::n,i,kreal(8),external::ff,fbreal(8)::h,x(100),y(100),ya(100),yb(100),yc(100),ka(100),kb(100),kc(100),kd(100)h=0.05n=40open(unit=99,file="xable.csv")open(unit=100,file="R-K2.csv")open(unit=101,file="R-K3.csv")open(unit=102,file="R-K4.csv")open(unit=103,file="exact.csv")do i=1,n+1,1x(i)=(i-1)*hwrite(99,*)x(i)end doclose(99)
!This is second-order Runge-Kutta algorithmya(1)=1write(100,*)ya(1)do i=1,n,1ka(i)=h*ff(x(i),ya(i))kb(i)=h*ff(x(i)+h,ya(i)+ka(i))ya(i+1)=ya(i)+0.5*ka(i)+0.5*kb(i)write(100,*)ya(i+1)end doclose(100)
!This is third-order Runge-Kutta algorithmyb(1)=1write(101,*)yb(1)do i=1,n,1ka(i)=h*ff(x(i),yb(i))kb(i)=h*ff(x(i)+0.5*h,yb(i)+0.5*ka(i))kc(i)=h*ff(x(i)+h,yb(i)-ka(i)+2*kb(i))yb(i+1)=yb(i)+(ka(i)+4.0*kb(i)+kc(i))/6.0write(101,*)yb(i+1)end doclose(101)
!This is fourth-order Runge-Kutta algorithmyc(1)=1write(102,*)yc(1)do i=1,n,1ka(i)=h*ff(x(i),yc(i))kb(i)=h*ff(x(i)+0.5*h,yc(i)+0.5*ka(i))kc(i)=h*ff(x(i)+0.5*h,yc(i)+0.5*kb(i))kd(i)=h*ff(x(i)+h,yc(i)+kc(i))yc(i+1)=yc(i)+(ka(i)+2.0*kb(i)+2.0*kc(i)+kd(i))/6.0write(102,*)yc(i+1)end doclose(102)
!This is the exact solutiondo i=1,n+1,1y(i)=fb(x(i))write(103,*)y(i)end doclose(103)
end program main!!exact solution 的function函数
function fb(x)implicit nonereal(8)::xreal(8)::fbfb=dexp(-x*x/2)return
end
!!-x*y的function函数
function ff(x,y)implicit nonereal(8)::x,yreal(8)::ffff=-x*yreturn
end

绘制图像

遇到问题:1.A specification statement cannot appear in the executable section.为将主程序关闭

2.存储文件空白,数组定义过小

FORTRAN+计算物理学学习日记(6)相关推荐

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

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

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

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

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

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

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

    2.3多步法求解常微分方程 program mainimplicit noneinteger(8)::n,m,i,kreal(8),external::fa,fbreal(8)::h,x(200),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. js:appendChild、insertBefore和insertAfter
  2. 「学习笔记」多项式相关
  3. ubuntu如何杀死进程
  4. hdu1202解题报告
  5. 某8086cpu构成的微型计算机,微型计算机原理及应用试题及答案
  6. 网站选择按钮点击无反应?_Win10系统电脑鼠标左键单击没有反应的解决办法
  7. 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校扎实推进“新技工系统培养”民生工程...
  8. 广西农业职业技术学院计算机,学科分类与代码-广西农业职业技术学院.doc
  9. 数据结构——图的概述
  10. 算法交易的机遇和挑战
  11. java keystore php,KeyStoreSpi
  12. IDO已经OUT ?3分钟了解NFT的新玩法INO
  13. CSS实现最简洁的四角边框
  14. 如何在 iPhone 上设置整点报时提醒?
  15. 10张思维导图,全面讲解 Pandas
  16. HDU2102(KB2-I)
  17. 天书奇谈3D服务端搭建架设教程Centos
  18. 2005岁末BLOG程序大评点
  19. 「CSA49」Bunny on Number Line
  20. libyuv交叉编译

热门文章

  1. 2014-05-13 13:35:42
  2. ngzorro中表格colspan合并
  3. 【linux】基础IO
  4. Linux文件压缩与解压
  5. Vegas剪辑入门,如何导入导出视频
  6. android 关闭暗夜模式
  7. Windows 10安装Docker以及配置镜像加速
  8. 大数据分析如何在Python中生成FiveThirtyEight图
  9. java 调用c library_java调用c库实例
  10. 美服fgo显示服务器异常,《fgo》美服错误代码合集及解决办法