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

  • Context: Fortran 
  • Thread starter Thread starter mlouky
  • Start date Start date
  • Tags Tags
    Fortran Ode Rk4
Click For Summary

Discussion Overview

The discussion revolves around solving the ordinary differential equation (ODE) y'' + 2y = 0 using the Runge-Kutta 4th order (RK4) method in Fortran. Participants explore the formulation of the problem, initial conditions, and the implementation of the RK4 algorithm.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant requests assistance in solving the ODE y'' + 2y = 0 with RK4 and provides a Fortran program outline.
  • Another participant points out that y(x) = cos(2x) is not a solution to the ODE y'' + 2y = 0.
  • A different participant suggests that the ODE should be reformulated as y'' = -2y and provides initial conditions for RK4, emphasizing the need to treat y as a position and t as time.
  • One participant clarifies their intention to solve the ODE y'' = -2cos(2x) with specific initial conditions y(0) = 1 and y'(0) = 0, which differs from their earlier posts.
  • Another participant highlights inconsistencies in the initial problem statement regarding the ODE and initial conditions, questioning the participant's approach.
  • A participant acknowledges the feedback received and expresses understanding.

Areas of Agreement / Disagreement

There is no consensus on the correct formulation of the problem or the initial conditions. Multiple competing views exist regarding the appropriate approach to solving the ODE using RK4.

Contextual Notes

Participants have not fully resolved the discrepancies in the problem statements and initial conditions, leading to confusion about the correct application of the RK4 method.

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
64
Views
11K
  • · Replies 36 ·
2
Replies
36
Views
6K
  • · Replies 25 ·
Replies
25
Views
4K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 6 ·
Replies
6
Views
4K