IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Calcul d'une intégrale [Débutant(e)]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Par défaut Calcul d'une intégrale
    salut,

    je suis debutant en c++, et je veux faire un fonction me calculant une integrale par la methode des trapezes...
    J'ai donc defini une fonction dont un des parametres est une fonction au sens mathématique.
    Dans ma fonction (au sens c++) j ai une boucle dans laquelle ma focntion mathématique doit prendre une nouvelle valeurà chaque increment.
    Voilà donc comment j ai programme la chose...:

    ma fonction : 4 parametres : la fonction mathematique, la borne inf, la borne sup et le nombre de segments avec lequel on discretise le domaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    float Integration_Trapeze(float f, float a, float b, float n)
    	{
    		float I=0; /*valeur de l'intégrale*/
    		float h=(b-a)/n; /*pas d'intégration*/
    		float x=a;
    		float fa=0; //initialisation
    		float fb=0; //initialisation
     
    		for (int i=0; i<n; i=i+1)
    		{
    			fa=f;
    			x=x+h; fb=f;
    			I=0.5*h*(fa+fb);
    		};
    		return(I);
    }
    Ma classe main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream> 
    #include <cmath> 
    using namespace std;
     
    float Integration_Trapeze(float, float, float, float);
     
    int main(void)
    {
    float x=0; //initialisation
    float f=x*x; //definition de la fonction
    float I=Integration_Trapeze(f, 0, 2, 10);
    cout<<"integrale = "<<I<<"\n";
    }
    Voilà, si quelqu un peut me filer un coup de main ou un endroit ou je pourrais trouver l info ca serait sympa...
    Tant que j y suis autre question, comment appeler le nombre Pi en c++ ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Par défaut oubli
    oui j ai un peu oublie d expliciter clairement le problème : c est tout simplement que ma fonction ne change pas de valeur dans la boucle !

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Bien le bonjour,

    le premier argument de Integration_Trapeze est un float. Lors de l'appel, ce float vaut 0. Oui, il vaut 0*0.
    Ce que tu passes à Integration_Trapeze est donc la valeur 0. Ce n'est pas une fonction au sens mathématique (qui soit dit en passant n'existe pas en C++).

    Ensuite dans la boucle dans Integration_Trapeze tu fais toutes les opérations que tu veux, mais tu as toujours f qui vaut 0.

    Et pour pi, un simple #define PI 3.14159 peut suffire. Sinon tu as la constante flottante M_PI qui vaut 3.14159 déclarée dans <cmath>

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    pas mieux, tu auras toujours 0 comme ça.
    sinon c'est plus de l'algorithmie qu'un problème de prog je pense (cf. forum algorithmes)

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Une solution à ton problème serait de passer en paramètre une fonction (au sens C++), plutôt qu'un flottant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // Définition du type des fonctions que tu vas utiliser
    typedef float (*TypeFonction)(float);
     
    float Integration_Trapeze(TypeFonction f, float a, float b, float n)
    	{
    		float I=0; /*valeur de l'intégrale*/
    		float h=(b-a)/n; /*pas d'intégration*/
    		float x=a;
    		float fa=0; //initialisation
    		float fb=0; //initialisation
     
    		for (int i=0; i<n; i=i+1)
    		{
    			fa=f(x);
    			x=x+h; fb=f(x);
    			I=0.5*h*(fa+fb);
    		};
    		return(I);
    }
     
    float Carre(float x)
    {
        return x * x;
    }
     
    int main(void)
    {
        float I=Integration_Trapeze(&Carre, 0, 2, 10);
        cout<<"integrale = "<<I<<"\n";
    }

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Par défaut
    ok je vous remercie la dernière reponse me semble interessante mais je n'ai pas tout compris !
    Est ce que quelqu'un pourrait m expliquer ces lignes de commandes ou du moins me dire dans quelle rubrique je pourrais trouver des infos me permettant de les utiliser correctement:

    // Définition du type des fonctions que tu vas utiliser
    typedef float (*TypeFonction)(float);
    et

    int main(void)
    {
    float I=Integration_Trapeze( &Carre, 0, 2, 10);
    cout<<"integrale = "<<I<<"\n";
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul d'une intégrale sous SAS
    Par yemal dans le forum Macro
    Réponses: 7
    Dernier message: 18/07/2011, 21h42
  2. calcul d'une intégrale avec indicatrice
    Par Stalinou dans le forum MATLAB
    Réponses: 4
    Dernier message: 11/04/2011, 21h07
  3. Calcul d'une intégrale double d'une matrice
    Par code_source dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/01/2011, 14h59
  4. Calcul d'une intégrale double par la méthode des quadratures
    Par deubelte dans le forum Mathématiques
    Réponses: 5
    Dernier message: 10/05/2009, 12h40
  5. calcul d'une intégrale
    Par bahiatoon dans le forum Mathématiques
    Réponses: 1
    Dernier message: 14/01/2009, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo