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

Tags:
1. Jun 4, 2015

### mlouky

How can i solve y" + 2y =0 with RK4 and their program fortran

2. Jun 4, 2015

### mlouky

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

write(*,100)
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))
stop
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

3. Jun 4, 2015

### Staff: Mentor

y(x) = cos(2x) is not a solution of y'' + 2y = 0.

4. Jun 4, 2015

### rcgldr

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
5. Jun 5, 2015

### mlouky

Marrk44

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

6. Jun 5, 2015

### mlouky

thanks rcgldr

7. Jun 5, 2015

### D H

Staff Emeritus
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.

8. Jun 5, 2015

### mlouky

ok I understand thank you