RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 résolution runge kutta 4

Forum : FORTRAN
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ FORTRAN

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM FORTRAN

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
survivor
Nouveau membre
Inscrit : 16/08/2007
Messages : 1
Message
#140958
Posté le 16/08/07 à 17:03
Bonjour à tous j'ai récemment codé une résolution numérique d'équations différentielles du second degré avec la méthode de runge kutta 4 pour obtenir la trajectoire d'une particule.J'ai réussi à compiler le programme snas aucune erreur, cependant les résultats obtenus sont faux, j'en conclut que j'ai surement du faire une erreur dans mon programme.J'aurais voulu savoir si quelqu'un pourrait m'aider
à résoudre ce problème. Voici mon programme pour la trajectoire de la particule en fonction du temps.
Merci à tous d'avance.
PROGRAM ParticuleRK4
IMPLICIT None
c Declaration des routines externes
c ResolutionRK4:routine d'implementation du schema RK4
c Derivee :description du sysrtème differentiel du mouvement
EXTERNAL ResolutionRK4
EXTERNAL Derivee
c Declaration des parametres RK4
c Le systeme differentiel comporte deux equations
INTEGER NbEquation
PARAMETER (NbEquation=2)
c Declaration des constantes
REAL R,k,l,alfa
DATA R/20E-6/,k/440667./,l/-9.79487/,alfa/1.55235/
c Declaration des variables
INTEGER i, NbPAS
REAL z(NbEquation),t,PasTemps,z0,w0
c Saisie des paramètres du mouvement
WRITE(*,'(a,$)') 'Position initiale de la particule (en m) :'
READ(*,*) z0
WRITE(*,'(a,$)') 'Vitesse initiale de la particule (en m/s) :'
READ(*,*) w0
WRITE(*,'(a,$)') 'Pas temporel de calcul (en s) :'
READ(*,*) PasTemps
WRITE(*,'(a,$)') 'Nombre de pas :'
READ(*,*) NbPas
c Declaration des conditions initiales pour l'intégration
z(1) = z0 !position initiale de la paricule
z(2) = w0 !vitesse initiale de la particule
c Ouverture du fichier de stockage des resultats de calcul
c Ce fichier sera trace par Gnuplot
OPEN(10, FILE='resolutions.dat')
c Ecriture des conditios initiales
t = 0.0
c Boucle de calcul
DO i=1, NbPas
WRITE(10,*) t, z(i)
t = i*PasTemps
CALL ResolutionRK4(t,z,PasTemps,NbEquation)
ENDDO
WRITE(10,*) t, z(NbPas)
c Fermetrue du fichier de donnees
CLOSE(10)

STOP
END
c------------------------------------------------------------------------------------

c Routine de definition equations differentielles de
c la particule
c Par habitude et pour faciliter la reutilisation,j'appelle
c cette fonction Derivee.
SUBROUTINE Derivee(t,z,dz, NbEquation)

IMPLICIT None

REAL k,alfa

DATA k/440667./,alfa/1.55235/

INTEGER NbEquation
REAL t, z(NbEquation), dz(NbEquation)

c Description du systeme diferentiel de la particule
dz(1) = z(2)
dz(2) = -k*z(1)+alfa
RETURN
END

c------------------------------------------------------------------------------

c Subroutine de resolution d'une equation differentielle
c par la méthode de Runge-Kutta d'ordre 4
SUBROUTINE ResolutionRK4(t,z,dt,NbEquation)
c t : abscisse
c z() : valeurs retournees par le systeme differentiel
c dt : pas de calcul
c NbEquation : nombre d'eqution dans le systeme differentiel
c Derivee : nom de la fonction decrivant le systeme differentiel
IMPLICIT NONE
c EXTERNAL Derivee !fonction de calcul de la derivee
c
c Typage de l'interface de ResolutionRK4
c
INTEGER NbEquation
REAL t,z(NbEquation), dt
c
c Declaration des variables locales
REAL pred1(NbEquation),pred2(NbEquation),pred3(NbEquation)
REAL pred4(NbEquation), ztemp(NbEquation), halfdt
INTEGER i

halfdt = dt/2
c Premiere prediction
CALL Derivee(t,z(NbEquation),pred1(NbEquation),NbEquation)
DO i=1, NbEquation
ztemp(i) = z(i) + pred1(i)*halfdt
ENDDO
c Seconde prediction
CALL Derivee(t+halfdt,ztemp(NbEquation),pred2(NbEquation)
& , NbEquation)
DO i=1, NbEquation
ztemp(i) = z(i) + pred2(i)*halfdt
ENDDO
c Troisieme prediction
CALL Derivee(t+halfdt,ztemp(NbEquation),pred3(NbEquation)
& , NbEquation)
DO i=1, NbEquation
ztemp(i) = z(i) + pred3(i)*dt
ENDDO
c Quatrieme prediction
CALL Derivee(t+halfdt,ztemp(NbEquation),pred4(NbEquation)
& , NbEquation)
c Estimation de y pour le pas suivant
DO i=1, NbEquation
z(i)=z(i)+(dt/6)*(pred1(i)+2*pred2(i)+2*pred3(i)+pred4(i))
ENDDO

END

c ----------------------------------------------------------------
__________________________
studientj

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 


    PAGE : [1]



.: Site Web développé par Yann Pingot et l'équipe MPWG avec www.evolvia-web.com :.