Méthode numérique

Page 2 sur 4 Précédent  1, 2, 3, 4  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Dim 17 Jan - 22:47

double g(int i,double x,const double y[]){

double G=1;
double M=1;

switch (i){
case 0:
return y[1];
break;

case 1:
return ((-G*M/(pow((sqrt (x*x+y[0]*y[0])),3.)))*x);
break;

case 2:
return y[3];
break;

case 3:
return ((-G*M/(pow((sqrt (x*x+y[0]*y[0])),3.)))*y[0]);
break;
}
}
void main(){
int p,N;
double *x;
double *y;
double *y0;
double *yf;
double t0,tf,eps;

p=4;
N=320;
y0=new double[p] ;
yf=new double [p];
t0=0.;
tf=400.;
y0[0]=10.;//x
y0[1]=-0.188;//dx/dt
y0[2]=10.;//y
y0[3]=0.;//dy/dt
eps=1.e-2;

ofstream outfile ;

outfile.open("test1.txt");

compute_yf(g,t0,tf,y0,p,eps,N,yf);

x=new double [N+1];
y=new double [p*(N+1)];

compute_yn(g,t0,tf,y0,p,N,x,y);

outfile <<"test"<<'\n'<<'\n';

for (int k=0;k<=N;k+=100){
outfile<<x[k]<<'\t'<<y[k]<<'\t'<<'\n';
}

outfile.close();

si quelqu'un peut m'aider, j'ai fait ceci pour l'équation différentielle couplée qu'il a posé l'an passé, le problème c'est que j'ai toujours les même valeurs dans mon fichier texte,...je suppose que je définis mal mes conditions initiales mais je ne vois pas comment faire,...quelqu'un gère les équadiff?

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Mneric le Lun 18 Jan - 18:48

Bon, moi j'ai un probleme avec la théorie.
Dans l'interpolation par spline cubique, slide 239, je comprends pas du tout d'ou il sort la formule avec fj(x)=Aj(x)*yj+Bj(x)*y(j+1)+Cj(x)*gj+Dj(x)*g(x+1)
avec les fonction Aj, Bj, Cj et Dj définies par après.
Si quelqun savait me dire d'ou ca vient, ca me serait bien utile.Very Happy
avatar
Mneric
Etudiant en Physique

Masculin
Nombre de messages : 159
Age : 27
Localisation : Soumagne
Date d'inscription : 21/06/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par remy le Lun 18 Jan - 18:56

Elle vient de nul part, mais on peut vérifier qu'elle marche, c'est à dire qu'en chaque point intermédiaire la fonction (ou plutôt l'assemblage de fonctions) est continue ainsi que sa dérivée 1ère et seconde -> garantit que la courbe soit bien smooth Smile

remy
Humain

Masculin
Nombre de messages : 106
Age : 26
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Mneric le Lun 18 Jan - 19:12

Ah okay...:/
Et on est sensé la connaitre par coeur alors?-_-'
Parce qu'elle n'est pas dans les slides permis malheureusement.
avatar
Mneric
Etudiant en Physique

Masculin
Nombre de messages : 159
Age : 27
Localisation : Soumagne
Date d'inscription : 21/06/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Lun 18 Jan - 19:15

bah faut croire... moi j'ai de gros problèmes avec la pratique et ca me broute, dans les équadiff ci dessus, si je dois en faire un graphe, je fais un graphe de x ou y en fonction de t non? et je crois qu'il veut un graphe de x et de y? je vois pas comment faire :s

et puis il y a un TP avec un f (x,y) où on doit trouver les racines de fonction de 2 variables, je calle aussi! si qqn pouvait m'aider...

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par remy le Lun 18 Jan - 19:53

Et on est sensé la connaitre par coeur alors?-_-'
ouais mais bon c'est pas la mort de retenir ça non plus
et je crois qu'il veut un graphe de x et de y?
Je suppose que ca doit être faisable avec kaléidagraph (genre courbe paramétrique), maintenant j'en sais rien...
TP avec un f (x,y) où on doit trouver les racines de fonction de 2 variables, je calle aussi!
Comme c'est présenté, je ferais simplement boucle pour x variant comme demandé (500 valeurs de x entre -1.139 et 1.139) et à l'intérieur de la boucle, comme x est fixé, on se ramène à une fonction d'une variable

remy
Humain

Masculin
Nombre de messages : 106
Age : 26
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Lun 18 Jan - 20:28

ouep, en fait ca fonctionnait pas parce que j'avais mal mis une accolade! du coup j'écrivais "return y" dasn un if et il faisait caca...j'suis sure que ca va m'arriver à l'exam

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Lun 18 Jan - 20:44

maintenant, si tu dois faire le graphe tu fais un truc en 3D?

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Mneric le Mar 19 Jan - 1:06

Bon, j'viens de résoudre le systeme d'équa diff couplées sur lequel tu avais des problemes Lindsay.
Voici mon code :
Code:
#include "rungekutta.h"
#include <iostream>
#include "conio.h"
#include <math.h>
#include <fstream>
using namespace std;

double *x, *y, *yf, *Y0;

double f(int i, double x, const double y[]){
    double G=1., M=1.;
    switch(i){
    case 0 :
        return y[1];
    case 2 :
        return y[3];
    case 1:
        return -G*M*y[0]/pow(sqrt(y[0]*y[0]+y[2]*y[2]),3.);
    case 3 :
        return -G*M*y[2]/pow(sqrt(y[0]*y[0]+y[2]*y[2]),3.);
    default:
        return HUGE_VAL;
    }}

void main(){
    double *x, *y, *yf, *Y0;
    double eps = 1.e-2;
    int p=4;
    int N;
    yf = new double [p];
    Y0 = new double [p];
    Y0[0]=10.;
    Y0[1]=-0.188;
    Y0[2]=10.;
    Y0[3]=0.188;
    compute_yf(f, 0., 400., Y0, p,eps, N, yf);
    x = new double [N+1];
    y = new double [p*(N+1)];
    compute_yn(f,0.,400.,Y0,p,N,x,y);
    ofstream out;
    out.open("exam3.txt");   
    out << "t" <<'\t'<< "x(t)"<< '\t'<< "x'(t)"<< '\t' << "y(t)"<< '\t'<< "y'(t)"<<'\n';
    for(int j=0;j<=N;j++)out << x[j] << '\t'<<y[j]<<'\t'<< y[j+N+1]<<'\t'<< y[j+(N+1)*2]<<'\t'<< y[j+(N+1)*3] << '\n';
    out.close();




    while(!_kbhit());
    delete [] x,y,yf,Y0;
}

Voila pour l'image de la trajectoire :
avatar
Mneric
Etudiant en Physique

Masculin
Nombre de messages : 159
Age : 27
Localisation : Soumagne
Date d'inscription : 21/06/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 15:09

y[j+N+1]<<'\t'<< y[j+(N+1)*2]<<'\t'<< y[j+(N+1)*3]

tu peux m'expliquer ca? je comprend tu va rechercher ta 1, 2eme, 3eme et 4eme ligne mais je vois pas comment on pond ce truc lol j'ai essayé l'equa diff couplée d'ordre 1 dans les examet justement, je pense que mon problème (par ce que j'ai un problème non sans blague >_<) vient de mon affichage
j'pige pas ces truc de ligne lolproblème avec les N1(t) et N2(t)

j'ai fait ceci (il s'agit du problème avec les N1(t) et N2(t))

double g(int i,double t,const double y[]){

double r1=0.1;
double p1=0.01;
double p2=0.001;
double d2=0.05;

switch (i){
case 0:
return (r1*y[0]-p1*y[0]*y[1]);
break;

case 1:
return (p2*y[0]*y[1]-d2*y[1]);
break;

}
}
void main(){
int p,N;
double *x;
double *y;
double *y0;
double *yf;
double t0,tf,eps;

p=2;
N=320;
y0=new double[p] ;
yf=new double [p];
t0=0.;
tf=300.;
y0[0]=50.;
y0[1]=15.;

eps=1.e-2;

ofstream outfile ;

outfile.open("test1.txt");

compute_yf(g,t0,tf,y0,p,eps,N,yf);

x=new double [N+1];
y=new double [p*(N+1)];

compute_yn(g,t0,tf,y0,p,N,x,y);

outfile <<"test"<<'\n'<<'\n';

for (int k=0;k<=N;k++){
outfile< }

outfile.close();

delete[] x;
delete[] y;
delete[] y0;
delete[] yf;

}

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Mneric le Mar 19 Jan - 16:13

En même temps, tu demandes au programme de rien écrire dans ton ficher à part "test" la...Wink
Autrement j'vois pas bien ce que tu comprends pas dans mon programme.
La matrice y que tu obtiens est une matrice contenant N+1 colonnes et p lignes. Donc pour afficher la premiere ligne, tu demande qu'il t'affiche les N+1 premières valeures (de0 à N). Pour la seconde lignes, N+1 valeur suivante (de N+1 à N+1+N). Et de même avec les autres ligne.

SI ca répond pas à ta question, excuse moi.:p
avatar
Mneric
Etudiant en Physique

Masculin
Nombre de messages : 159
Age : 27
Localisation : Soumagne
Date d'inscription : 21/06/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 17:50

oui non j'ai fini par comprendre en lisant les slides du tp sur les équations différentielles! j'suis blonde s'pour ca ^^

et je sais pas pourquoi ca l'a pas pris, mais je lui dit d'écrire ca dans le fichier :
outfile<<x[k]<<'\t'<<y[k]<<'\t'<<y[(N+1)+k]<<'\t'<<'\n';

0 50 15
75 137284 -12928.2
150 5.37121e+060 -5.37121e+059
225 1.#INF -1.#IND
300 -1.#IND -1.#IND
et voila ce que je récolte! et je comprend pas vraiment pourquoi ...

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par remy le Mar 19 Jan - 19:02

J'ai fait le truc des dés

le main
Code:

#include <iostream>
#include "dice.h"
#include <fstream>

using namespace std;

int main()
{
    ofstream f;

    f.open("des1.txt");
    srand(time(NULL));
    int N = 3;
    int* n= new int[N];
    n[0] = 2;
    n[1] = 3;
    n[2] = 17;
    int somme = 0;
    for (int k=0 ; k<N ; k++){
        int* compteur1 = new int[6*n[k]+1];
        int* compteur2 = new int[6*n[k]+1];
        for (int j=0 ; j<6*n[k]+1 ; j++){
            compteur1[j]=0;
            compteur2[j]=0;
        }

        for (int i=0 ; i<100000; i++){
            somme = 0;
            for (int j=0 ; j<n[k] ; j++){
                somme+=dice(1,6);
            }
          // cout << somme<<" ";
            compteur1[somme]++;
            compteur2[dice(n[k],6*n[k])]++;
        }

        for (int j=0 ; j<6*n[k] ; j++){
            cout << j+1 << " : "<< compteur1[j+1] << " <> "<<compteur2[j+1] << endl;
            f << j+1 << " "<< compteur1[j+1] << " "<<compteur2[j+1] << endl;
        }
        cout << endl << endl;
        f << endl << endl;
        delete[] compteur1,compteur2;
    }
    f.close();

    f.open("des2.txt");
    int min,indiceMin;
    int* resultats4 = new int[4];

    int* compteur1 = new int[6*3+1];
    int* compteur2 = new int[6*3+1];
    for (int j=0 ; j<6*3+1 ; j++){
        compteur1[j]=0;
        compteur2[j]=0;
    }

    for (int i=0 ; i<100000; i++){
        somme = 0;
        for (int j=0 ; j<3 ; j++){
            somme+=dice(1,6);
        }
        compteur1[somme]++;
        min = 6;
        for (int j=0 ; j<4 ; j++){
            resultats4[j]=dice(1,6);
            if(resultats4[j]<min){
                min = resultats4[j];
                indiceMin = j;
            }
        }
        somme = 0;
        for (int j=0 ; j<4 ; j++){
            if (j != indiceMin){
                somme+=resultats4[j];
            }
        }
        compteur2[somme]++;
    }
    for (int j=0 ; j<6*3 ; j++){
        cout << j+1 << " : "<< compteur1[j+1] << " <> "<<compteur2[j+1] << endl;
        f << j+1 << " "<< compteur1[j+1] << " "<<compteur2[j+1] << endl;
    }
    delete[] compteur1,compteur2;

    f.close();
}

la fonction dice dans dice.cpp
Code:

int dice (int m, int n){
    return rand()%(n+1-m)+m;
}

et ce que ca donne


je comprend pas vraiment pourquoi
bah comme ca c'est difficile de touver ce qui coince, je sais pas t'aider


Dernière édition par remy le Mer 20 Jan - 15:39, édité 1 fois

remy
Humain

Masculin
Nombre de messages : 106
Age : 26
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 19:54

ben si quelqu'un tente l'equa diff d'ordre 1 et trouve une solution je la veux bien car moi non plus je vois pas ce qui coince ^^

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Thibaut V. le Mar 19 Jan - 20:10

je l'essayerai mais plutôt demain qu'aujourd'hui je pense
avatar
Thibaut V.
Vertébré

Masculin
Nombre de messages : 41
Age : 28
Localisation : Bastogne
Date d'inscription : 06/01/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 20:41

rha moi j'me sens plus la ^^ j'vais tous les tenter, ce soir, et demain ^^ j'suis une moule, il faut que je vainque (bordel comment on écrit "vainque" ôÔ soit ^^) ce problème avant jeudi matin

et j'ai envoyé un mail à Jérémie, il y a un TP avec une fonction de x et y, c'est pas y-a mais y+a dans l'énoncé...et sa réponse "ah oui y'a une erreur, je changerai pour l'année prochaine...toute façon c'était un exam de seconde sess' et personne n'était arrivé au bout" xD y'en a qui ont dû se prendre la tête à cause d'une erreur dans l'énoncé >_< lol

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 21:23

ca yest, ca marche, ce truc, mais je le signal à tout le monde, jérémie m'a dit pour ce problème que les équations étaient assez sensibles aux conditions initiales...il faut mettre N=64 de base dans le compute_yf, c'était pour ça que ca ne marchait pas! je comprend pas torp pourquoi mais visiblement ce genre d'équations est en fait complexe d'après ses dires ^^

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par remy le Mar 19 Jan - 21:57

je confirme, en le faisant de mon côté j'arrive aussi à
0 50 15
75 137284 -12928.2
150 5.37121e+60 -5.37121e+59
225 inf nan
300 nan nan
mais en mettant 64 pour le N au départ, ca marche (avec 16 aussi, mais pas plus bas)

remy
Humain

Masculin
Nombre de messages : 106
Age : 26
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 22:09

d'après jérémie c'est parce que si une fonction a une pente trop importante au départ bah ca foire pour les grandes valeurs (un problème de convergence ^^) mais il ma dit que ça, c'était avec l'expérience qu'on le devinait ^^ donc voila maintenant on le sait!

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mar 19 Jan - 22:50

un truc, dans les questions d'exam après avoir résolu une équadiff il faut notamment interpoler la solution (y'en a un par exemple où on doit faire un graphique entre 0 et 60s et interpoler de 0 à 30s) qu'est ce que vous écrivez comme dimension pour aller rechercher dans le fichier où vous avez créé les nombres?

EDIT: je ne vois toujours pas comment faire ce qui est écrit juste au dessus et j'aurais besoin d'un programme d'interpolation au point ^^ jep ense que le mien a quelques lacunes :/

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mer 20 Jan - 13:58

Quequ'un aurait-il une solution pour pourvoir interpoler à partir d'un dossier de nombres que l'on a écrit en calculant une équation différentielle?

je calle là dessus depuis ce matin ca me prend la tête (notamment un examen comme ci dessus où on calcule 300valeurs et il ne faut en interpoler que 100 pitié je meurs >-<)

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mer 20 Jan - 16:14

Petit truc, Gaël tu disais qu'il fallait pas stresser pour l'interpolation polynomiale... ils l'vaient pas vue non plus l'an passé en fait, j'viens d'envoyer un mail à jérémie, du coup...bah faut qu'on essaye de faire le truc avec la matrice des coefficients!

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Thibaut V. le Mer 20 Jan - 17:50

tu parles du phys_janv_09_1?
avatar
Thibaut V.
Vertébré

Masculin
Nombre de messages : 41
Age : 28
Localisation : Bastogne
Date d'inscription : 06/01/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par °Lindsay° le Mer 20 Jan - 17:59

oui ca...qui en fait, n'est pas vraiment de l'interpolation polynomiale (merci floriane ^^)

mais je me posais une question, avec floriane, on a rentré les valeurs des xi a la main, y'a pas moyen d'aller les rechercher dans un fichier data et d'en prendre les puissances?

°Lindsay°
Etudiant en Physique

Féminin
Nombre de messages : 165
Localisation : Namur
Date d'inscription : 14/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Thibaut V. le Mer 20 Jan - 18:02

Merci Floriane qui dit merci Thibaut XD.

Bien sûr que c'est possible! Mais je dirais aussi : c'est pas demandé Very Happy
avatar
Thibaut V.
Vertébré

Masculin
Nombre de messages : 41
Age : 28
Localisation : Bastogne
Date d'inscription : 06/01/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Méthode numérique

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 4 Précédent  1, 2, 3, 4  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum