Académique Documents
Professionnel Documents
Culture Documents
November 5, 2019
1
Nous obtenons la formule composite associée pour approcher I ( f ).
Les abréviations Rg, Rd, Rm, T, S, s, et c désignent, respectivement, Rectangle à gauche, Rect-
angle à droite, Rectangle milieu, Trapèze, Simpson, simple et composite.
Dans tout ce qui suit, nous considérons une fonction f continue sur [ a, b] ⊂ R et xk = a + kh,
0 ≤ k ≤ n les points d’intégrations issus de la subdivision de [ a, b] en n sous intervalles avec un
b−a
pas fixe h = .
n
méthode composite des rectangles à gauche. 2. Sur un même graphe, représenter la valeur exacte
c ( f ) en rouge.
I ( f ) en bleu et la valeur approchée IRg
Indication : utiliser la fonction plt.fill_between. Consuter le help pour savoir comment
l’utiliser. 3. Retracer les figures pour n = 10. Observer les résultats et conclure.
Question 1 :
[3]: f=lambda t : np.exp(-t**2)
a=-1
b=1
n=4
I_Rg=rectangle_gauche_composite(f,a,b,n)
print(I_Rg)
1.4627405036571262
Question 2 :
[4]: plt.figure(figsize=(20,10))
t=np.linspace(-1,1,100)
x=np.linspace(-1,1,n+1)
plt.fill_between(t,f(t),color="blue",alpha=0.5)
2
plt.fill_between(x,f(x),step="post",color="red",alpha=0.5)
plt.legend(('$I(f)$','$I_{Rg}^c(f)$'),loc=0,fontsize=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('t',fontsize=30)
plt.ylabel('f(t)',fontsize=30)
plt.title('Approximation de $\int_{-1}^1 e^{-t^2}dt$ par la méthode des␣
,→rectangles à gauche (n=4)', fontsize=30)
plt.show()
Question 3 :
[5]: n=10
I_Rg=rectangle_gauche_composite(f,a,b,n)
print(I_Rg)
plt.figure(figsize=(20,10))
t=np.linspace(-1,1,100)
x=np.linspace(-1,1,n+1)
plt.fill_between(t,f(t),color="blue",alpha=0.5)
plt.fill_between(x,f(x),step="post",color="red",alpha=0.5)
plt.legend(('$I(f)$','$I_{Rg}^c(f)$'),loc=0,fontsize=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('t',fontsize=30)
plt.ylabel('f(t)',fontsize=30)
plt.title('Approximation de $\int_{-1}^1 e^{-t^2}dt$ par la méthode des␣
,→rectangles à gauche (n=10)', fontsize=30)
plt.show()
3
1.4887366795273342
1.4627405036571262
Question 2:
4
[8]: plt.figure(figsize=(20,10))
t=np.linspace(-1,1,100)
x=np.linspace(-1,1,n+1)
plt.fill_between(t,f(t),color="blue",alpha=0.5)
plt.fill_between(x,f(x),step="pre",color="red",alpha=0.5)
plt.legend(('$I(f)$','$I_{Rd}^c(f)$'),loc=0,fontsize=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('t',fontsize=30)
plt.ylabel('f(t)',fontsize=30)
plt.title('Approximation de $\int_{-1}^1 e^{-t^2}dt$ par la méthode des␣
,→rectangles à droite (n=4)', fontsize=30)
plt.show()
Question 3:
[9]: n=10
I_Rd=rectangle_droite_composite(f,a,b,n)
print(I_Rd)
plt.figure(figsize=(20,10))
t=np.linspace(-1,1,100)
x=np.linspace(-1,1,n+1)
plt.fill_between(t,f(t),color="blue",alpha=0.5)
plt.fill_between(x,f(x),step="pre",color="red",alpha=0.5)
plt.legend(('$I(f)$','$I_{Rd}^c(f)$'),loc=0,fontsize=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('t',fontsize=30)
5
plt.ylabel('f(t)',fontsize=30)
plt.title('Approximation de $\int_{-1}^1 e^{-t^2}dt$ par la méthode des␣
,→rectangles à droite (n=10)', fontsize=30)
plt.show()
1.4887366795273345
6
[11]: n=4
I_T=trapeze_composite(f,a,b,n)
print(I_T)
1.4627405036571262
Question 2:
[12]: plt.figure(figsize=(20,10))
t=np.linspace(-1,1,100)
x=np.linspace(-1,1,n+1)
plt.fill_between(t,f(t),color="blue",alpha=0.5)
plt.fill_between(x,f(x),color="red",alpha=0.5)
plt.legend(('$I(f)$','$I_{T}^c(f)$'),loc=0,fontsize=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('t',fontsize=30)
plt.ylabel('f(t)',fontsize=30)
plt.title('Approximation de $\int_{-1}^1 e^{-t^2}dt$ par la méthode des␣
,→trapèzes (n=4)', fontsize=30)
plt.show()
Question 3:
[13]: n=10
I_T=trapeze_composite(f,a,b,n)
print(I_T)
plt.figure(figsize=(20,10))
7
t=np.linspace(-1,1,100)
x=np.linspace(-1,1,n+1)
plt.fill_between(t,f(t),color="blue",alpha=0.5)
plt.fill_between(x,f(x),color="red",alpha=0.5)
plt.legend(('$I(f)$','$I_{T}^c(f)$'),loc=0,fontsize=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('t',fontsize=30)
plt.ylabel('f(t)',fontsize=30)
plt.title('Approximation de $\int_{-1}^1 e^{-t^2}dt$ par la méthode des␣
,→trapèzes (n=10)', fontsize=30)
plt.show()
1.4887366795273342
h( )
p −1 p −1
I ( f ) ≈ ISc ( f ) = f ( a) + 4 ∑ f ( x2k+1 ) + 2 ∑ f ( x2k ) + f (b) ,
3 k =0 k =1
avec n = 2p, p ∈ N∗ .
Ecrire une fonction simpson_composite(f,a,b,n) prenant en entrée f , une fonction continue
sur [ a, b], a, b, les bornes de [ a, b] et n, le nombre de sous intervalles à considérer et retourne la
valeur approchée ISc ( f ).
[14]: def simpson_composite(f,a,b,n) :
h=(b-a)/n
8
z0=f(a)+f(b)
z_paire=0
z_impaire=0
p=n//2
for i in np.arange(1,p) :
z_paire+=f(a+2*i*h)
for i in np.arange(0,p) :
z_impaire+=f(a+(2*i+1)*h)
z=(z0+2*z_paire+4*z_impaire)/3
return h*z
Application 4:
EStimer la valeur de I ( f ) de l’application 1 par la méthode composite de Simpson pour n = 4.
[15]: n=4
I_S=simpson_composite(f,a,b,n)
print(I_S)
1.4943608578190206
2. Pour n = 4, ensuite, pour n = 10, approcher I ( f ) par les méthodes composites déjà pro-
grammées.
3. Comparer les résultats.
Question 1:
[16]: import sympy as sp
[17]: x=sp.Symbol('x')
I=sp.integrate(1/x,(x,1,2)).evalf()
a=1
b=2
f=lambda x: 1/x
Question 2:
[18]: n=4
print('n=',4)
print ("Formule du rectangle a gauche composite : ",␣
,→rectangle_gauche_composite(f,a,b,n))
9
print ("Formule des trapezes composite : ", trapeze_composite(f,a,b,n))
print ("Formule de Simpson composite : ", simpson_composite(f,a,b,n))
n=10
print('n=',10)
print ("Formule du rectangle a gauche composite : ",␣
,→rectangle_gauche_composite(f,a,b,n))
n= 4
Formule du rectangle a gauche composite : 0.7595238095238095
Formule du rectangle a droite composite : 0.6345238095238095
Formule des trapezes composite : 0.6970238095238095
Formule de Simpson composite : 0.6932539682539683
n= 10
Formule du rectangle a gauche composite : 0.718771403175428
Formule du rectangle a droite composite : 0.6687714031754278
Formule des trapezes composite : 0.693771403175428
Formule de Simpson composite : 0.6931502306889303
Question 3:
[19]: n=4
print('n=',4)
print ("Erreur commise par la méthode composite des rectangles à gauche : ",␣
,→abs(rectangle_gauche_composite(f,a,b,n)-I))
print ("Erreur commise par la méthode composite des rectangles à droite : ",␣
,→abs(rectangle_droite_composite(f,a,b,n)-I))
n=10
print('n=',10)
print ("Erreur commise par la méthode composite des rectangles à gauche : ",␣
,→abs(rectangle_gauche_composite(f,a,b,n)-I))
print ("Erreur commise par la méthode composite des rectangles à droite : ",␣
,→abs(rectangle_droite_composite(f,a,b,n)-I))
n= 4
10
Erreur commise par la méthode composite des rectangles à gauche :
0.0663766289638642
Erreur commise par la méthode composite des rectangles à droite :
0.0586233710361358
Erreur commise par la méthode composite des trapèzes : 0.00387662896386420
Erreur commise par la méthode composite de Simpson : 0.000106787694023058
n= 10
Erreur commise par la méthode composite des rectangles à gauche :
0.0256242226154827
Erreur commise par la méthode composite des rectangles à droite :
0.0243757773845175
Erreur commise par la méthode composite des trapèzes : 0.000624222615482672
Erreur commise par la méthode composite de Simpson : 3.05012898504931e-6
11
Question 3:
[22]: a=0
b=np.pi/2
N=np.arange(10,1010,10)
Err_rg=[]
Err_rd=[]
Err_t=[]
Err_s=[]
for n in N:
Err_rg.append(np.abs(I-rectangle_gauche_composite(f,a,b,n)))
Err_rd.append(np.abs(I-rectangle_droite_composite(f,a,b,n)))
Err_t.append(np.abs(I-trapeze_composite(f,a,b,n)))
Err_s.append(np.abs(I-simpson_composite(f,a,b,n)))
[23]: plt.figure(figsize=(20,10))
plt.plot(N,Err_rg,'r*--', N, Err_rd, 'b^--', N, Err_t ,'go--',N,␣
,→Err_s,'y>--',markersize=8,linewidth=3)
,→Simpson'),fontsize=20,loc=0)
plt.xscale('log')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('nombre de sous-intervalles', fontsize=30)
plt.ylabel('Erreur d\'intégration', fontsize=30)
plt.grid(True)
12
1.8 Nombre d’itérations
L’Objectif de cette partie est de comparer les différentes méthodes d’intégration numérique, pro-
grammées dans ce TP, en terme de nombre d’itérations nécessaires pour approcher l’intégrale
∫ b
I= f (t)dt avec une précision ε donnée.
a
Ecrire une fonction integrale_precise(f, a, b, I, epsilon, methode='') qui permet de
déterminer le nombre nécessaire d’itérations en fonction de la précision epsilon, la valeur de I
et une méthode parmi les méthodes d’intégrations numériques définies ci-dessus.
[24]: def integrale_precise(f,a,b,I,epsilon, methode=''):
n=2
val =methode(f,a,b,n)
while (abs(val-I) >epsilon):
n+=1
val=methode(f,a,b,n)
n_necessaire=n
return n_necessaire
Exercice 2: ∫
1 1
On considère la fonction f (t) = 2
, t ∈ [0, 1]. 1. Donner la valeur de I = f (t)dt, en utilisant
1+t 0
la fonction integrate du module sympy.
2. Pour ε = 10−1 , ε = 10−2 et ε = 10−3 , estimer le nombre necessaire de sous-intervalles pour
approcher I à ε prés en utilisant:
a. La méthode du rectange à gauche
b. La méthode du rectangle à droite
c. La méthode du trapèze
d. La méthode de Simpson 3. Comparer la convergence des méthodes en terme du nombre
d’itérartion nécessaire.
13
Question 1:
[25]: x=sp.Symbol('x')
I=sp.integrate(1/(1+x**2),(x,0,1)).evalf()
Question 2:
[26]: f=lambda x: 1/(1+x**2)
epsilon=1e-2
N_r_g=integrale_precise(f,0,1,I,epsilon,methode=rectangle_gauche_composite)
N_r_d=integrale_precise(f,0,1,I,epsilon,methode=rectangle_droite_composite)
N_t=integrale_precise(f,0,1,I,epsilon,methode=trapeze_composite)
N_s=integrale_precise(f,0,1,I,epsilon,methode=simpson_composite)
print('La valeur exacte de I est =', I)
print('le nombre necessaire de sous intervalles pour estimer I en utilisant la␣
,→methode de rectange à gauche à epsilon pres =', epsilon,' est :', N_r_g)
1.9 Application
On lance une fusée verticalement du sol et on mesure son accélération γ durant les premières 80
secondes. √
Les mesures montrent que γ évolue en fonction de t selon la fonction γ(t) = 0.1t2 + 900. Soit
V la vitesse de la fusée à chaque instant t.
(b) Calculer la vitesse V de la fusée à l’instant t = 80s, par la méhode composée des trapèzes
pour n ∈ {10, 100, 1000}.
(c) Calculer la vitesse V de la fusée à l’instant t = 80s, par la méthode composée de Simpson
pour n ∈ {10, 100, 1000}.
14
1.9.1 Solution
(a) On sait que
∫ t
V ( t ) = V (0) + γ(s)ds.
0
[28]: trapeze_composite(gamma,0,80,100)
[28]: 2659.9095419301143
[29]: simpson_composite(gamma,0,80,100)
[29]: 2659.898669390679
2 Références
[1] Kiusalaas, J. (2013). Numerical methods in engineering with Python 3. Cambridge university
press.
[2] Numpy Package
[3] Mathplotlib Package
[4] Jupyter markdowns
[5] Sympy Package
15