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 integral en c


Sujet :

C

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    0
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 0
    Points : 314
    Points
    314
    Par défaut calcul integral en c
    Bonjour,quelqu'un pourrait-il me donner le codage en c du calcul integral d'une fonction sur un intervalle,je n'y arrive pas!
    merci infiniment

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    soit l'intégrale de f(x) entre x1 et x2,

    tu définies un pas deltax en fonction de la précision désirée et de la vitesse tu fait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nNbrePoints = 10000;
    deltax = (x2-x1) / nNbrePoints;
    Puis soit fIntegrale la valeur de ton intégrale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fIntegrale = 0.0;
    for (int i =0;i <nNbrePoints; i++)
       fIntegrale += f(x1 + i * deltax)*deltax
    => Tu calcules la somme des surfaces des rectangles ça suffit largement !

  3. #3
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    La méthode des tangente est meilleure.
    Notation
    > f(x) : Fonction de x
    > [a..b] : Intervalle sur lequel on calcule l'intégrale

    Principe
    Une intégrale est une somme : on calcule la somme des valeurs de la fonction
    f pour x variant de a à b. Mais comment on ne peut pas calculer une infinité
    de points, on découpe l'intervalle [a..b] en n sous-intervalles de largeur
    (b-a)/n. Ensuite il existe plusieurs méthodes :

    Méthode des rectangles
    On prend k=(b-a)/n, on fait alors varier x de a à a +(b-a)*(1-1/n) en
    ajoutant à chaque itération k à x. L'intégrale s'approxime alors par la
    somme des f(x) multipliée par k.

    Méthode des trapèzes
    On prend k=(b-a)/n, on fait alors varier x de a à a +(b-a)*(1-1/n) en
    ajoutant à chaque itération k à x. L'intégrale s'approxime alors par la
    somme des (f(x) + f(x+k))/2 multipliée par k. Ce qui se simplifie par
    la somme de (f(a)+f(b))/2 et des f(x).

    Algo (= script HaypoCALC, ma calto) :
    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
    31
    32
    33
    34
    35
    NIntegrale(f,x,a,b,n) =
    {
      // Vérifie les paramètres
      Si (EstType(x,"VAR")==FAUX) Erreur ("x doit être une variable !");
      a = Approx(a);
      Si (EstType(a,"REAL")==FAUX) Erreur ("a doit être un nombre réel !");
      b = Approx(b);
      Si (EstType(b,"REAL")==FAUX) Erreur ("b doit être un nombre réel !");
     
      // Passe en calcul approché
      Config ("EXACT",FAUX);
     
      // Calcule la largeur d'un sous-intervalle
      k = (b-a)/n;  
     
      // En utilisant la éthode des trapèzes (du point médian)
      s = (Eval(f,x,a)+Eval(f,x,b))/2;
      Pour (i=1, i<n, i++)
      {
        a += k;
        s += Eval(f,x,a);
      };
     
    /*
      // En utilisant la méthode des rectangles (pris à gauche)
      s = 0;
      Pour (i=0, i<=n-1, i++)
      {
        s += Eval(f,x,a);
        a += k;
      };
    */
     
      Retourne (k*s);
    };
    Note: Eval(f,x,a) évalue la fonction f de variable x au point a <=> f(a) si tu veux.

    Voilà voilou !
    @+ Haypo

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 11
    Points : 18
    Points
    18
    Par défaut
    Et précisons que la méthode des trapézes et rectangles ne sont jamais utilisés en analyse numérique. On préferera la précison de la méthode de simpson ou celle de Gauss - Legendre.
    Tu cherches sur google.com avec ces 2 noms de méthode tu trouveras toutes les docs qui faut.
    Par exemple un exemple en Javascript avec la fontion inverse ici :
    http://www.sciences-en-ligne.com/mom...h_simpson.html

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

Discussions similaires

  1. Vitesse de calcul de scipy.integrate
    Par Kuchikhi dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 05/04/2014, 00h59
  2. Calcul d'un volume par integration numerique
    Par escobarfan dans le forum MATLAB
    Réponses: 8
    Dernier message: 13/10/2009, 22h35
  3. Probleme de syntaxe avec des calculs integrant des variables
    Par trigger00 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/06/2009, 09h20
  4. integration d'une mesure archivée (calcul mathematique)
    Par The_macrafT dans le forum Développement
    Réponses: 2
    Dernier message: 16/06/2009, 13h35

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