404 not found
Bonsoir,
Comme à une étudiante plutôt
Un peu de recherche et on trouve déjà cette ressource (entre autres pour étudiants) sur Developpez : Exemple 3 : calcul intégral - méthode des trapèzes
Arduino, Raspberry Pi, ESP32, Infineon/Cypress PSoC, FPGA...
Arduino : Le forum, Le manuel de laboratoire, les Quiz, les cahiers pratiques, les sources et outils
Des capteurs connectés pour la maison avec Arduino et Raspberry Pi [Nouveau] Et en Zigbee ?
- FPGA : programmation d'un transmetteur UART en SystemVerilog [Nouveau]
- Apprendre à développer sur FPGA avec Intel Quartus Prime
- FPGA : programmer un contrôleur pour écran VGA
[Nouveau] Vous voulez soutenir le Club Developpez.com ? Abonnez-vous !
Et bien, vous avez f = sin x /x, a, b = 1, 3 et n = 10.
Mais avant d'essayer de résoudre votre problème, il faut essayer de comprendre comment fonctionne l'exemple qui vous a été donné.
De toutes façons, dites vous bien "qu'apprendre" passe par se gratter la tête pour arriver à faire l'exercice.
Si on le fait à votre place, on pourra éventuellement se faire plaisir, mais, in fine, vous, vous n'aurez rien appris.
Dit autrement, ce qui est important c'est ce que vous allez accumuler côté expérience dans "le voyage": essayer de coder la chose, la mettre au point, tester,...
La destination, i.e. le résultat de l'exercice, n'a pas grande importance: demain, sera un autre exo. pretexte à un autre voyage dans le monde de la programmation.
- W
hello,
si tu dois faire une représentation graphique, il te faut une bibliothèque graphique du genre pylab (librairies NumPy et Matplotlib). .
Pour te mettre sur la voie il y a un exemple ici qui montre comment faire pour la méthode des rectangles. Et ensuite il y a un exercice intéressant :
Exercice
Faire un programme similaire au précédent pour la méthode des trapèzes en utilisant les mêmes valeurs numériques pour la fonction. Réaliser de même la visualisation des trapèzes.
A toi de t'inspirer de la méthode des rectangles pour réaliser celle des trapèzes. Tu vas devoir encore te gratter la tête mais cette fois ci normalement tu as tous les éléments pour trouver.
Ami calmant, J.P
hello,
puisque personne ne te réponds et comme je ne suis pas un spécialiste des maths, le tracé à l'air bon mais le calcul de l'intégrale ne me semble pas correct :
il faut que tu traduises ceci :
en t'inspirant de ce qui avait été fait pour la méthode des rectangles.
et quand tu fais integrale = integrale + cela peut être simplifié par integrale +=
Moi j'arrive à un résultat à peu près bon à part que je semble tomber sur le problème des intervalles et des poteaux.
Ami calmant, J.P
y a un truc louche dans ton code : il manque la partie qui définit les points x , y
la partie *(y[i]+y[i+1]) me semble correcte mais c'est l'autre côté qui cloche . Réfléchis ( encore un grattage de tête) que sont a et b par rapport à f(a) et f(b)
Ah oui j'ai fais une bête erreur :/ mais je vois toujours pas comment definir x et y
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 from pylab import * integrale= 0 for i in range(9): integrale += ((x[i+1]-x[i])/2)*(y[i]+y[i+1]) x_rect = [x[i], x[i],x[i+1] , x[i+1], x[i]] y_rect = [0 , y[i],y[i+1] , 0 , 0 ] plot(x_rect, y_rect,"r") print("integrale =", integrale) show ()
c'était la partie :
pour cosinus mais pour sin(x)/x attention à la valeur x = 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 xmin = 0 xmax = 3*pi/2 nbx = 10 nbi = nbx - 1 # nombre d'intervalles x = linspace(xmin, xmax, nbx) y = cos(x)
on en arrive au problème que j'évoquais précedemment. Y a un écart par rapport à une autre méthode :
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 # integration numerique par la methode des rectangles avec alpha = a from pylab import * def trapezoidal(f, a, b, n): h = float(b - a) / n print ("h= ",h) s = 0.0 s += f(a)/2.0 for i in range(1, n): s += f(a + i*h) s += f(b)/2.0 return s * h xmin = 0.5 xmax = 3*pi/2 nbx = 10 nbi = nbx - 1 # nombre d'intervalles x = linspace(xmin, xmax, nbx) y = sin(x)/x plot(x,y,"bo-") integrale = 0 for i in range(nbi): integrale += 0.5*(x[i+1]-x[i])*(y[i+1]+y[i]) # dessin du rectangle x_rect = [x[i], x[i], x[i+1], x[i+1], x[i]] # abscisses des sommets y_rect = [0 , y[i], y[i+1] , 0 , 0 ] # ordonnees des sommets plot(x_rect, y_rect,"r") print("integrale = ", integrale) print("trapezoidale = ", trapezoidal(lambda x:sin(x)/x, 0.5,3*pi/2, 10)) show()avec :integrale = 1.1190693052
h= 0.421238898038469
trapezoidale = 1.11834427665
j'ai la même valeur que intégrale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part print("trapezoidale = ", trapezoidal(lambda x:sin(x)/x, 0.5,3*pi/2, 9))
Qui peut expliquer la différence entre la valeur d'intégrale et celle de trapezoidal ? un problème d'intervalles et de poteaux ?h= 0.4680432200427433
trapezoidale = 1.1190693052
et au fait thenoob tu devais pas faire ton exercice de 1 à 3 ?
De plus que je dois utiliser c'est celle la : intégral de 1 à 3 de sin x /x
Les deux méthodes suivantes sont a priori bonnes :
Elles donnent toutes les deux 1.11834427665
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 import matplotlib.pyplot as plt import numpy as np x_min = 0.5 x_max = 3*np.pi/2 nb_x = 11 x = np.linspace(x_min, x_max, nb_x) y = np.sin(x) / x plt.plot(x,y,"bo-") integrale= 0 for i in range(nb_x-1): integrale += ((x[i+1]-x[i])/2)*(y[i]+y[i+1]) x_rect = [x[i], x[i],x[i+1] , x[i+1], x[i]] y_rect = [0 , y[i],y[i+1] , 0 , 0 ] plt.plot(x_rect, y_rect,"r") print("Intégrale =", integrale) plt.show () def f(x): return np.sin(x)/x def integrale_trapeze(f,a,b,n): i = 0 pas=(b-a)/n integrale=0 while i < n: integrale = integrale + (pas/2)*(f(a+i*pas)+f(a+(i+1)*pas)) i = i+1 return(integrale) print("Intégrale = ",integrale_trapeze(f,x_min,x_max,nb_x-1))
OK merci beaucoup à tous !
Vraiment un grand merci de votre implication
Partager