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

  • Thread starter Thread starter mlouky
  • Start date Start date
  • Tags Tags
    Fortran Ode Rk4
AI Thread Summary
The discussion centers around solving the ordinary differential equation (ODE) y'' + 2y = 0 using the Runge-Kutta 4th order (RK4) method in Fortran. The original poster seeks assistance in implementing this numerical method, initially stating a boundary condition of y(0) = 0 and y(1) = 1, while also mentioning y(x) = cos(2x) as a potential solution. However, it is clarified that y(x) = cos(2x) does not satisfy the ODE. Further clarification reveals the poster's intent to solve y''(x) = -2cos(2x) with initial conditions y(0) = 1 and y'(0) = 0. The discussion emphasizes that RK4 should be applied to the ODE in its standard form, with the correct initial conditions specified. The importance of not leveraging the analytical solution of the ODE while implementing the numerical method is also highlighted.
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
 
Technology 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
 
thanks rcgldr
 
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.
 
ok I understand thank you
 

Similar threads

Replies
25
Views
3K
Replies
2
Views
1K
Replies
3
Views
2K
Replies
8
Views
2K
Replies
6
Views
2K
Back
Top