2.1常微分方程的简单数值解法

本节编写了四种简单的数值方法去求解常微分方程的初始问题,包括 Euler 方法、Taylor 级数
法、后向 Euler 方法和梯形公式。
注意点:定义格式或者数组定义范围过小容易造成空白结果。
例题如下:

!分别用Euler,Taylor,后向Euler,梯形方法的常微分方程解
program mainimplicit noneinteger(8)::n,m,i,kreal(8)::h,x(100),y1(100),y2(100),y3(100),y4(100),y(20,100),y5(100)real(8),external::ff,f2open(unit=100,file="xable.csv")open(unit=101,file="Euler.csv")open(unit=102,file="Taylor.csv")open(unit=103,file="Back Euler.csv")open(unit=104,file="Trapeziod.csv")open(unit=105,file="Exact.csv")h=0.2n=20m=10                                                                                               !!文件名和变量的定义及赋值do i=1,n+1,1x(i)=(i-1)*hwrite(100,*)x(i)end do                                                                                             !!取n+1个数值点,写入csvclose(100)!!This is the Euler algorithmy1(1)=1write(101,*)y1(1)do i=1,n,1y1(i+1)=y1(i)+h*ff(x(i),y1(i))write(101,*)y1(i+1)                                                                             !!将Euler得到数据导入csvend doclose(101)!! This is the Taylor series methody2(1)=1write(102,*)y2(1)do i=1,n,1y2(i+1)=y2(i)+h*ff(x(i),y2(i))+1/2*h*h*(ff(x(i),y2(i))*(-x(i))-y2(i))write(102,*)y2(i+1)                                                                              !!将Taylor得到数据导入csvend doclose(102)!!This is the back Euler algorithmy(1,1)=1do i=1,n,1y(1,i+1)=y(1,i)+h*ff(x(i),y(1,i))end dodo i=1,n,1do k=1,m,1y(k+1,1)=1y(k+1,i+1)=y(1,i)+h*ff(x(i+1),y(k,i+1))end doend dodo i=1,n+1,1y3(i)=y(m+1,i)write(103,*)y3(i)                                                                            !!将Back Euler得到数据导入csvend doclose(103)!! This is the Trapeziod algorithmy(1,1)=1do i=1,n,1y(1,i+1)=y(1,i)+h*ff(x(i),y(1,i))+h*h*(ff(x(i),y(1,i))*(-x(i))-y(1,i))/2end dodo i=1,n,1do k=1,m,1y(k+1,1)=1y(k+1,i+1)=y(1,i)+h/2*(ff(x(i),y(1,i))+ff(x(i+1),y(k,i+1)))end doend dodo i=1,n+1,1y4(i)=y(m+1,i)write(104,*)y4(i)                                                                            !!将Trapeziod得到数据导入csvend doclose(104)!! This is the exact solutiondo i=1,n+1,1y5(i)=f2(x(i))write(105,*)y5(i)end do
end program main!!dy/dx的function函数
function ff(x,y)implicit nonereal(8)::x,yreal(8)::ffff=-y*xreturn
end
!!exact solution 的function函数
function f2(x)implicit nonereal(8)::xreal(8)::f2f2=dexp(-x*x/2)return
end

学习origin绘制基本点线图对比结果:

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

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

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

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

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

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

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

  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. R可视化多元线性回归模型
  2. 简便的golang orm
  3. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
  4. Jmeter和LoadRunner的区别
  5. html网页缩小之后div框移动,css – DIV在浏览器中放大和缩小时移动
  6. invalid table name什么意思_新手入门前端要学习什么?总结一些知识点(建议收藏)...
  7. 求二叉树的深度和宽度
  8. spring cloud 调用接口间歇性返回http 500 - Internal Server Error的错误
  9. 网络服务家族图谱:一张图带您了解华为云网络服务大家族!【华为云分享】
  10. python+selenium方法大全
  11. 【语音分析】基于matlab线性预测系数对比【含Matlab源码 557期】
  12. 《信号与系统学习笔记》—通信系统(一)
  13. 华为手表表盘的数字什么意思_华为gt2表盘上的数字是什么意思
  14. cpu性能排行 服务器,服务器cpu天梯图2020 至强处理器天梯排名
  15. 什么是“秒杀”?为什么传统项目中也有“秒杀”的概念?一起来分析一下.
  16. java 设置pdf 编码格式_Java 在PDF中添加条形码
  17. TIA博途中如何通过PLC变量控制开始和停止记录数据?
  18. 关于Ai打开图片,颜色变色问题
  19. (原創) 如何破解ModelSim 6.1f? (IC Design) (ModelSim)
  20. Kmeans(C/C++实现,以足球队聚类为例)

热门文章

  1. IDEA中的全局批量替换正则表达式
  2. 为啥大龄程序员不选择自己创业呢?
  3. 使用typedef语句定义函数类型和函数指针
  4. 【stm32】史上最详细的8种IO口模式
  5. 转《面对变化的思考》---深有所获,不得不转!
  6. ubuntu鼠标变成空心十字解决办法
  7. php语言的include,php中include_once指的是什么意思
  8. matlab求阈值的函数,小波分析中matlab阈值获取函数及其应用附程序代码.doc
  9. Pikachu靶机通关和源码分析
  10. android手机和荣耀哪个版本好,好与坏?——荣耀8青春版真实感受