回 帖 发 新 帖 刷新版面

主题:如何将fortran算出来的数据保存到文件

我Runge_Kutta 方法算了一个微分方程,但是不知道怎么将得到的数组储存到新的文件夹里面并用那些数组来画图。程序如下。希望大家能够帮小弟改进一下。谢谢。急需啊,在线等。谢谢!

!RK方法求解微分方程
program RK

  implicit none
!定义变量
  real :: X0, Y0, X1, Y1
  real :: Xn, H, Err
  integer :: N, I, Item
  real, external :: Rung_Kutta_Vs
!屏幕提示
  print *, '求解微分方程: dy/dx = y*y - x*x'
  print *, '请输入常微分方程的初始条件[X0,Y0]:'
  read(*, *) X0, Y0
  print *, '请选择计算的终点和步数[Xn, N]:'
  read(*, *) Xn, N
  print *, '请输入误差精度:'
  read(*, *) Err
  H = (Xn - X0)/N
! 打印求解过程
  write(*, 100) X0, Y0
  do I = 1, N
     X1 = H*I + X0
     Y1 = Rung_Kutta_Vs(X0, Y0, X1, Err, Funx)
     write(*, 200) I, X1,  I, Y1
  enddo

!格式说明
  100 format(5X, 'X00=', F10.6, '  Y00=', F10.6)
  200 format(5X, 'X', I2.2, '=', F10.6, '  Y', I2.2, '=', F10.6)

 contains
 !原型函数
  real function Funx(Y,X)
    implicit none
    real :: Y, X
    Funx = Y*Y - X*X
    return
  end function Funx

end program RK

!变步长RK方法
function Rung_Kutta_Vs(X, Y, X1, Err, F) result(Y1)
  implicit none
!变量定义
  real :: X, Y, X1, Y1, Err
  real, external :: F
  real :: X0, Y0, H, Temp
  integer :: N, M, I
  real :: K0, K1, K2, K3
!初始化及各步系数
  X0 = X
  Y0 = Y
  N = 1
  H = (X1 - X0)/N
  K0 = H*F(Y0, X0)
  K1 = H*F(Y0 + K0/2, X0 + H/2)
  K2 = H*F(Y0 + K1/2, X0 + H/2)
  K3 = H*F(Y0 +K2, X0 + H)
  Temp = Y0 + (K0 + 2*K1 + 2*K2 + K3)/6.0
!自适应步长确定
  M = 0
  do
     M = M + 1
     X0 = X
     Y0 = Y
     N = 2*N
     H = (X1 - X0)/N
     Y1 = Temp
     do I = 1, N
       K0 = H*F(Y0, X0)
       K1 = H*F(Y0 + K0/2, X0 + H/2)
       K2 = H*F(Y0 + K1/2, X0 + H/2)
       K3 = H*F(Y0 +K2, X0 + H)
       Temp = Y0 + (K0 + 2*K1 + 2*K2 + K3)/6.0
       X0 = X0 + H
       Y0 = Temp
     enddo
  if(ABS((Temp - Y1)/Y1)<=Err .OR. M>5000) exit
  enddo
  if(M>5000) then
     print *, 'Warning!迭代次数超过5000次!'
  endif
  Y1 = Temp
  return

end function Rung_Kutta_Vs

回复列表 (共5个回复)

沙发

看书吧,关于文件操作的章节。

Open
Write
Close

语句

板凳

用dislin直接画图,有quickplot模式
call Qplot(x,y,N)

3 楼

请问dislin是什么呢?用call的话不是调用子程序吗?Qplot是自带的脚本??问题比较多,麻烦您了。

4 楼


dislin 是一个图形包,网址http://www.dislin.de/,非商业版免费。楼主可以下载试试看,其中的quick模式应该像matlab的plot函数一样
               PROGRAM TEST 
                 USE DISLIN  
                 CALL DISINI () 
                 CALL MESSAG ('This is a test', 100, 100) 
                 CALL DISFIN () 
               END PROGRAM TEST
以上例程

具体怎么用请参看他们的manual

5 楼

不知楼主的问题,是侧重如何保存文件呢?还是侧重如何绘图?

也就是说,你是期望自己写代码把结果保存在文件里,然后用其他软件读取这个文件,绘图。

还是你自己想写代码的绘图?

貌似很模糊

我来回复

您尚未登录,请登录后再回复。点此登录或注册