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. 爬虫之xpath语法-常用节点选择语法
  2. 参加LinuxCon Japan 2012
  3. AngularJS指令封装高德地图组件
  4. 使用 Kanban精益创新
  5. mv 重命名或移动文件
  6. shell 删除了hdfs 文件_知识干货 | 大数据全解 HDFS分布式文件系统
  7. Postman 最被低估的功能!
  8. 2013应届毕业生“京北方”校招应聘总结
  9. mysql model only_full_group_by_MySql版本问题sql_mode=only_full_group_by的完美解决方案
  10. 女人必知:10个好习惯 让老公不想出轨
  11. Windows端口占用情况?
  12. CondLaneNet | 使用动态卷积核预测每个车道线实例
  13. java金额格式化 .00_Java中金额的格式化###,###.00
  14. 数据结构 第一章 绪论
  15. 机器学习之路: python 决策树分类DecisionTreeClassifier 预测泰坦尼克号乘客是否幸存...
  16. 卡巴斯基KEY文件的类型选择
  17. java毕业设计基于javaweb+mysql数据库实现的大学生助学贷款管理系统(源码+论文+开题报告
  18. 面试之MySQL调优问题
  19. matlab语法——min函数
  20. dart语言和flutter学习——Dart语言学习

热门文章

  1. poj2031 Building a Space Station
  2. 团队精神在CMM中体现
  3. CTF做题总结第五周
  4. js遍历一段html,JS遍历HTML元素
  5. 华为平板如何安装HTML5播放器,教大家华为平板电脑怎么分屏的方法
  6. 【IDEA】SpringBoot --could not autowire
  7. Ps裁剪工具及其附属工具的用法
  8. linux添加IP及路由
  9. 本人优化的两个传世私服站希望有人帮我看看
  10. ios8兼容css样式,ios8不支持css3