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

  • Topic: Fortran 
  • Thread starter Thread starter mlouky
  • Start date Start date
  • Tags Tags
    Fortran Ode Rk4
Join the discussion
Registration is free. Start your own thread to ask a follow-up.
7 replies · 2K views
mlouky
Messages
5
Reaction score
0
How can i solve y" + 2y =0 with RK4 and their program fortran
please I néed your helpe
 
Physics news on Phys.org
mlouky said:
How can i solve y" + 2y =0 with RK4 and their program fortran
please I néed your helpe
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
 
mlouky said:
my ey is y"+2y weith y(x) = cos(2x)
y(x) = cos(2x) is not a solution of y'' + 2y = 0.
mlouky said:
voila mon progam

Mod note: Added [ code ] and [ /code ] tags, below.
Fortran:
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
 
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:
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
 
mlouky said:
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
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.