Guest User

Untitled

a guest
Oct 24th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. program main
  2. implicit none
  3.  
  4. interface
  5. function dy(t,y)
  6. real,intent(in) ::t,y
  7. real :: dy
  8. end function dy
  9. end interface
  10.  
  11. real :: t0=0.0,y0=3.0
  12. integer :: n=200
  13. real :: tr,yr !runge-kutta
  14. real :: te,ye !euler
  15. integer :: i !do-loop
  16. real :: k1,k2,k3,k4 !rk-method use
  17. real :: h
  18. h=(3.0-1.0)/real(n)/2*3
  19.  
  20.  
  21. open(unit=15,file='final',status='unknown')
  22. write(15,"('#',6x,'t',14x,'y')")
  23. write(*,"('#',6x,'t',14x,'y')")
  24.  
  25.  
  26. !euler-----------------------------------------------------------
  27.  
  28. te = 0.0
  29. ye = 0.0
  30. do i=1,n+1
  31. ye = y0 + h*dy(te,ye)
  32. te = t0 + (i-1.0)*h
  33. ! if(te >= 1.0) write(*,*) te,ye
  34. y0 = ye
  35. end do
  36.  
  37. !runge-kutta----------------------------------------------------
  38. tr = 0.0
  39. yr = 0.0
  40. k1 = 0.0
  41. k2 = 0.0
  42. k3 = 0.0
  43. k4 = 0.0
  44. do i=1,n+1
  45. tr = t0 + (i-1) * h
  46. yr = y0 + (h/6.0) * ( k1 + 2*k2 + 2*k3 + k4 )
  47. k1 = dy(tr,y0)
  48. k2 = dy(tr+h/2.0 , y0+h/2.0*k1)
  49. k3 = dy(tr+h/2.0 , y0+h/2.0*k2)
  50. k4 = dy(tr+h , y0+h*k3)
  51. do i=1,n+1
  52. tr = t0 + (i-1) * h
  53. yr = y0 + (h/6.0) * ( k1 + 2*k2 + 2*k3 + k4 )
  54. k1 = dy(tr,y0)
  55. k2 = dy(tr+h/2.0 , y0+h/2.0*k1)
  56. k3 = dy(tr+h/2.0 , y0+h/2.0*k2)
  57. k4 = dy(tr+h , y0+h*k3)
  58. if (tr >= 1.0) write(*,*) tr,yr
  59. y0 = yr
  60. end do
  61. close(unit=15)
  62.  
  63. end program main
  64. !================================================================
  65. real function dy(t,y)
  66. implicit none
  67. real :: t,y
  68. dy = 2.0*t*y + t
  69. return
  70. end function dy
Add Comment
Please, Sign In to add comment