利用Fortran编写数值微分函数,利用向前向后两点式以及五点式求微分。

以上节例题为模板,编写向前向后两点式如下:

!在例一的条件上,计算两点一次插值的微商,编写向前两点式,向后两点式
program mainimplicit noneinteger(4)::i,nreal(4)::x1(7),y1(7),x(100),y(100),p(100),q(100),z(100),hx1(1)=0.0x1(2)=0.5x1(3)=1.0x1(4)=1.5x1(5)=2.0x1(6)=2.5x1(7)=3.0y1(1)=0.0y1(2)=0.4794y1(3)=0.8451y1(4)=0.9975y1(5)=0.9093y1(6)=0.5985y1(7)=0.1411n=6open(unit=101,file="xable.csv",status="new")open(unit=102,file="yable.csv",status="new")open(unit=103,file="pable.csv",status="new")open(unit=104,file="qable.csv",status="new")open(unit=105,file="hable.csv",status="new")h=3.0/100do i=1,100,1x(i)=h*iwrite(101,*) x(i)call interp6(x1,y1,x(i),n,y(i))write(102,*)y(i)end dodo i=1,99,1p(i)=(y(i+1)-y(i))/hwrite(103,*) p(i)end doq(1)=(y(1)-0.00)/hwrite(104,*)q(1)   do i=2,100,1q(i)=(y(i)-y(i-1))/hwrite(104,*) q(i)end do   close(101)close(102)close(103)close(104)end program mainsubroutine interpolyb(x1,x,n,yy)
integer k,j
integer,intent(in)::n
real,intent(in)::x1(n+1)
real,intent(in)::x
real,intent(out)::yy(n+1)
yy(1)=1;
do k=2,n+1yy(1)=yy(1)*(x-x1(k))/(x1(1)-x1(k))
end do
yy(n+1)=1;
do k=1,nyy(n+1)=yy(n+1)*(x-x1(k))/(x1(n+1)-x1(k));
end do
do j=2,nyy(j)=1do k=1,j-1yy(j)=yy(j)*(x-x1(k))/(x1(j)-x1(k))end dodo k=j+1,n+1 yy(j)=yy(j)*(x-x1(k))/(x1(j)-x1(k)); end do
end do
return end subroutine interpolybsubroutine interp6(x1,y1,x,n,y)
real,intent(out)::y
real yy(n+1)
integer::i
integer,intent(in)::n
real,intent(in)::x1(n+1)
real,intent(in)::y1(n+1)
real,intent(in)::x
y=0
call interpolyb(x1,x,n,yy)
do i=1,n+1y=y+yy(i)*y1(i)
end do
end subroutine interp6

绘制如下图片:

五点式代码及绘制图像:

!在例一的条件上,改动部分函数,编写五点式方程
program mainimplicit noneinteger(4)::i,nreal(4)::x1(7),y1(7),x(103),y(103),z(103),hx1(1)=0.0x1(2)=0.5x1(3)=1.0x1(4)=1.5x1(5)=2.0x1(6)=2.5x1(7)=3.0y1(1)=0.0y1(2)=0.4794y1(3)=0.8451y1(4)=0.9975y1(5)=0.9093y1(6)=0.5985y1(7)=0.1411n=6open(unit=101,file="xxable.csv",status="new")open(unit=102,file="yyable.csv",status="new")open(unit=103,file="hable.csv",status="new")h=3.0/100do i=1,103,1x(i)=h*i-2*hwrite(101,*) x(i)call interp6(x1,y1,x(i),n,y(i))write(102,*)y(i)end doclose(101)close(102)!编写五点式do i=3,101,1z(i)=(y(i-2)-8*y(i-1)+8*y(i+1)-y(i+2))/(12*h)write(103,*)z(i)end doclose(103)end program mainsubroutine interpolyb(x1,x,n,yy)
integer k,j
integer,intent(in)::n
real,intent(in)::x1(n+1)
real,intent(in)::x
real,intent(out)::yy(n+1)
yy(1)=1;
do k=2,n+1yy(1)=yy(1)*(x-x1(k))/(x1(1)-x1(k))
end do
yy(n+1)=1;
do k=1,nyy(n+1)=yy(n+1)*(x-x1(k))/(x1(n+1)-x1(k));
end do
do j=2,nyy(j)=1do k=1,j-1yy(j)=yy(j)*(x-x1(k))/(x1(j)-x1(k))end dodo k=j+1,n+1 yy(j)=yy(j)*(x-x1(k))/(x1(j)-x1(k)); end do
end do
return end subroutine interpolybsubroutine interp6(x1,y1,x,n,y)
real,intent(out)::y
real yy(n+1)
integer::i
integer,intent(in)::n
real,intent(in)::x1(n+1)
real,intent(in)::y1(n+1)
real,intent(in)::x
y=0
call interpolyb(x1,x,n,yy)
do i=1,n+1y=y+yy(i)*y1(i)
end do
end subroutine interp6

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

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

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

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

    2.1常微分方程的简单数值解法 本节编写了四种简单的数值方法去求解常微分方程的初始问题,包括 Euler 方法.Taylor 级数 法.后向 Euler 方法和梯形公式. 注意点:定义格式或者数组定义 ...

  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. Find Large Files in Linux
  2. ES6中this的三种用法
  3. 通过零知识证明,成为重要的区块链革新者
  4. arcgis怎么用python重新排序,使用ArcGIS脚本工具将点数据进行排序并编号
  5. CentOS 7 防火墙命令
  6. 《设计模式之禅》--空对象模式
  7. 【Elasticsearch】Elasticsearch 中增加分片数量,聚合一定会变快吗?
  8. python 内存溢出能捕获吗_Python内存泄漏和内存溢出的解决方案
  9. notepad++配置Zen Coding
  10. .7 二叉查找树的 建立 insert search remove 操作
  11. abb工业机器人电压不稳_ABB工业机器人应用常见故障九问九答
  12. react 动态添加组件属性_React的组件动态参数使用Underscore和Context来传递
  13. 游戏筑基之两个变量交换值与三个变量交换值的比较(C语言)
  14. user 不在 sudoers 文件中。此事将被报告。
  15. python解压并另存 .bz2文件的方法
  16. 刽子手c语言,麻烦刽子手程序在C
  17. 这些重构小技巧,给你项目瘦瘦身吧!
  18. 总结移动开发入行十周年
  19. 发票信息批量提取到 excel 软件 4.0
  20. liunx在线安装mysql/修改mysql密码/设置简单mysql密码

热门文章

  1. 用python画个花朵
  2. OD-流水线(python)
  3. Launcher3 workspace 加载默认的布局
  4. 父html向子html传递参数,子组件向父组件传值
  5. 【论文阅读】基于自适应小生境和 k 均值操作的数据聚类差分进化算法
  6. 计算机信息化知识应用,计算机应用及信息化知识培训考核题库附答案.doc
  7. ae绘图未指定错误怎么办_【教程】最全的ae表达式教学分享(实用!)表达式其实很简单...
  8. NATAPP + i996 内网穿透
  9. Java:String类的使用
  10. 工作总结6.月末总结