⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t.for

📁 洛伦兹方程的四阶龙哥库塔法求解例子
💻 FOR
字号:
      Program ODE1

      Real*8 dx, x0, y0, z0, t0, xi, yi, zi, ti, xf, yf, zf, tf, tmax
      Integer*4 i
      External dx, dy, dz
      open (unit=7,file="ode1d.dat",status='unknown')
c* initial conditions
      x0 = 0.0
      y0 = 2.0
      z0 = 0.0
      t0 = 0.00
c* "time" step and max time
      dt =   0.01
      tmax = 100.00

      xi = x0
      yi = y0
      zi = z0
      ti = t0
      do while(ti.le.tmax)
         write (7,*) xi, yi,zi
         tf = ti + dt
         call  rk4_1(dx,ti,xi,yi,zi,tf,xf)
         xi = xf
         call  rk4_2(dy,ti,xi,yi,zi,tf,yf)
         yi = yf
         call  rk4_3(dz,ti,xi,yi,zi,tf,zf)
         zi = zf
	   ti = tf
      end do
c100   format(2e12.4)
      stop
      end

c-------------------------------------------
      Function dx(t,x,y,z)
      Real*8 dx, x, y, z, t, a
      a=10
      dx = -a*(x-y)
      return
      end
c-------------------------------------------
      Function dy(t,x,y,z)
      Real*8 dy,x, y, z, t, r
      r=28
      dy = -x*z+r*x-y
      return
      end

c-------------------------------------------
      Function dz(t,x,y,z)
      Real*8 dz,x, y, z, t, b
      b=8/3
      dz = x*y-b*z
      return
      end
c-------------------------------------------
      Subroutine rk4_1(dx,ti,xi,yi,zi,tf,xf)

      Real*8 dx,ti,xi,yi,zi,tf,xf
      Real*8 h,k1,k2,k3,k4

      h  = tf-ti

      k1 = h*dx(ti,xi,yi,zi)
      k2 = h*dx(ti+h/2.0,xi+k1/2.0,yi,zi)
      k3 = h*dx(ti+h/2.0,xi+k2/2.0,yi,zi)
      k4 = h*dx(ti+h,xi+k3,yi,zi)

      xf = xi + (k1 + 2.0*(k2+k3) + k4)/6.0
      Return
      End
c-------------------------------------------
      Subroutine rk4_2(dy,ti,xi,yi,zi,tf,yf)

      Real*8 dy,ti,xi,yi,zi,tf,yf
      Real*8 h,k1,k2,k3,k4

      h  = tf-ti

      k1 = h*dy(ti,xi,yi,zi)
      k2 = h*dy(ti+h/2.0,xi,yi+k1/2.0,zi)
      k3 = h*dy(ti+h/2.0,xi,yi+k2/2.0,zi)
      k4 = h*dy(ti+h,xi,yi+k3,zi)

      yf = yi + (k1 + 2.0*(k2+k3) + k4)/6.0
      Return
      End
c-------------------------------------------
      Subroutine rk4_3(dz,ti,xi,yi,zi,tf,zf)

      Real*8 dz,ti,xi,yi,zi,tf,zf
      Real*8 h,k1,k2,k3,k4

      h  = tf-ti

      k1 = h*dz(ti,xi,yi,zi)
      k2 = h*dz(ti+h/2.0,xi,yi,zi+k1/2.0)
      k3 = h*dz(ti+h/2.0,xi,yi,zi+k2/2.0)
      k4 = h*dz(ti+h,xi,yi,zi+k3)

      zf = zi + (k1 + 2.0*(k2+k3) + k4)/6.0
      Return
      End

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -