PROGRAM EXERCISE28 IMPLICIT NONE ! 4次のRunge-Kutta法で一階微分方程式を解くプログラム REAL*8 :: x, y, h = 1.0d-1 REAL*8 :: k1, k2, k3, k4 ! 初期値を代入 x = 0.0d0 y = 0.0d0 ! 初期値を出力 PRINT *, x, y DO ! k1, k2, k3,k4の値を代入。これらの計算が終わるまでxの値を更新しないこと k1 = h*f(x,y) k2 = h*f(x+h/2.0d0, y+k1/2.0d0) k3 = h*f(x+h/2.0d0, y+k2/2.0d0) k4 = h*f(x+h, y+k3) ! xの値を1ステップ進める x = x + h ! yの値を進める y = y + (k1+2.0d0*k2+2.0d0*k3+k4)/6.0d0 ! 1ステップ進んだ点での値を出力 PRINT *, x, y ! xがある程度大きくなったらDOループから抜ける IF( x .GT. 20.0d0) EXIT END DO CONTAINS ! 一階微分dy/dxを与える関数副プログラム FUNCTION f(x,y) REAL*8, INTENT(IN) :: x, y REAL*8 :: f f = COS(x) RETURN END FUNCTION f END PROGRAM EXERCISE28