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
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
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 :
Puis soit fIntegrale la valeur de ton intégrale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 nNbrePoints = 10000; deltax = (x2-x1) / nNbrePoints;
=> Tu calcules la somme des surfaces des rectangles ça suffit largement !
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
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) :
Note: Eval(f,x,a) évalue la fonction f de variable x au point a <=> f(a) si tu veux.
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); };
Voilà voilou !
@+ Haypo
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager