Adams隐式4阶方法解常微分方程,fortran实现
解微分方程的时候,大多数方程都是隐式方法比较稳定。虽然隐式方法需要迭代,写起来比较麻烦,我还是建议尽量使用隐式方法。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实现相关推荐
- Adams隐式4阶方法解常微分方程,python实现
Adams隐式4阶方法解常微分方程,由4阶Runge-Kutta方法提供初值,隐式方法比显式复杂一些,主要是因为需要解方程.这里使用弦截法解微分方程. import math import numpy ...
- C++ semi implicit euler半隐式向后欧拉法解算常微分方程(附完整源码)
C++semi implicit euler半隐式向后欧拉法解算常微分方程 C++semi implicit euler半隐式向后欧拉法解算常微分方程完整源码(定义,实现,main函数测试) C++s ...
- 图形学笔记(二十)粒子、刚体、流体的模拟—— 欧拉方法、Errors 和 Instability、中点法、自适应步长、隐式欧拉方法、Runge-Kutta方法、刚体与流体模拟(质点法、网格法、MPM)
图形学笔记(十九)粒子.刚体.流体的模拟-- 欧拉方法.Errors 和 Instability.中点法.自适应步长.隐式欧拉方法.Runge-Kutta方法.刚体与流体模拟(质点法.网格法.MPM) ...
- 委托 匿名类 var隐式类型 匿名方法
委托 委托是一个类 它定义了方法的类型 实现了讲一个方法当做另一个方法的参数来传递 (委托的一个有趣且有用的属性是,他不知道也不关心所引用的方法的类 只关心引用的方法是否具有与委托相同的参数和返回 ...
- mysql数据库隐式表_详解MySQL数据库常见的索引问题:无索引,隐式转换,附实例说明...
概述 在这些年的工作之中,由于SQL问题导致的数据库故障层出不穷,而索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换. 索引问题 1.无索引 当数据库中出现访问表的SQL无索 ...
- 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结
JSP基础.指令.四大作用域九大隐式对象总结 (一)JSP基础 一.JSP概述 jsp其实是java动态页面技术 HTML可以用来组织页面但是HTML是一种静态web资源技术无法嵌入动态数据. Ser ...
- Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...
Scala高级特性 1. 学习目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- scala 隐式详解(implicit关键字)
掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把 ...
- Scala隐式转换详解
1.隐式转换 当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将类型进行转换,实现二次编译,而这些方法就是隐式转换,Scala编译器所做的事情要比Java编译器做的事情要 ...
最新文章
- 穿着健美裤的美女,她们身材好是锻炼出来的
- Python输出中文乱码问题
- linux php运行用户名和密码,Linux实例(一)使用用户名密码验证连接Linux
- java apktoo_apktool.jar
- Mybatis框架简单使用
- 个人操作系统V0.3(Personal Operating System,缩写为POS)是一种小型的多任务嵌 入式操作系统,用于ARM 公司Cortex-M0 内核的微控制器。
- 使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发
- Web Service初探
- fiddler抓包视频
- 智慧农业:农业物联网实施方案
- 学习如何搭建SpringBoot框架
- RGB格式学习:RGBx、xRGB、RGBA、ARGB等格式转换成RGB
- 高仿淘宝商品商品上拉加载SlideDetailsLayout+viewPager事件冲突
- 代挂php源码,[PHP源码]开心QQ等级代挂源码,无后门任意搭建分站
- 开放耳机有什么优缺点,列举出几款口碑不错的开放式耳机
- 有道云怎么换行_『42』怎样令为知笔记中的长网址换行?
- 是学不会的OD啊(一)->初次见面,请多指教
- Android studio 软件介绍
- 18.5.4 分布式恢复
- 雷林鹏分享:PHP date() 函数
热门文章
- 经典家用游戏机启动画面Top10
- 根据用户的不同登录不同的页面
- Python 图片转pdf
- 怎样用sc命令运行服务器,windows中的sc控制服务命令
- Android 使用Notification进行消息提示
- C#自定义好看的消息提示窗口MessageBox
- STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
- 实时获取股票数据,免费!——Python爬虫Sina Stock实战
- CSS3初级学习(二)背景图片叠加
- 好用到爆炸的Chrome谷歌插件下载——妈妈再也不用担心我找不到好的插件了