解微分方程的时候,大多数方程都是隐式方法比较稳定。虽然隐式方法需要迭代,写起来比较麻烦,我还是建议尽量使用隐式方法。Adams隐式是一种精度高,稳定性高的算法,属于隐式四阶龙格库塔法的一个特例。我之前写过用python解微分方程的code,这里改成fortran版本

对微分方程dy/dx=f(x),

Adams法,公式

求解的时候用Adams公式构造隐式方程,将y_{n+1}移到右边,然后用牛顿迭代对每个点求解y_{n+1}。下面直接上代码

      program potentialimplicit real*8 (a-h, o-z)h = 0.01icells = 10y0 = 3.0y1 = 3.0y2 = 3.x0 = 0.0x1 = x0+hx2 = x1+hyi = 0.0                    !设置初始值call RK(y0, x0, h, y1)call RK(y1, x1, h, y2)   !龙格库塔法计算前两个点do i = 3, 100xi = i*hcall newton(h, y2, y1, y0, x2, x1, x0, xi, yi)  !牛顿截弦法计迭代算后一个点y0 = y1y1 = y2y2 = yix0 = x1x1 = x2x2 = xi                                       !重新赋值yyy  =  3./(1.+xi**3) write(*, *)xi, yi,  yyyenddostopendsubroutine newton(h, y2, y1, y0, x2, x1, x0, xi, yi)implicit real*8 (a-h, o-z)real*8,  external :: fadamseps = 1.d-15              !精度i = 0dx0 = y1/1.d3             !用来计算差商do while (dabs(dx0)>eps .and. (i<20)) dfx0 = (fadams( yi+dx0, xi, y2, x2, y1, x1, y0, x0, h)-*  adams(yi, xi, y2, x2, y1, x1, y0, x0, h))/dx0yi1 = yi-fadams(yi, xi, y2, x2, y1, x1, y0, x0, h)/dfx0  dx0 = yi1-yiyi = yi1i = i+1end doreturn endfunction fadams(yi, xi, y2, x2, y1, x1, y0, x0, h) !Adams 公式implicit real*8 (a-h, o-z)real*8,  external :: funfn3 = fun(xi, yi)fn2 = fun(x2, y2)fn1 = fun(x1, y1)fn0 = fun(x0, y0)fadams =   yi-y2-h/24.*(9.*fn3+19.*fn2-5.*fn1+fn0)returnendsubroutine RK(y0, x0, h, y1) !龙格库塔法implicit real*8 (a-h, o-z)real*8,  external :: funrk1 = fun(x0, y0)rk2 = fun(x0+h/2.,  y0+h/2.*rk1)rk3 = fun(x0+h/2.,  y0+h/2.*rk2)rk4 = fun(x0+h, y0+h*rk3)y1 = y0+h/6.*(rk1+2.*rk2+2.*rk3+rk4)return endfunction fun(x0, y0)      !要计算的微分方程右边implicit real*8 (a-h, o-z)fun = -x0*x0*y0*y0return end

Adams隐式4阶方法解常微分方程,fortran实现相关推荐

  1. Adams隐式4阶方法解常微分方程,python实现

    Adams隐式4阶方法解常微分方程,由4阶Runge-Kutta方法提供初值,隐式方法比显式复杂一些,主要是因为需要解方程.这里使用弦截法解微分方程. import math import numpy ...

  2. C++ semi implicit euler半隐式向后欧拉法解算常微分方程(附完整源码)

    C++semi implicit euler半隐式向后欧拉法解算常微分方程 C++semi implicit euler半隐式向后欧拉法解算常微分方程完整源码(定义,实现,main函数测试) C++s ...

  3. 图形学笔记(二十)粒子、刚体、流体的模拟—— 欧拉方法、Errors 和 Instability、中点法、自适应步长、隐式欧拉方法、Runge-Kutta方法、刚体与流体模拟(质点法、网格法、MPM)

    图形学笔记(十九)粒子.刚体.流体的模拟-- 欧拉方法.Errors 和 Instability.中点法.自适应步长.隐式欧拉方法.Runge-Kutta方法.刚体与流体模拟(质点法.网格法.MPM) ...

  4. 委托 匿名类 var隐式类型 匿名方法

    委托 委托是一个类  它定义了方法的类型  实现了讲一个方法当做另一个方法的参数来传递 (委托的一个有趣且有用的属性是,他不知道也不关心所引用的方法的类 只关心引用的方法是否具有与委托相同的参数和返回 ...

  5. mysql数据库隐式表_详解MySQL数据库常见的索引问题:无索引,隐式转换,附实例说明...

    概述 在这些年的工作之中,由于SQL问题导致的数据库故障层出不穷,而索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换. 索引问题 1.无索引 当数据库中出现访问表的SQL无索 ...

  6. 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结

    JSP基础.指令.四大作用域九大隐式对象总结 (一)JSP基础 一.JSP概述 jsp其实是java动态页面技术 HTML可以用来组织页面但是HTML是一种静态web资源技术无法嵌入动态数据. Ser ...

  7. Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...

    Scala高级特性 1.    学习目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

  8. scala 隐式详解(implicit关键字)

    掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把 ...

  9. Scala隐式转换详解

    1.隐式转换 当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将类型进行转换,实现二次编译,而这些方法就是隐式转换,Scala编译器所做的事情要比Java编译器做的事情要 ...

最新文章

  1. 穿着健美裤的美女,她们身材好是锻炼出来的
  2. Python输出中文乱码问题
  3. linux php运行用户名和密码,Linux实例(一)使用用户名密码验证连接Linux
  4. java apktoo_apktool.jar
  5. Mybatis框架简单使用
  6. 个人操作系统V0.3(Personal Operating System,缩写为POS)是一种小型的多任务嵌 入式操作系统,用于ARM 公司Cortex-M0 内核的微控制器。
  7. 使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发
  8. Web Service初探
  9. fiddler抓包视频
  10. 智慧农业:农业物联网实施方案
  11. 学习如何搭建SpringBoot框架
  12. RGB格式学习:RGBx、xRGB、RGBA、ARGB等格式转换成RGB
  13. 高仿淘宝商品商品上拉加载SlideDetailsLayout+viewPager事件冲突
  14. 代挂php源码,[PHP源码]开心QQ等级代挂源码,无后门任意搭建分站
  15. 开放耳机有什么优缺点,列举出几款口碑不错的开放式耳机
  16. 有道云怎么换行_『42』怎样令为知笔记中的长网址换行?
  17. 是学不会的OD啊(一)->初次见面,请多指教
  18. Android studio 软件介绍
  19. 18.5.4 分布式恢复
  20. 雷林鹏分享:PHP date() 函数

热门文章

  1. 经典家用游戏机启动画面Top10
  2. 根据用户的不同登录不同的页面
  3. Python 图片转pdf
  4. 怎样用sc命令运行服务器,windows中的sc控制服务命令
  5. Android 使用Notification进行消息提示
  6. C#自定义好看的消息提示窗口MessageBox
  7. STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
  8. 实时获取股票数据,免费!——Python爬虫Sina Stock实战
  9. CSS3初级学习(二)背景图片叠加
  10. 好用到爆炸的Chrome谷歌插件下载——妈妈再也不用担心我找不到好的插件了