Exercice 3
L’objectif de l’exercice est l’utilisation de la méthode des moindres carrés pour approximer un
polynôme à partir d’observations. La spécificité de cette méthode est de minimiser la somme
des distance entre un polynôme g approximant et n points expérimentaux.
Etant donné une observation de n points distincts, on cherche à approcher cette observation,
au sens des moindres carrés, par un polynôme de degré m égal à n-1, donnant une meilleure
approximation des valeurs . Ceci revient à minimiser la distance qui sépare un point
expérimental du point approximant .
Le polynôme donnant la meilleure approximation est celui qui minimise la somme S, des
écarts entre les et les , donnée par la formule suivante :
Afin d’identifier la distance moyenne minimale, on cherche l’ensemble des valeurs des
paramètres minimisant cette somme
Afin d’identifier la distance moyenne minimale, on cherche l’ensemble des valeurs
des paramètres minimisant cette somme.
Ce qui conduit à résoudre le système linéaire suivant :
En posant et , le système s’écrit alors :
Travail demandé :
Dans la suite, on suppose que les n points représentant une observation, sont stockés dans
une liste de tuples Lp, où chaque tuple représente les coordonnées d’un point.
Le travail demandé consiste à déterminer les coefficients du polynôme d’interpolation
Question 1 :
Ecrire une fonction python, nommée puiss, qui, pour un réel x et un entier p, crée et
retourne la liste
def puiss (x,p):
L=list()
for i in range(2*p+1):
L.append(x**i)
return L
Question 2 :
Ecrire une fonction Python, nommée list_puiss, qui à partir d’une liste de réels L et d’un
entier p, crée et retourne une liste de listes contenant, pour chaque réel r de L, une liste
def list_puiss (L,p):
R=list()
for r in L
R.append(puiss(r,p))
return R
Question 3 :
Ecrire une fonction python, nommée calcul_mat qui à partir de la liste de points Lp, crée et
retourne la matrice U
m égal à n-1
𝐿𝑝=[( 𝑥 1 , 𝑦 1 ) , ( 𝑥2 , 𝑦 2 ) , ( 𝑥 3 , 𝑦 3 ) , ( 𝑥 4 , 𝑦 4 ) ]
𝐿𝑝=[( 𝑥 1 , 𝑦 1 ) , ( 𝑥2 , 𝑦 2 ) , ( 𝑥 3 , 𝑦 3 ) , ( 𝑥 4 , 𝑦 4 ) ]
𝑈 [ 𝑖 , 𝑗 ] =𝑥
𝑖+ 𝑗 𝑖+ 𝑗 𝑖+ 𝑗 𝑖+ 𝑗
1 +𝑥 2 +𝑥 3 +𝑥 4 .
𝐿𝑝=[( 𝑥 1 , 𝑦 1 ) , ( 𝑥2 , 𝑦 2 ) , ( 𝑥 3 , 𝑦 3 ) , ( 𝑥 4 , 𝑦 4 ) ]
𝐿 𝑥=[𝑥 1 ,𝑥 2 ,𝑥 3 ,𝑥 4 ]
Þ
U[0,0] =Lpx[0][0]+Lpx[1][0]+Lpx[2][0]+Lpx[3][0] => sum([e[0] for e in Lpx])
U[1,3]=Lpx[0][4]+Lpx[1][4]+Lpx[2][4]+Lpx[3][4] => sum([e[4] for e in Lpx])
U[3,3]=Lpx[0][6]+Lpx[1][6]+Lpx[2][6]+Lpx[3][6] => sum([e[6] for e in Lpx])
def calcul_mat (Lp):
n=len(Lp)
m=n-1
U=np.zeros((n,n))
Lx=[t[0] for t in Lp]
Lpx=list_puiss(Lx,m)
for i in range(n):
for j in range(n)
U[i,j]=sum([e[i+j] for e in Lpx]
return U
Question 4 :
Ecrire une fonction Python, nommée calcul_vect, qui à partir de la liste
de points Lp, crée et retourne le vecteur v
𝑛
𝑣 𝑘= ∑ 𝑥 𝑦 𝑖𝑘
𝑖
𝑖=1
𝑛
𝑣 𝑘= ∑ 𝑥 𝑦 𝑖𝑘
𝑖
𝐿𝑝=[( 𝑥 1 , 𝑦 1 ) , ( 𝑥2 , 𝑦 2 ) , ( 𝑥 3 , 𝑦 3 ) , ( 𝑥 4 , 𝑦 4 ) ] 𝑛=4
𝑖=1
𝑣 0 =𝑣 [ 0 , 0 ] =𝑥 𝑦 1+ 𝑥 𝑦 2 + 𝑥 𝑦 3 + 𝑥 𝑦 4
0 0 0 0
1 2 3 4
𝑣 1=𝑣 [ 1 , 0 ] =𝑥 𝑦 1 + 𝑥 𝑦 2 + 𝑥 𝑦 3 + 𝑥 𝑦 4
1 1 1 1
1 2 3 4
𝑣 2=𝑣 [ 2 , 0 ] =𝑥 1 𝑦 1+ 𝑥 2 𝑦 2 + 𝑥 3 𝑦 3 + 𝑥 4 𝑦 4
2 2 2 2
𝑣 3 =𝑣 [ 3 , 0 ] =𝑥 𝑦 1 + 𝑥 𝑦 2 + 𝑥 𝑦 3 + 𝑥 𝑦 4
3 3 3 3
1 2 3 4
𝐿𝑝=[( 𝑥 1 , 𝑦 1 ) , ( 𝑥2 , 𝑦 2 ) , ( 𝑥 3 , 𝑦 3 ) , ( 𝑥 4 , 𝑦 4 ) ]
𝐿 𝑥=[𝑥 1 ,𝑥 2 ,𝑥 3 ,𝑥 4 ]
𝐿 𝑦=[ 𝑦 1 , 𝑦 2 , 𝑦 3 , 𝑦 4 ]
Þ
def calcul_vect (Lp):
n=len(Lp)
m=n-1
V=np.zeros((n,1))
Lx=[t[0] for t in Lp]
Ly=[t[1] for t in Lp]
Lpx=list_puiss(Lx,m)
for k in range(n):
for i in range(n):
V[k,0]+=Lpx[i][k]*Ly[i]
return V
S=
𝐴 𝑋 =𝐵
( )
A= 5
𝐵= − 3
4
import numpy as np
X=np.linalg.solve(A,B)
Question 5 :
Ecrire un script Python qui détermine les coefficients du polynôme
d’interpolation en faisant les importations adéquates.
import numpy as np
U=calcul_mat(Lp)
V=calcul_vect(Lp)
a=np.linalg.solve(U,V)