Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

I need help to solve ODE with rk4 y" + 2y =0 in fortran

  1. Jun 4, 2015 #1
    How can i solve y" + 2y =0 with RK4 and their program fortran
    please I néed your helpe
  2. jcsd
  3. Jun 4, 2015 #2
    my ey is y"+2y weith y(x) = cos(2x)
    voila mon progam
    Program second_ordr
    implicit none
    integer, parameter :: n=21 ! number of base points
    double precision, external :: f
    double precision, dimension(1:n) :: x, y, dy ! x, y, y'
    integer i

    open (unit=22,file="result.dat")

    ! boundary values
    x(1) = 0.0
    y(1) = 0.0
    x(n) = 1.0
    y(n) = 1.0

    ! assumptions for y'(1) - use dy(1) and dy(2) here only as a storage
    dy(1) = 1
    dy(2) = 0

    do i=1,n
    write (*,101) x(i), y(i), dy(i)
    end do

    100 format(5x, 'x',11x, 'y',11x, 'dy')
    101 format(3(1pe12.4))
    end program second_ordr

    function f(x,y,dy)
    implicit none
    double precision f, x, y, dy
    f = 0.55*cos(0.55*x)
    end function f

    subroutine rk4_2d(f,x,y,dy,n)
    implicit none
    double precision f
    integer n
    double precision, dimension(1:n) :: x, y, dy
    integer i
    double precision h,k11,k12,k21,k22,k31,k32,k41,k42

    do i=2,n
    h = x(i)-x(i-1)
    k11 = h*dy(i-1)
    k12 = h*f(x(i-1),y(i-1),dy(i-1))
    k21 = h*(dy(i-1)+k12/2.0)
    k22 = h*f(x(i-1)+h/2.0, y(i-1)+k11/2.0, dy(i-1)+k12/2.0)
    k31 = h*(dy(i-1)+k22/2.0)
    k32 = h*f(x(i-1)+h/2.0, y(i-1)+k21/2.0, dy(i-1)+k22/2.0)
    k41 = h*(dy(i-1)+k32)
    k42 = h*f(x(i-1)+h,y(i-1)+k31,dy(i-1)+k32)

    y(i) = y(i-1) + (k11 + 2.0*(k21+k31) + k41)/6.0
    dy(i) = dy(i-1)+ (k12 + 2.0*(k22+k32) + k42)/6.0
    end do
    end subroutine rk4_2d
  4. Jun 4, 2015 #3


    Staff: Mentor

    y(x) = cos(2x) is not a solution of y'' + 2y = 0.
  5. Jun 4, 2015 #4


    User Avatar
    Homework Helper

    Note - you're not suppose to take advantage of the fact that the ODE can be solved, y = c1 sin(sqrt(2) t) + c2 cos(sqrt(2) t).

    RK4 is supposed to used with an ODE. Instead of using y and x, it may help to use y for position and t for time. y(t) is a position, y'(t) is a velocity, and y"(t) is an acceleration. For RK4, the ODE should be written as y" = -2y. The initial condition is y(0) = 0, y'(0) = 1, and y"(0) = 0. For a given y"(t), y'(t), y(t), RK4 calculates y'(t+Δt), y(t+Δt), and then y"(t+Δt) = -2 y(t+Δt), t = t+Δt, and the process continues for each time step Δt.
    Last edited: Jun 4, 2015
  6. Jun 5, 2015 #5

    I explain exactly what I want
    I have an ordinary differential equation of order two y "(x) = -2cos (2x)
    I am looking to solve numerically the RK4 method to write a program in FORTRAN
    with y (0) = 1 and y '(0) = 0
    thank you very much
  7. Jun 5, 2015 #6
    thanks rcgldr
  8. Jun 5, 2015 #7

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    That is not what you wrote in your opening post. There you wrote that you want to solve $y'' + 2y = 0$, but you did not specify initial conditions. In your second post you wrote that you want to solve $y'' + 2y = 0$ with $y(x) = cos(2x)$ and boundary conditions $y(0)=0, y(1)=1$. As Mark noted, $y(x) = cos(2x)$ is not a solution of $y'' + 2y = 0$.

    So which is it?

    If you truly are to numerically solve $y''+2y=0, y(0)=1, y'(0)=0$ using RK4, you should not be taking advantage of the fact that $y=\cos(\sqrt(2)x)$ is the solution.
  9. Jun 5, 2015 #8
    ok I understand thank you
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook