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 :

Valeur d'une intégrale


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Points : 0
    Points
    0
    Par défaut Valeur d'une intégrale
    Bonjour,

    I(n)=integrale (de 0 a1 ,x^n *exp(-x))
    calculer I(50) et comparer avec la valeur exacte explique.
    C'est un exercice d'analyse numérique. J'ai fait un programme en utilisant l'intégration par parties mais il donne des valeurs bizarres.

    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
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<stdlib.h>
    int n;
    int integr( int n)
    {
        if (n==0)
        return 1-exp(-1);
        else
        return (-exp(-1)+n*integr(n-1));
    }
    main() 
    {
     
        printf("donner n");
        scanf("%d",&n);
        printf(" l'integrale  est egale %d ", integr(n));
        getch ();
    }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Essaie double plutot que int.
    en entier, "1-e^-1" vaut 1.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    oui j'ai essayé avec double ca donne la meme chose.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Si un résultat est faux, il y a une erreur soit dans les données, soit dans le calcul, soit dans l'oeil qui juge le résultat.

    Dans ton cas, théoriquement, que vaut I pour N=0, N=1, N=2? Et d'après ton programme?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    D'après un peu de calcul, tu peux trouver que l'intégrale à chercher est définie ainsi:
    I(n) = n*I(n-1) - 1/e
    I(0) = 1
    En développant, on trouve que:
    I(n) = a(n) - b(n)*1/e

    a(n) s'avère être la suite a(n) = n * a(n-1), c'est à dire factorielle(n), noté aussi n!.
    b(n) est plus complexe a écrire, mais est la somme sur i de 0 à n de (n! / i!).

    I(n) = n! - (1/e)*(n!/0! + n!/1! + n!/2! + ... + n!/n!).
    un coup de tableur te donnera assez rapidement ces valeurs.

    Sache que sur des enties non signés 64bits, tu ne peux pas calculer plus loin que 19!
    Tu es donc obligé (par cette méthode) de passer par des doubles pour calculer I(50).

    Mais ton résultat est mauvais à quel point? avec excell, je tombe sur des incohérences dès I(18)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    mais I(0)=1-1/e
    c'est pas 1 c'est la fonction expentielle .

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Citation Envoyé par hmizo Voir le message
    mais I(0)=1-1/e
    c'est pas 1 c'est la fonction expentielle .
    Leternel t'a donné la solution dès le deuxième post. Ligne 6, tu écris :

    Le résultat de chaque étape est un nombre à virgule mais tu renvoies des entiers ! Ça veut dire qu'à chaque appel, tu tronques la partie rationnelle. Et comme tu appelles ta fonction récursivement, tes erreurs se cumulent. Plus n est grand, plus l'écart avec les valeurs théoriques devient grand.

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/11/2014, 14h49
  2. tableau des differentes valeurs d'une intégrale
    Par medphy dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 12/11/2009, 20h57
  3. test la valeur d'une date dans une requete
    Par TuxP dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 14h53
  4. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  5. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47

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