• Aucun résultat trouvé

2017-2018

N/A
N/A
Protected

Academic year: 2021

Partager "2017-2018"

Copied!
12
0
0

Texte intégral

(1)

ISA BTP, 4◦ année ANNÉE UNIVERSITAIRE 2017-2018

CONTRÔLE CONTINU Méthodes numériques. Durée 1h30

Pour chacun des algorithmes à commenter, on donnera en entête l’objectif de chacun des algorithmes. On précisera aussi au cœur du programme toutes les subtilités que l’on jugera nécessaire de mettre en évidence. Exercice 1 1. Commenter l’algorithme 1 donné en annexe 1. On remplacera en particulier le message

d’er-reur "Message d’erd’er-reur 1" par un message plus explicite.

2. Commenter l’algorithme 2 donné en annexe 2. On remplacera en particulier les messages d’erreur "Message d’erreur 2" et "Message d’erreur 3" par des messages plus explicites.

? ? ? ? ? ? ? ? ? ? ?

Exercice 2 Certaines méthodes de quadrature sont basées sur la propriété suivante : pour un degré p fixé, il existe p + 1 coefficients ω(p)0 , . . . , ωp(p), indépendant de l’intervalle [a, b] tels que pour tout polynôme P (x) de

degré p, on ait Z b a P (x)dx = (b − a) p X k=0 ωk(p)P (xk)

où les xk sont les p + 1 points du segment [a, b] découpant ce dernier en p intervalles de même longueur. Il est

alors possible de déterminer, pour p ∈ N∗ fixé, les coefficients ωk(p) en se basant sur les fonctions puissances, intégrées sur l’intervalle [−1, 1].

1. Cas p = 2

(a) Déterminer un système d’équations linéaires (S) vérifié par les coefficients ω(2)0 , ω1(2) et ω(2)2 en s’appuyant sur les égalités suivantes :

∀i = 0, 1, 2, Z 1 −1 Pi(x)dx = 2  ω0(2).Pi(−1) + ω (2) 1 .Pi(0) + ω (2) 2 .Pi(1)  où P0 : x 7→ 1, P1 : x 7→ x, P2 x 7→ x2

On précisera la matrice A et le second membre B de ce système linéaire. (b) Résoudre le système et donner les poids relatifs à la méthode de Simpson. (c) Montrer que, pour tout polynôme P (x) = ax2+ bx + c de degré 2, on a

Z 1 −1 P (x)dx = 2 1 6.P (−1) + 2 3.P (0) + 1 6.P (1) 

(d) À l’aide du changement de variable

t = h

2x + a + h 2

montrer que pour tout polynôme P (x) = ax2+ bx + c et pour tout intervalle de la forme [a, a + h],

on a Z a+h a P (t)dt = h 1 6.P (a) + 2 3.P  a +h 2  +1 6.P (a + h) 

2. Cas général : commenter l’algorithme 3 donné en annexe 3.

3. Expliquer en quoi ces méthodes permettent de calculer une valeur approchée de l’intégrale I = Z b

a

f (x)dx à l’aide de polynômes interpolateurs.

4. Commenter les algorithmes 4.1 et 4.2 donnés en annexe 4. ? ?

(2)

Nom : ... Prénom : ...

ANNEXE

1

Algorithme 1 # ... # ... # ... 1. def Fonction1(X,Y ): 2. p=len(X)-1 # ... 3. if p <> len(Y)-1: 4. return "Message d’erreur 1" # ... 5. P(x)=0 6. for i in range(p+1): # .. . 7. Li(x)=1 8. for j in range(p+1): 9. if i<>j: 10. Li(x) = Li( x)*(x-X[j])/(X[i]-X[j]) P(x) = P(x) + Y[i]*Li(x) # ... 11. return P

(3)

Nom : ... Prénom : ...

ANNEXE

2

Algorithme 2 # ... # ... # ... 1. def Fonction2(X,Y ,a,p): 2. if p>len(X)-1: 3. return "Message d’erreur 2" # ... 4. if a<X[0] o r a>X[-1]: 5. return "Message d’erreur 3" # ... 6. k=0 7. while X[k]<a: # ... 8. k += 1 9. if k>=p: 10. P=Fonction1(X[k-p:k+ 1],Y[k-p:k+1]) # ... 11. else: 12. P=Fonction1(X[0:p+1] ,Y[0:p+1]) # ... 13. return P(a) # ...

(4)

Nom : ... Prénom : ...

ANNEXE

3

Algorithme 3 # ... # ... # ... 1. def Fonction3(p): # ... 2. X=srange(-1,1+2/p, 2/p) # ... 3. Lignes_A = [] 4. for i in range(p+1): # ... 5. Ligne_i = [] # ... 6. for j in range(p+1): # ... 7. Ligne_i.append(X[j]** i) # ... 8. Lignes_A.append(Lign e_i) # ... 9. A = matrix( Lignes_A) # ... # ... 10. Ligne_B=[] 11. for k in range(p+1): # ... 12. Ligne_B.append((1/2) *(1/(k+1))*(1-(-1)**(k+1))) # ... 13. B = vector( Ligne_B) # ... 14. Wp = A**(-1 )*B # ... 15. return Wp

(5)

Nom : ... Prénom : ...

ANNEXE

4

Algorithme 4.1 # ... # ... # ... 1. def Fonction41(f ,a,b,Wp): 2. p=len(Wp)-1 # ... 3. S=0 4. h=(b-a)/p # ... 5. for i in range(p+1): 6. xi=a+i*h # ... 7. S+=Wp[i]*f(xi) # ... 8. S=S*(b-a) 9. return S Algorithme 4.2 # ... # ... # ... 1. def Fonction42(f ,a,b,n,p): 2. Wp=Fontion3(p) # ... 3. h=(b-a)/n 4. X=srange(a,b+h,h) # ... 5. Ip=0 6. for k in range(n): 7. Ip += Foncti on41(f,X[k],X[k+1],Wp) # ... 8. return Ip

(6)

CORRECTION

Exercice 1 : 1. c.f. annexe 1 ci-dessous. 2. c.f. annexe 2 ci-dessous. ? ? ? ? ? ? ? ? ? ? ? Exercice 2 : 1. (a) — Pour i = 0, Z 1 −1 P0(x)dx = Z 1 −1 dx = 2 et 2(ω(2)0 .P0(−1) + ω (2) 1 .P0(0) + ω (2) 2 .P0(1)) = 2(ω (2) 0 + ω (2) 1 + ω (2) 2 ) D’où (E0) : ω (2) 0 + ω (2) 1 + ω (2) 2 = 1 — Pour i = 1, Z 1 −1 P1(x)dx = Z 1 −1 xdx = 0 et 2(ω(2)0 .P1(−1) + ω (2) 1 .P1(0) + ω (2) 2 .P1(1)) = 2(ω (2) 0 .(−1) + ω (2) 1 .0 + ω (2) 2 .1) D’où (E1) : −ω (2) 0 + ω (2) 2 = 0 — Pour i = 2, Z 1 −1 P2(x)dx = Z 1 −1 x2dx = 2 3 et 2(ω(2)0 .P2(−1) + ω (2) 1 .P2(0) + ω (2) 2 .P2(1)) = 2(ω (2) 0 .(−1) 2+ ω(2) 1 .0 2+ ω(2) 2 .1 2) D’où (E2) : ω (2) 0 + ω (2) 2 = 1 3 Les coefficients cherchés sont forment donc la solution du système

(S) :      ω(2)0 + ω1(2) + ω(2)2 = 1 −ω(2)0 + ω(2)2 = 0 ω(2)0 + ω(2)2 = 1 3 ⇔ AX = B avec A =   1 1 1 −1 0 1 1 0 1  , B =   1 0 1 3   et X =    ω(2)0 ω(2)1 ω(2)2   

(7)

(b) (S) ⇐⇒   1 1 1 1 −1 0 1 0 1 0 1 13   ⇐⇒ L1 ← L1 − L3 L2 ← L2 + L3       0 1 0 23 0 0 2 1 3 1 0 1 1 3       ⇐⇒      ω1(2) = 2 3 2ω(2)2 = 1 3 ω0(2) + ω(2)2 = 1 3 ⇐⇒      ω1(2) = 23 2ω(2)2 = 13 ω0(2) + ω(2)2 = 13 ⇐⇒      ω1(2) = 23 ω2(2) = 16 ω0(2) = 13−1 6 = 1 6

On retrouve ici les poids de la méthode de Simpson : ω(2)0 = ω2(2)= 1 6 et ω (2) 1 = 2 3 (c) Soit P (x) = ax2+ bx + c un polynôme de degré 2. On a

Z 1 −1 P (x) = Z 1 −1 (ax2+ bx + c)dx =a Z 1 −1 P2(x)dx + b Z 1 −1 P1(x)dx + c Z 1 −1 P0(x)dx =a.2ω(2)0 .P2(−1) + ω (2) 1 .P2(0) + ω (2) 2 .P2(1)  + b.2ω(2)0 .P1(−1) + ω (2) 1 .P1(0) + ω (2) 2 .P1(1)  + c.2ω(2)0 .P0(−1) + ω (2) 1 .P0(0) + ω (2) 2 .P0(1)  =2.ω0(2).(aP2(−1) + bP1(−1) + cP0(−1)) + ω1(2).(aP2(0) + bP1(0) + cP0(0)) + ω2(2).(aP2(1) + bP1(1) + cP0(1))  =2.ω0(2)P (−1) + ω(2)1 P (0) + ω2(2)P (1)

(d) En posant t = h2x + a +h2, on a dt = h2. De plus, pour t = a, on a x = −1 et pour t = a + h, on a x = 1. D’où Z a+h a P (t)dt = Z 1 −1 P h 2x + a + h 2   h 2dx  Or l’expression h2x + a +h

2 étant linéaire en x, le polynôme P h

2x + a + h

2 est un polynôme de degré

2 en x. D’après la question précédente, on a donc Z a+h a P (t)dt = h 2.2  ω0(2)P h 2(−1) + a + h 2  + ω1(2)P h 2.0 + a + h 2  + ω2(2)P h 2.1 + a + h 2  = h 2.2  ω0(2)P (a) + ω1(2)P  a +h 2  + ω2(2)P (a + h) 

(8)

2. c.f. annexe 3 ci-dessous.

3. Pour obtenir une valeur approchée de l’intégrale I = Z b

a

f (x)dx, on peut interpoler la fonction f par un polynôme ou une famille de polynômes coïncidant avec f en une famille de points équi-répartis sur l’intervalle [a, b]. L’intégrale de chacun de ces polynômes dépend alors des poids ωi(p)associés au degré p choisi ainsi que des valeurs des polynômes aux points d’interpolation. Or ces valeurs sont, par définitions, les valeurs de f . On peut donc intégrer les polynômes interpolateurs en se basant uniquement sur les valeurs de la fonction f .

4. c.f. annexe 4 ci-dessous.

? ? ?

(9)

ANNEXE

1

Algorithme 1 # La fonction Fonction1 renvoie l’unique polynôme P # interpolateur de degré p dont la courbe passe par # les p+1 points définis par les abscisses de la # liste X et les ordonnées de la liste Y. # On pourrait la renommer Interpolation( X,Y) 1. def Fonction1(X,Y ): 2. p=len(X)-1 # p contient le degré du polynôme 3. if p <> len(Y)-1: 4. return "Erreur : taille des listes" # la fonction s’arrête si les deux listes n’ont pas la même taille 5. P(x)=0 6. for i in range(p+1): # Pou r chaque i, on construi re le polynôme de Lagra nge Li (x ) 7. Li(x)=1 # associé à la liste des abscisses 8. for j in range(p+1): 9. if i<>j: 10. Li(x) = Li( x)*(x-X[j])/(X[i]-X[j]) P(x) = P(x) + Y[i]*Li(x) # On construit le polynôm e P(x) en tenant compte des ordonnées de la liste Y 11. return P

(10)

ANNEXE

2

Algorithme 2 # La fonction Fonction2 renvoie une valeur approchée de # f(a), calcu lée par interpolation par morceaux par des # polynômes d e degré p fixé par l’utilisateur. # La fonction f est ici connue s ous la forme d’un nuage # de point défini par les listes X et Y et # le polynôme interpolateur est calculé # à l’aide de la fonction Fonction1. # Cette fonct ion peut être nommée Va leur_interpolee(X,Y,a,p). 1. def Fonction2(X,Y ,a,p): 2. if p>len(X)-1: # Il faut au moins p+1 points pou r interpoler le nuage 3. return "Trop peu de points pour le degré demandé" # à l’aide de polyn ômes de degré p 4. if a<X[0] o r a>X[-1]: # L’abscisse a doit être dans l’intervalle de me sure 5. return a," n ’est pas dans l’itervalle de mesures" 6. k=0 7. while X[k]<a: # On cherc he ici le premier point de mesure X[k] 8. k += 1 # d ont l’abscisse est supérieu re à a 9. if k>=p: # Si cette abscisse e st au delà de la p-ième, 10. P=Fonction1(X[k-p:k+ 1],Y[k-p:k+1]) # o n prend les p points précédents et X[k] pour interpoler. 11. else: # Sinon, on prend les p+1 premiers point s. 12. P=Fonction1(X[0:p+1] ,Y[0:p+1]) 13. return P(a) # On renvoie la valeur du polynôme au point a

(11)

ANNEXE

3

Algorithme 3 # La fonction Fonction3 calcule les p+1 poids permettant # de calculer l’intégrale de n’importe quel polynôme de # degré p à l’aide de p+1 valeur régulièrement réparties # sur l’inter valle d’intégration. # Cette fonct ion peut être nommée Po ids_quadrature(X,Y,a,p). 1. def Fonction3(p): # On découp e l’intervalle [-1,1] en p intervalles de même longeur 2. X=srange(-1,1+2/p, 2/p) # On constr uit la matrice A du système # linéaire donnant les poids cherchés. 3. Lignes_A = [] 4. for i in range(p+1): # Chaque ligne est ass ociée à 5. Ligne_i = [] # une fonction puis sance différente. 6. for j in range(p+1): # et contie nt les puissances i-èmes 7. Ligne_i.append(X[j]** i) # des abscisses de la liste X 8. Lignes_A.append(Lign e_i) 9. A = matrix( Lignes_A) # On constr uit le vecteur B, secon d membre du # système l inéaire donnant les poids cherchés. 10. Ligne_B=[] 11. for k in range(p+1): # Les coefficients de B sont les 12. Ligne_B.append((1/2) *(1/(k+1))*(1-(-1)**(k+1))) # intégrales des fonctions puissances 13. B = vector( Ligne_B) # sur l’intervalle [-1,1]. 14. Wp = A**(-1 )*B # On renvo ie la liste des poids sous la forme d’un ve cteur. 15. return Wp

(12)

ANNEXE

4

Algorithme 4.1 # La fonctio n Fonction41 est la fonc tion Newton_Cotes vue en TD. Elle approche l’intég rale de f sur [a,b] a l’aide # d’un polyn ôme de degré p. ATTENTIO N : le degré p est donné calculé ici à partir de la liste des poids donnée en argume nt. 1. def Fonction41(f ,a,b,Wp): 2. p=len(Wp)-1 # Le degré du p olynôme est le nombre d e poids moins 1. 2. S=0 3. h=(b-a)/p # Définition du pas d’interpolation. 4. for i in range(p+1): 5. xi=a+i*h # On définit le point d’interpolation. 6. S+=Wp[i]*f(xi) # On ajoute sa contribution à l’intégra le totale. 7. S=S*(b-a) 8. return S Algorithme 4.2 # La fonctio n Fonction42 est la fonc tion Newton_Cotes_compose vue en TD. Elle approche l’intégrale de f sur [ a,b] a l’aide # d’une fami lle de polynômes de degr é p déterminés à l’aide de la fonction précéde nte. 1. def Fonction42(f ,a,b,n,p): 2. Wp=Fontion3(p) # Les poids sont calculés à partir de la fonct ion Fonction3 3. h=(b-a)/n 4. X=srange(a,b+h,h) # Découpage de l’intervalle [a,b] en n intervalles de même longueur h 5. Ip=0 6. for k in range(n): # La valeur approchée Ip es t obtenue par n approxi mations 7. Ip += Foncti on41(f,X[k],X[k+1],Wp) # calculées à l’aide de la fonct ion Fonction41. 8. return Ip

Références

Documents relatifs