Bonjour, je dois créer un programme qui intègre grâce à des méthodes numériques telles que Simpson ou trapèzes des fonctions usuelles.

J'ai créer une fonction Simpson qui est censé intégrer mes fonctions. Lorsque je compile je n'ai pas d'erreur mais lors de l'exécution mon intégrale est toujours égale à 0. Je vais vous montrer comment j'ai procédé, j'espère que quelqu'un pourra m'aider.

Pour le moment j'ai juste fais le cas de simpson pour la fonction exponentielle mais lorsque j'avais essayer pour les autres fonctions ça me retournait également 0.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
 
#include < iostream > #include < cmath > #include < string > #include < vector > #include < fstream > #include < cstdlib >
  using namespace std;
 
int operation, choix1, degre, methode;
double a, b, c, alpha, beta;
vector < float > polynome(degre + 1);
 
//Liste des intégrations exactes
 
double exponentielle_exacte() {
  return ((a / b) * (exp(b * beta + c)) - (a / b) * (exp(b * alpha + c)));
}
 
double logarithme_exacte() {
  return (a * (1 / b) * (((log(b * beta + c)) - (b * beta + c)) - ((log(b * alpha + c)) - (b * alpha + c))));
}
 
double cosinus_exacte() {
  return (a * ((1 / b) * (sin(b * beta + c)) - (1 / b) * (sin(b * alpha + c))));
}
 
double sinus_exacte() {
  return (a * (1 / b) * ((cos(b * alpha + c)) - (cos(b * beta + c))));
}
 
double tangente_exacte() {
  return ((-a / b) * ((log(fabs(cos(b * beta + c)))) - (log(fabs(cos(b * alpha + c))))));
}
 
double quotient_affine() {
  return ((a / b) * ((log(fabs(b * beta + c))) - (log(fabs(b * alpha + c)))));
}
 
//double racinecarree_exacte() {return (( (2.0)*a)/(3.0)*( ( (sqrt(b*beta+c))^(3.0))-(   (sqrt(b*alpha+c))^(3.0))        ));      }
 
typedef double( * Fonction)(double);
 
//Liste des fonctions à intégrer
 
double fonction_exponentielle(double x) {
  return (a * (exp(b * x + c)));
}
double fonction_logarithme(double x) {
  return (a * (log(b * x + c)));
}
double fonction_cosinus(double x) {
  return a * (cos(b * x + c));
}
double fonction_sinus(double x) {
  return a * (sin(b * x + c));
}
double fonction_tangente(double x) {
  return a * (tan(b * x + c));
}
double fonction_quotient(double x) {
  return a / (b * x + c);
}
double fonction_racinecarree(double x) {
  return a * (sqrt(b * x + c));
}
 
double Simpson(double u, double v, Fonction f) {
 
  return (v - u) * ((1 / 6) * (( * f)(u)) + (2 / 3) * (( * f)((u + v) / 2)) + (1 / 6) * (( * f)(v)));
 
}
 
int main() {
 
  cout << "Entrez le choix de calcul d'intégrale que vous souhaitez effectuer :" << endl;
  cout << "1.Calculer l'intégrale d'une fonction à une variable réelle" << endl;
  cout << "2.Calculer l'intégrale de la somme de deux fonctions à une variable réelle" << endl;
  cout << "3.Calculer l'intégrale de la différence de deux fonctions à une variable réelle" << endl;
  cout << "4.Calculer l'intégrale du produit de deux fonctions à une variable réelle" << endl;
  cout << "5.Calculer l'intégrale du quotient de deux fonctions à une variable réelle" << endl;
  cout << "6.Calculer l'intégrale de la composée de deux fonctions à une variable réelle" << endl;
 
  cin >> operation;
 
  if (operation == 1) {
 
    cout << "Vous avez choisi d'intégrer une fonction à une variable réelle, choisissez laquelle parmi les suivantes :" << endl;
    cout << "1.fonction exponentielle de la forme a*exp(b*x+c)" << endl;
    cout << "2.fonction logarithme népérien de la forme a*ln(b*x+c)" << endl;
    cout << "3.fonction cosinus de la forme a*cos(b*x+c)" << endl;
    cout << "4.fonction sinus de la forme a*sin(b*x+c)" << endl;
    cout << "5.fonction tangente de la forme a*tan(b*x+c)" << endl;
    cout << "6.fonction de la forme a/(bx+c)" << endl;
    cout << "7.fonction racine carrée de la forme a*(b*x+c)^(1/2)" << endl;
    cout << "8.fonction polynomiale" << endl;
 
    cin >> choix1;
 
  }
 
  if (choix1 != 8) {
    cout << "Entrez successivement a, b et c" << endl;
    cin >> a;
    cin >> b;
    cin >> c;
 
    cout << "Choisissez les bornes sur lesquelles vous souhaitez intégrer votre fonction" << endl;
    cin >> alpha;
    cin >> beta;
  }
 
  cout << "Quelle méthode d'intégration souhaitez vous utiliser ?" << endl;
  cout << "1.La méthode d'intégration exate" << endl;
  cout << "2.La méthode de Simpson" << endl;
  cout << "3.La méthode des trapèzes" << endl;
  cin >> methode;
 
  if (choix1 == 1) {
 
    if (methode == 1) {
 
      cout << "L'intégrale exacte de " << alpha << "à " << beta << " de " << a << "*exp(" << b << "x+" << c << ") est :" << exponentielle_exacte() << endl;
    }
 
    if (methode == 2) {
      cout << "L'intégrale approchée par la méthode de Simpson de " << alpha << "à" << beta << " de " << "exp(" << b << "x+" << c << ") est :" << Simpson(alpha, beta, fonction_exponentielle) << endl;
    }
 
  }
 
  if (choix1 == 2) {
 
    if (methode == 1) {
      cout << "L'intégrale exacte de " << alpha << "à " << beta << " de " << a << "*ln(" << b << "x+" << c << ") est :" << logarithme_exacte() << endl;
    }
 
    //if(methode==2) {cout<<"L'intégrale approchée par la méthode de Simpson de "<<alpha<<"à"<<beta<<" de "<<"log"<<b<<"x+"<<c<<") est :"<<Simpson(*fonction_logarithme)<<endl;}
 
  }
 
  if (choix1 == 3) {
 
    if (methode == 1) {
      cout << "L'intégrale exacte de " << alpha << "à " << beta << " de " << a << "*cos(" << b << "x+" << c << ") est :" << cosinus_exacte();
    }
    //if(methode==2) {cout<<"L'intégrale approchée par la méthode de Simpson de "<<alpha<<"à"<<beta<<" de "<<"cos("<<b<<"x+"<<c<<") est :"<<Simpson(*fonction_cosinus)<<endl;}
 
  }
 
  if (choix1 == 4) {
 
    if (methode == 1) {
      cout << "L'intégrale exacte de " << alpha << "à " << beta << " de " << a << "*sin(" << b << "x+" << c << ") est :" << sinus_exacte();
    }
    //if(methode==2) {cout<<"L'intégrale approchée par la méthode de Simpson de "<<alpha<<"à"<<beta<<" de "<<"sin("<<b<<"x+"<<c<<") est :"<<Simpson(*fonction_sinus)<<endl;}
 
  }
 
  if (choix1 == 5) {
 
    if (methode == 1) {
      cout << "L'intégrale exacte de " << alpha << "à " << beta << " de " << a << "*tan(" << b << "x+" << c << ") est :" << tangente_exacte();
    }
    //if(methode==2) {cout<<"L'intégrale approchée par la méthode de Simpson de "<<alpha<<"à"<<beta<<" de "<<"tan("<<b<<"x+"<<c<<") est :"<<Simpson(*fonction_tangente)<<endl;}
 
  }
 
  if (choix1 == 6) {
 
    if (methode == 1) {
      cout << "L'intégrale exacte de " << alpha << "à " << beta << " de " << a << "/(" << b << "x+" << c << ") est :" << quotient_affine();
    }
    //if(methode==2) {cout<<"L'intégrale approchée par la méthode de Simpson de "<<alpha<<"à"<<beta<<" de "<<a<<"/("<<b<<"x+"<<c<<") est :"<<Simpson(*fonction_quotient)<<endl;}
 
  }
 
  if (choix1 == 8) {
 
    cout << "Entrez le degré du polynôme que vous souhaitez intégrer" << endl;
    cin >> degre;
    for (int i = 0; i <= degre; i++) {
      cout << "Entrez le coefficient du monome de degré :" << i << ":" << endl;
      cin >> polynome[i];
    }
    cout << "Le polynôme que vous souhaitez intégrer est :" << endl;
    for (int k = degre; k > 0; --k) {
 
      cout << polynome[k] << "x^" << k;
      if (polynome[k - 1] >= 0) {
        cout << "+";
      }
      cout << polynome[0] << endl;
 
    }
 
  }
 
  return 0;
}