Vous êtes sur la page 1sur 2

program runge_kutta_du_4ème_ordre_pour_un_pendule_simple

implicit none

!*************** Declaration des variables **************

real :: T,y1_0,y2_0,h,k1_1,k1_2,k2_1,k2_2,k3_1,a,b,c,d
real :: k3_2,k4_1,k4_2,f1,f2,Y2,Y1,tn,t0
integer :: n,i

!********************************************************
!****** Le message qui sera affiché à l'utilisateur *****

!****** Donner l'équation différentielle d'ordre 2 ******

PRINT *,"** Equation diff d_ordre 2 s'ecrit comme suit *"


PRINT *,"********* a*D(Dy) + b*Dy + c*y + d = 0 ********"
PRINT *,"****** Avec a,b,c et d son des constants ******"

write(*,*),''

write(*,*),"donner la valeur de a: "


read(*,*), a

write(*,*),"donner la valeur de b: "


read(*,*), b

write(*,*),"donner la valeur de c: "


read(*,*), c

write(*,*),"donner la valeur de d: "


read(*,*), d

!*********** Donner les conditions initiale *************

write(*,*),'Entrez le temps initial t0 en [s]: '


read(*,*), t0

write(*,*),'Entrez le temps final tn en [s]: '


read(*,*), tn

write(*,*),"Entrez le nombre d'etapes n: "


read(*,*), n

write(*,*),'Entrez la condition initial y(0):'


read(*,*), y1_0

write(*,*),'Entrez la condition initial Dy(0):'


read(*,*), y2_0

!********************************************************

!****** L'algorithme de runge kutta d'ordre 4 ******

Y1 = y1_0
Y2 = y2_0
h = (tn - t0)/(n)
T = t0

do i = 1,n
k1_1 = h*f1(T,Y1,Y2,a,b,c,d)
k1_2 = h*f2(T,Y1,Y2,a,b,c,d)

k2_1 = h*f1((T+h/2.),(Y1+k1_1/2.),(Y2+k1_2/2.),a,b,c,d)
k2_2 = h*f2((T+h/2.),(Y1+k1_1/2.),(Y2+k1_2/2.),a,b,c,d)

k3_1 = h*f1((T+h/2.),(Y1+k2_1/2.),(Y2+k2_2/2.),a,b,c,d)
k3_2 = h*f2((T+h/2.),(Y1+k2_1/2.),(Y2+k2_2/2.),a,b,c,d)

k4_1 = h*f1((T+h),(Y1+k3_1),(Y2+k3_2),a,b,c,d)
k4_2 = h*f2((T+h),(Y1+k3_1),(Y2+k3_2),a,b,c,d)

Y1 = Y1 + (1./6.)*(k1_1+2.*k2_1+2.*k3_1+k4_1)
Y2 = Y2 + (1./6.)*(k1_2+2.*k2_2+2.*k3_2+k4_2)
T = T+h

write(*,*),'T = ',T,'Y1 = ',Y1,'Y2 = ',Y2

end do

end program

!*************** Declaration des fonctions **************

Function f1(T,Y1,Y2,a,b,c,d)

f1 = Y2

end function

Function f2(T,Y1,Y2,a,b,c,d)

f2 = -b*Y2 -c*Y1 -d

end function

!********************************************************

Vous aimerez peut-être aussi