Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Intégrale, méthode simpson, c++

Posté par
thibault1812
07-05-12 à 20:34

Bonsoir, j'ai un TP d'informatique a faire pour jeudi mais je bloque pour écrire un programme. Le but est de résoudre une intégrale pas la méthode de simpson donc la formule qui doit être utilisé est : I=(h/3)[f(a)+4f(x1)+2f(x2)+4f(x3)+...+4(fximpair)+2f(xpair)+...+f(x(n-1))+f(b)].

La fonction a intégrer est : f(x) = y = 1/(1+x²)

Pour cela, on doit créer un fichier en c++ nommé fonc_integ.cpp retournant la valeur de l'expression f(x) = y = 1/(1+x²), un fichier integ.h pour déclarer le prototype de la fonction et un fichier main, ou il y aura les opérations :
- Le choix des bornes d'intégration a et b et du nombre d'intervalles n
- le calcul de l'intégrale.

Moi j'ai écris :

Pour FONC_INTEG.CPP



1 # include < iostream >
2 # include < math.h >
3
4 using namespace std;
5
6 double f( double x )
7 {
8
9 // Nom de la fonction : fonction
10 // Paramètre 1 : x
11 // Rôle de la fonction : retourne un valeur de x pour un x donné
12 // Valeur retournée : un réel
13
14 // Déclaration des variables
15
16 double y;
17
18 // Initialisations
19
20 y=1/(1+(x*x));
21
22 // Instruction
23
24
25 y=1/(1+x*x);
26
27 // Retour
28
29 return y;
30 }


Pour INTEG.H:




1 #ifndef INTEG_H
2 #define INTEG_H
3
4 double f(double x);
5
6 #endif/*INTEG_H*/


1et pour MAIN :
2
3
4
5 #include <iostream>
6 #include "integ.h"
7 #include <math.h>
8 using namespace std;
9 double f( double x );
10
11 int main(int argc, char * argv[])
12
13 {
14 // Déclaration des variables
15 double a,b,k;
16 long n;
17 double h;
18 double result1,result2,resultat;
19 // Valeur de a et b et n
20 cout << " Entrez la valeur de a : ";
21 cin >> a;
22 cout << " Entrez la valeur de b : ";
23 cin >> b;
24 cout << " Entrez la valeur de n : ";
25 cin >> n;
26 // Initialisation
27 k=1;
28 h=(b-a)/n;
29
30 // Méthode de simpson
31 // Pour les valeurs paires
32 for(h=a;h=2*k;h++)
33 {
34 result1=f(a)+f(b)+2*f(h);
35 }
36
37 // Pour les valeurs impaires
38 for(h=a;h=(2*k)-1;h++)
39 {
40 result2=4*f(h);
41 }
42 // Rassemblement
43 resultat=(result1+result2)*(h/3);
44
45 // Affichage du resultat
46 cout << " Le resultat est : ";
47 cin >> resultat ;
48
49 // Retour
50 return 0;
51 }


Il y a plusieurs problèmes, le résultat ne s'affiche pas et je crois que le calcul ne se fait pas, quelqu'un pourrait m'éclairer svp ?

Posté par
Simpom
re : Intégrale, méthode simpson, c++ 07-05-12 à 23:55

Salut,

Je n'ai pas gratté, mais tu as au moins un problème dans ta boucle "for". Il faut "h<2*k-1" en condition.

Sinon deux remarques (mais j'imagine que ce sont des demandes de ton prof) :
1) Dans la fonction f, écrire une seule ligne
>>> double y=1/(1+(x*x));
est suffisant (surtout tu écris deux fois la ligne "y=1/(1+x*x);")

2) Tu n'as pas besoin de déclarer tes variables en tête de programme, et quand la taille des programmes augmente déclarer toutes les variables en tête de code devient vite laborieux.

Bonne continuation. N'hésites pas si ce n'est pas suffisant.

Posté par
thibault1812
re : Intégrale, méthode simpson, c++ 08-05-12 à 09:47

c'est bon j'ai trouvé mon erreur, c'était pour les boucles, il faut mettre 32 for(x=a+h;h=2*k;h++). Ca marche nickel. Maintenant je passe a la partie dur du tp ^^



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !