RUNGE-KUTTA GENERIQUE

cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008 - 16 août 2004 à 21:13
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 17 août 2004 à 08:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25454-runge-kutta-generique

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
17 août 2004 à 08:57
pour le temps de calcul, c'est norma, on calcul la solution de 0 a 100 (1000 iterations avec un pas de 0.1, le compte est bon), et en plus pour chaque 0.1, on calculs 100 points intermediaires.

donc je pense que c'est normal, mais prend d'autres valeurs plus correctes, le resultat sera aussi correct, et ce sera plus rapide. Enfin essaye koi.
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
17 août 2004 à 00:53
merci beaucoups.

10/10. PAr contre, vive le temps de calcul !!!

Pour la fonction, c'est juste celle que tu obtiens en résolvant 1/2*m(dy/dx)² = mgy

(énergie cinétique et potentielle)
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 août 2004 à 23:49
Ben la plus part des trucs c a moi, c'est une de mes libraires, ici c'est util.h et util.c, elle s'occupe de chose basic, comme l'allocation memoire, les erreurs, les fichiers... plein de choses koi. Et donc a la fin du programme tu fermes la librairie, et apres tu peux voir si elle a ete effectivement fermee, car en fait tu peux avoir plusieurs utilisateurs de cet lib, comme pas exemple winutil.h et winutil.c ... enfin ca c autre chose.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
16 août 2004 à 23:44
CheckingClosingLibUtil() ???

C une fonction perso à toi ça??

MSDN coné po...

++
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 août 2004 à 23:38
bon voila ton equation, c'est quoi cette equation ? car la solution ne me dit rien ...

===================================
#ifndef _UTIL_H_
#include "util.h"
#endif // _UTIL_H_

#ifndef _MATH_H_
#include "math.h"
#endif // _MATH_H_

#ifndef _LIST_H_
#include "list.h"
#endif // _LIST_H_

#ifndef _ODE_H_
#include "ODE.h"
#endif // _ODE_H_

//----------------------------------------------------------
// veut y', soit y'=sqrt(2*g*y)
BOOL df(P_VECTND res,double x,P_VECTND y,void *param)
{
double g;
g = 9.81;
res->coord[0] = sqrt(2*g*y->coord[0]);
return TRUE;
} // df()
//----------------------------------------------------------
int main(int argc,char **argv)
{
InitializationLibUtil();
{
double x0;
int dim,i;
P_VECTND yf,y0;
P_UTIL_FILE file;

dim = 1; // l'equation n'a qu'une dimension

y0 = CreateVectND(dim);
yf = CreateVectND(dim);

x0 = 0.;
y0->coord[0] = 10.;

file = FileOpen("res.txt","wt");

for(i=0;i<1000;i++)
{
double x,h,step;
int n;

step = 0.1;
x = x0 + step;
n = 100;
h = step/n;

RungeKuttaODE(
yf, // le resultat
x0, // x au debut
y0, // y au debut
n, // nombre de pas
h, // pas de calcul
df, // y'=sqrt(2*g*y)
NULL // aucun parametre
);
// on ecrit les resultats
FilePrint((file,"%le\t%le\n",x,yf->coord[0]));
// on echange tout
CopyVectND(y0,yf);
x0 = x;
}

FileClose(file);

Free(yf);
Free(y0);
}
CloseLibUtil();
CheckingClosingLibUtil();
return 0;
}

===================================
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 août 2004 à 21:54
x0 = 0 et y0 = 10

merci.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 août 2004 à 21:41
oki je te fais un main pour cette equation, donne moi juste les conditions initialises (x0,y0)
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 août 2004 à 21:13
Salut !

Je connaissais cette méthode mais de là à la coder... bravo.
Mais je ne te mettrai une note, et un commentaire final, que lorsque j'orai pu tester le prog : impossible de compiler car main.c est vide !

Met un exe ou remplis main.c stp : je meurs d'envie de tester ton prog (j'ai une équa a résoudre : y' = Rac(2gy) )