FORTRAN+计算物理学学习日记(5)
2.1常微分方程的简单数值解法
![](/assets/blank.gif)
!分别用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)相关推荐
- FORTRAN+计算物理学学习日记(1)
第一周:结合李录的计算物理学学习FORTRAN语言,这周的任务是插值函数,大致编写了四个小时,编写了一个双层循环的插值函数,进行了六次插值计算例题. 例题如下: 编写代码如下: program mai ...
- FORTRAN+计算物理学学习日记(2)
利用Fortran编写数值微分函数,利用向前向后两点式以及五点式求微分. 以上节例题为模板,编写向前向后两点式如下: !在例一的条件上,计算两点一次插值的微商,编写向前两点式,向后两点式 progra ...
- FORTRAN+计算物理学学习日记(6)
2.2Runge-Kutta 方法求解常微分方程 "直接利用 Taylor 级数展开提高算法的阶数有许多困难,特别是要确定函 数 f (x, y) 的导数,这在数值计算中是非常不方便的.为了 ...
- FORTRAN+计算物理学学习日记(7)
2.3多步法求解常微分方程 program mainimplicit noneinteger(8)::n,m,i,kreal(8),external::fa,fbreal(8)::h,x(200),y ...
- FORTRAN+计算物理学学习日记(4)
1.5基本数学运算中的求根 方法一:区间对分法求根 书中例题及编写代码如下 !!利用区间对分法求根 program mainimplicit nonereal(8)::a,b,x,t,ya=2b=3x ...
- FORTRAN+计算物理学学习日记(8)
第三章 边值问题和本征值问题 3.1numerov算法 例题 program mainimplicit noneinteger(8)::i,nreal(8)::x(600),y(600),a,h,pi ...
- Java学习日记-Day01
Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...
- 深度学习日记 2 - 概率论与信息论基础
深度学习日记 2 - 概率论与信息论基础: 1.随机变量(random variable):是可以随机地取不同值的变量.我们通常用打印机 体的小写字母来表示随机变量本身,而用脚本字体中的小写字母来表示 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
最新文章
- R可视化多元线性回归模型
- 简便的golang orm
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
- Jmeter和LoadRunner的区别
- html网页缩小之后div框移动,css – DIV在浏览器中放大和缩小时移动
- invalid table name什么意思_新手入门前端要学习什么?总结一些知识点(建议收藏)...
- 求二叉树的深度和宽度
- spring cloud 调用接口间歇性返回http 500 - Internal Server Error的错误
- 网络服务家族图谱:一张图带您了解华为云网络服务大家族!【华为云分享】
- python+selenium方法大全
- 【语音分析】基于matlab线性预测系数对比【含Matlab源码 557期】
- 《信号与系统学习笔记》—通信系统(一)
- 华为手表表盘的数字什么意思_华为gt2表盘上的数字是什么意思
- cpu性能排行 服务器,服务器cpu天梯图2020 至强处理器天梯排名
- 什么是“秒杀”?为什么传统项目中也有“秒杀”的概念?一起来分析一下.
- java 设置pdf 编码格式_Java 在PDF中添加条形码
- TIA博途中如何通过PLC变量控制开始和停止记录数据?
- 关于Ai打开图片,颜色变色问题
- (原創) 如何破解ModelSim 6.1f? (IC Design) (ModelSim)
- Kmeans(C/C++实现,以足球队聚类为例)