IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

Vous �tes nouveau sur Developpez.com ? Cr�ez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et �tre connect� pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Cr�ez-en un en quelques instants, c'est enti�rement gratuit !

Si vous disposez d�j� d'un compte et qu'il est bien activ�, connectez-vous � l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oubli� ?
Cr�er un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Math�matiques et Python - Les polyn�mes de Lagrange vus comme les vecteurs d'une base orthonorm�e
Un billet blog de Denis Hulo

Le , par User

0PARTAGES

I. Introduction

Apr�s les polyn�mes d'interpolation de Lagrange vus comme des vecteurs, on s'int�resse maintenant aux polyn�mes de Lagrange vus comme les vecteurs d'une base orthonorm�e.

On va d'abord montrer que la famille de polyn�mes de Lagrange (l0, l1, �, ln) forme une base orthonorm�e d'un espace vectoriel.

Ensuite, on va reprendre notre classe Polynome_lagrange cr�e pr�c�demment pour y ajouter des m�thodes afin notamment d'�valuer le produit scalaire et le coefficient de corr�lation portant sur ces vecteurs.

Enfin, on va tester ces nouvelles fonctions dans l'environnement Python.

II. Base orthonorm�e

D'apr�s Wikipedia, en g�om�trie vectorielle, une base orthonormale ou base orthonorm�e d'un espace euclidien ou hermitien est une base de cet espace vectoriel constitu�e de vecteurs de norme 1 et orthogonaux deux � deux. Dans une telle base, les coordonn�es d'un vecteur quelconque de l'espace sont �gales aux produits scalaires respectifs de ce vecteur par chacun des vecteurs de base, et le produit scalaire de deux vecteurs quelconques a une expression canonique en fonction de leurs coordonn�es.

II-A. Rep�re orthonorm�

Soit An un espace affine euclidien associ� � l'espace vectoriel euclidien En et O un point quelconque de An, alors un rep�re affine :

R = (O, e1, e2, ..., en)

est dit orthonormal (ou orthonorm�) si sa base associ�e B = (e1, e2, ..., en) est elle-m�me orthonormale.

II-B. Produit scalaire canonique

Dans un espace Rn, espace euclidien de dimension n, on appelle produit scalaire canonique de Rn l'application qui, aux vecteurs y = (y1, y2, �, yn) et z = (z1, z2, �, zn) de Rn associe la quantit� :



On sait aussi que si deux vecteurs sont orthogonaux leur produit scalaire est nul.

Le produit scalaire peut �tre utilis� pour d�terminer le travail d'une force lors d'un d�placement : le travail de la force F selon le trajet u est le produit scalaire de ces deux vecteurs. Si maintenant F et u sont orthogonaux, la force F n'est pas "efficace" sur le d�placement u et le produit scalaire correspondant au travail de la force F selon le trajet u est nul.

II-C. Norme

Dans un espace Rn, la norme d'un vecteur y = (y1, y2, �, yn) est donn�e par :



II-D. Coefficient de corr�lation

Les deux s�ries de valeurs Y(y1, �, yn) et Z(z1, �, zn) peuvent �tre consid�r�es comme des vecteurs dans un espace � n dimensions. Rempla�ons-les par des vecteurs centr�s : Y'(y1 − my, �, yn − my) et Z'(z1 − mz, �, zn − mz) o� my et mz repr�sentent respectivement les moyennes des y et des z.

Le produit scalaire entre ces vecteurs est donn� par la formule suivante (produit scalaire norm�) :

Y'∙Z' = ‖Y'‖∙‖Z'‖∙cos(α) = cov(Y, Z) o� cov(Y, Z) repr�sente la covariance de Y et Z.

Le cosinus de l'angle α entre ces vecteurs est alors tel que :

cos(α) = Y'∙Z' / (‖Y'‖∙‖Z'‖) = cov(Y, Z) / (‖Y'‖∙‖Z'‖)

Il s'agit du coefficient de corr�lation compris entre -1 et +1 qui donne une indication sur le degr� de corr�lation lin�aire entre deux variables.

Si le coefficient est proche de -1 ou +1 les variables sont tr�s fortement corr�l�es, s'il est proche de 0 elles sont tr�s peu li�es.

Bien s�r, du point de vue g�om�trique, on ne parle pas de � corr�lation lin�aire � : le coefficient de corr�lation a toujours un sens, quelle que soit sa valeur entre �1 et 1. Il nous renseigne de fa�on pr�cise, non pas tant sur le degr� de d�pendance entre les variables, que sur leur distance angulaire dans un espace � n dimensions : si le coefficient vaut -1 ou +1 les deux vecteurs sont colin�aires et s'il est �gal � 0 les vecteurs sont orthogonaux.

III. Polyn�mes d'interpolation de Lagrange

Soit n + 1 points (x0, y0), �, (xn, yn) (avec les xi des r�els distincts deux � deux).

Le polyn�me d'interpolation de Lagrange de degr� au plus n qui passe par ces points est d�fini par :



III-A. Espace des polyn�mes

L �tant une combinaison lin�aire de polyn�mes de degr� n, il est de degr� au plus n et appartient donc � l'ensemble n[X].

�tant donn� n + 1 r�els distincts x0, �, xn, l'ensemble des polyn�mes que l'on peut construire avec la famille de polyn�mes (l0, l1, �, ln) constitue un espace vectoriel muni de deux lois :

  • une loi de composition interne � + �, appel�e addition ou somme vectorielle ;
  • une loi de composition externe � gauche � � �, appel�e multiplication par un scalaire.


III-B. Base des polyn�mes

On se donne � nouveau n + 1 r�els distincts x0, �, xn. Pour tout polyn�me P appartenant � un espace n[X] des polyn�mes, si on pose yi = P(xi), P �tant le polyn�me d'interpolation correspondant aux points, il est �gal au polyn�me L d�fini pr�c�demment.

On a alors :



Et donc (l0, l1, �, ln) forme une famille g�n�ratrice de n[X] et son cardinal (�gal � n + 1) est �gal � la dimension de l'espace.

Par exemple, en choisissant P = 1 ou P = X, on obtient :



On peut remarquer �galement que le polyn�me nul P = 0 est tel que :



Cela implique n�cessairement que :



On en d�duit que cette famille g�n�ratrice (l0, l1, �, ln) est �galement libre, et par cons�quent c'est une base de l'espace des polyn�mes qu'elle engendre.

De plus, les polyn�mes de Lagrange not�s lj(x) et d�finis pr�c�demment sont tels que :



Si maintenant on se donne 3 r�els distincts x0, x1 et x2, dans l'espace 2[X] engendr� par la famille (l0, l1, l2), on obtient :



Par cons�quent, cette famille forme une base dont les vecteurs de norme 1 sont orthogonaux deux � deux (leur produit scalaire est nul), et elle constitue donc une base orthonorm�e de 2[X]. Plus g�n�ralement, la famille g�n�ratrice (l0, l1, �, ln) forme une base orthonorm�e de n[X].

Si vous souhaitez avoir plus d'information sur le sujet je vous invite � consulter la page Wikipedia Interpolation lagrangienne.

III-C. Produit scalaire

Consid�rons maintenant le produit scalaire des polyn�mes P et Q appartenant au m�me espace Rn de dimension n+1 et d�fini par :



III-D. Norme

Dans un espace de dimension n+1, la norme du polyn�me P est donn�e par :



III-E. Coefficient de corr�lation

Les deux s�ries de valeurs Y(y0, �, yn) et Z(z0, �, zn) peuvent �tre consid�r�es comme des vecteurs dans un espace � n+1 dimensions. Rempla�ons-les par des vecteurs centr�s : Y'(y0 − my, �, yn − my) et Z'(z0 − mz, �, zn − mz).

Le produit scalaire entre ces vecteurs est donn� par la formule suivante (produit scalaire norm�) :

Y'∙Z' = ‖Y'‖∙‖Z'‖∙cos(α) = cov(Y, Z)

Il vient donc :

cos(α) = Y'∙Z' / (‖Y'‖∙‖Z'‖) = cov(Y, Z) / (‖Y'‖∙‖Z'‖)

Il s'agit � nouveau du coefficient de corr�lation compris entre -1 et +1 qui donne une indication sur le degr� de corr�lation lin�aire entre Y et Z, ou du point de vue g�om�trique, sur l'�cart angulaire entre ces deux vecteurs.

IV. Impl�mentation en Python

Comme on a pu le montrer dans un pr�c�dent billet, ces polyn�mes d'interpolation peuvent donc �tre vus comme des vecteurs sur lesquels on peut r�aliser les op�rations d'addition et de multiplication par un scalaire.

Ils peuvent �tre d�finis en Python � l'aide d'une classe permettant ensuite de cr�er ces objets math�matiques et de r�aliser des op�rations entre eux. On va d'ailleurs ajouter aux op�rations d'addition et de multiplication par un scalaire, des m�thodes permettant d'�valuer la norme d'un vecteur, mais aussi le produit scalaire et le coefficient de corr�lation entre deux vecteurs :



IV-A. Produit scalaire

Pour r�aliser le produit scalaire entre 2 polyn�mes appartenant au m�me espace, nous devons ajouter une m�thode __matmul__() � notre classe qui va permettre de surcharger l'op�rateur@ � :

Code Python : S�lectionner tout
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
import numpy as np 
  
class Polynome_lagrange: 
    ...  
    def __matmul__(self, other): 
        # méthode permettant de réaliser le produit scalaire entre les polynômes self et other 
        # (y0, ..., yn)⋅(z0, ..., zn)  = y0⋅z0 + ... + yn⋅zn 
  
        # si other est un objet de la classe Polynome_lagrange 
        if isinstance(other, Polynome_lagrange): 
  
            # si les 2 vecteurs self et other sont définis dans la même base (l0, l1, ..., ln) 
            if self.x==other.x: 
  
                # calcul du produit scalaire des vecteurs self.y et other.y 
                ps = self.y @ other.y 
  
                # renvoie la valeur du produit scalaire 
                return ps 
  
            else: # sinon 
  
                print("Les deux vecteurs ne sont pas définis dans la même base !") 
  
        else: # sinon 
  
            print("Le produit scalaire doit porter sur deux objets de la classe Polynome_lagrange !")

Python dispose depuis sa version 3.5 d'un op�rateur @ permettant d'�valuer le produit scalaire de deux vecteurs numpy.

Pour tester notre op�rateur � @ � portant sur 2 objets de la classe Polynome_lagrange, nous ajoutons ces lignes de code :

Code Python : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# création du 1er objet de la classe Polynome_lagrange 
p1 = Polynome_lagrange(x=[0, 1, 2], y=[1, 2, 1]) 
  
# création du 2e objet de la classe Polynome_lagrange 
p2 = Polynome_lagrange(x=[0, 1, 2], y=[-1, 1, -1]) 
  
# affiche les expressions des polynômes p1 et p2 
print("p1 =", p1) 
print("p2 =", p2) 
  
print() 
  
# affiche l'appartenance de p1 et p2 à leur espace vectoriel : R2[X], Base = [L0, L1, L2], x = [0, 1, 2] 
print("p1 ∈ " + p1.espace() + ", Base = " + p1.base()) 
print("p2 ∈ " + p2.espace() + ", Base = " + p2.base()) 
  
print() 
  
# calcul du produit scalaire de p1 et p2 
ps = (p1 @ p2) 
  
# affiche la valeur du produit scalaire de p1 et p2 
print("p1⋅p2 = {0}".format(ps))

Le code affiche :

p1 = 1∙L0(X) + 2∙L1(X) + 1∙L2(X)
p2 = -1∙L0(X) + 1∙L1(X) + -1∙L2(X)

p1 ∈ ℝ2[X], Base = (L0, L1, L2), x = [0, 1, 2]
p2 ∈ ℝ2[X], Base = (L0, L1, L2), x = [0, 1, 2]

p1⋅p2 = 0


IV-B. Norme

Le calcul de la norme d'un polyn�me d'interpolation de Lagrange d�fini dans une base (l0, l1, ..., ln) se fait gr�ce � cette nouvelle m�thode :

Code Python : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np 
  
class Polynome_lagrange: 
    ...  
    def norme(self): 
        # méthode permettant d'évaluer la norme du vecteur self défini dans la base (l0, l1, ..., ln) 
        # norme((y0, ..., yn)) = (y0*y0 + ... + yn*yn)^0.5 
  
        # calcul de la norme du vecteur self.y 
        n = np.linalg.norm(self.y) 
  
        # renvoie la valeur de la norme du vecteur 
        return n

La fonction norm du sous-module numpy.linalg permet de calculer la norme d'un vecteur selon la formule d�finie pr�c�demment.

Pour tester notre m�thode portant sur un objet de la classe Polynome_lagrange, nous ajoutons ces lignes de code :

Code Python : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# création de l'objet de la classe Polynome_lagrange 
p = Polynome_lagrange(x=[0, 1, 2], y=[1, 1, 1]) 
  
# affiche l'expression du polynôme p 
print("p =", p) 
  
print() 
  
# affiche l'appartenance de p à leur espace vectoriel : R2[X], Base = [L0, L1, L2], x = [0, 1, 2] 
print("p ∈ " + p.espace() + ", Base = " + p.base()) 
  
print() 
  
# calcul la norme de p 
n = p.norme() 
  
# affiche la valeur de la norme de p 
print("norme(p) = {0}".format(n))

L'ex�cution du code affiche :

p = 1∙L0(X) + 1∙L1(X) + 1∙L2(X)

p ∈ ℝ2[X], Base = (L0, L1, L2), x = [0, 1, 2]

norme(p) = 1.7320508075688772


IV-C. Coefficient de corr�lation

Le calcul du coefficient de corr�lation entre deux vecteurs appartenant au m�me espace vectoriel s'effectue avec cette m�thode :

Code Python : S�lectionner tout
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
import numpy as np 
  
class Polynome_lagrange: 
    ...  
    def coef_corr(self, other): 
        # méthode permettant d'évaluer le coefficient de corrélation entre self et other 
  
        # si other est un objet de la classe Polynome_lagrange 
        if isinstance(other, Polynome_lagrange): 
  
            # si les 2 vecteurs self et other sont définis dans la même base (l0, l1, ..., ln) 
            if self.x==other.x: 
  
                # calcul du coefficient de corrélation entre self.y et other.y 
                r = round(np.corrcoef(self.y, other.y)[0, 1], 12) 
  
                # renvoi du coefficient de corrélation 
                return r 
  
            else: # sinon 
  
                print("Les deux vecteurs ne sont pas définis dans la même base !") 
  
        else: # sinon 
  
            print("Le coefficient de corrélation doit porter sur deux objets de la classe Polynome_lagrange !")

La fonction corrcoef du module numpy permet de calculer le coefficient de corr�lation de deux vecteurs suivant la formule pr�sent�e plus haut. Ce coefficient donne notamment une indication sur l'�cart angulaire entre les deux vecteurs.

Testons maintenant notre m�thode :

Code Python : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# création du 1er objet de la classe Polynome_lagrange 
p1 = Polynome_lagrange(x=[0, 1, 2], y=[1, 2, 5]) 
  
# création du 2e objet de la classe Polynome_lagrange 
p2 = Polynome_lagrange(x=[0, 1, 2], y=[1, 3, 9]) 
  
# affiche les expressions des polynômes p1 et p2 
print("p1 =", p1) 
print("p2 =", p2) 
  
print() 
  
# affiche l'appartenance de p1 et p2 à leur espace vectoriel : R2[X], Base = (L0, L1, L2), x = [0, 1, 2] 
print("p1 ∈ " + p1.espace() + ", Base = " + p1.base()) 
print("p2 ∈ " + p2.espace() + ", Base = " + p2.base()) 
  
print() 
  
# calcul du coefficient de corrélation entre p1 et p2 
r = p1.coef_corr(p2) 
  
# affiche la valeur du coefficient de corrélation 
print("coef_corr(p1,⋅p2) = {0}".format(r))

L'ex�cution du code affiche :

p1 = 1∙L0(X) + 2∙L1(X) + 5∙L2(X)
p2 = 1∙L0(X) + 3∙L1(X) + 9∙L2(X)

p1 ∈ ℝ2[X], Base = (L0, L1, L2), x = [0, 1, 2]
p2 ∈ ℝ2[X], Base = (L0, L1, L2), x = [0, 1, 2]

coef_corr(p1,⋅p2) = 1.0


Dans ce test le polyn�me p1 correspond en fait � la fonction polynomiale y(x) = 1 + x2 d�finie sur l'intervalle [0, 2] et p2 � la fonction z(x) = 1 + 2x2 d�finie sur ce m�me intervalle. Le r�sultat donne donc un coefficient de corr�lation entre Y et Z �gal � 1 indiquant que ces deux variables sont lin�airement corr�l�es. En effet, � partir des fonctions polynomiales on peut facilement obtenir la relation lin�aire Z = 2Y - 1.

Du point de vue g�om�trique, ce coefficient �gal � 1 indique que les deux vecteurs sont colin�aires.

IV-D. Module

On pr�sente pour finir le module complet pour effectuer les diff�rents tests :

Code Python : S�lectionner tout
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
import numpy as np 
  
class Polynome_lagrange(): 
  
    def __init__(self, x, y): 
        # méthode constructeur de la classe 
  
        # si les deux listes ont la  même taille 
        if len(x)==len(y): 
  
            # on définit la liste de valeurs en x permettant d'obtenir la famille de polynômes (l0, l1, ..., ln) représentant une base dans ℝn[X] 
            self.x = x 
  
            # on définit le tableau de valeurs en y représentant les coordonnées du vecteur (tableau numpy) 
            self.y = np.array(y) 
  
        else: # sinon 
  
            print("Les deux listes de valeurs x et y doivent avoir la même dimension !") 
  
  
    def __str__(self): 
        # permet d'afficher le polynôme sous la forme y0*L0(X) + ... + yn*Ln(X) 
  
        Lx = '' 
        # parcours des y 
        for j in range(len(self.y)): 
            Lx +=  str(self.y[j]) + "∙L" + str(j) + "(X)" + " + " 
  
        return Lx[:-3]     
  
    def espace(self): 
        # retourne l'espace vectoriel du polynôme self : R2[X] 
  
        n = len(self.x)-1 
  
        # retourne l'espace vectoriel du polynôme d'interpolation de Lagrange 
        return "ℝ{0}[X]".format(n) 
  
  
    def base(self): 
        # retourne la base de polynômes de self : (L0, L1, L2), x = [0, 1, 2] 
  
        n = len(self.x)-1 
        base = ""  
  
        # parcours des indices des polynômes de lagrange Li 
        for i in range(n+1): 
            base += "L" + str(i) + ", " 
  
        # création de la famille : (L0, L1, L2) 
        base = "(" + base[:-2] + ")" 
  
        # retourne la base du polynôme d'interpolation de Lagrange 
        return "{0}, x = {1}".format(base, self.x) 
  
  
  
    def __add__(self, other): 
        # méthode permettant de redéfinir l'opérateur « + » pour 2 polynômes d'interpolation de Lagrange ou 2 vecteurs : 
        # (y0, ..., yn) + (z0, ..., zn) = (y0 + z0, ..., yn + zn) 
  
        # si other est un objet de la classe Polynome_lagrange 
        if isinstance(other, Polynome_lagrange): 
  
            # si les 2 vecteurs self et other sont définis dans la même base (l0, l1, ..., ln) 
            if self.x==other.x: 
  
                # addition des 2 vecteurs self.y et other.y (2 tableaux numpy) 
                y = self.y + other.y 
  
                # renvoie le polynômes résultat de l'addition des 2 polynômes self et other 
                return Polynome_lagrange(self.x, y) 
  
            else: # sinon 
  
                print("Les deux vecteurs ne sont pas définis dans la même base !") 
  
        else: # sinon 
  
            print("Le produit scalaire doit porter sur deux objets de la classe Polynome_lagrange !") 
  
  
    def __mul__(self, s): 
        # méthode permettant de multiplier other par un scalaire s. 
        # s*(y0, ..., yn) = (s*y0, ..., s*yn) 
  
        # multiplication du vecteur self.y par le scalaire s 
        y = s*self.y 
  
        # renvoie le polynôme d'interpolation de Lagrange résultat de la multiplication de self par le scalaire s 
        return Polynome_lagrange(self.x, y)  
  
  
    def __matmul__(self, other): 
        # méthode permettant de réaliser le produit scalaire entre les polynômes self et other 
        # (y0, ..., yn)⋅(z0, ..., zn)  = y0⋅z0 + ... + yn⋅zn 
  
        # si other est un objet de la classe Polynome_lagrange 
        if isinstance(other, Polynome_lagrange): 
  
            # si les 2 vecteurs self et other sont définis dans la même base (l0, l1, ..., ln) 
            if self.x==other.x: 
  
                # calcul du produit scalaire des vecteurs self.y et other.y 
                ps = self.y @ other.y 
  
                # renvoie la valeur du produit scalaire 
                return ps 
  
            else: # sinon 
  
                print("Les deux vecteurs ne sont pas définis dans la même base !") 
  
        else: # sinon 
  
            print("Le produit scalaire doit porter sur deux objets de la classe Polynome_lagrange !") 
  
  
    def norme(self): 
        # méthode permettant d'évaluer la norme du vecteur self défini dans la base (l0, l1, ..., ln) 
        # norme((y0, ..., yn)) = (y0*y0 + ... + yn*yn)^0.5 
  
        # calcul de la norme du vecteur self.y 
        n = np.linalg.norm(self.y) 
  
        # renvoie la valeur de la norme du vecteur 
        return n 
  
  
    def coef_corr(self, other): 
        # méthode permettant d'évaluer le coefficient de corrélation entre self et other 
  
        # si other est un objet de la classe Polynome_lagrange 
        if isinstance(other, Polynome_lagrange): 
  
            # si les 2 vecteurs self et other sont définis dans la même base (l0, l1, ..., ln) 
            if self.x==other.x: 
  
                # calcul du coefficient de corrélation entre self.y et other.y 
                r = round(np.corrcoef(self.y, other.y)[0, 1], 12) 
  
                # renvoi du coefficient de corrélation 
                return r 
  
            else: # sinon 
  
                print("Les deux vecteurs ne sont pas définis dans la même base !") 
  
        else: # sinon 
  
            print("Le coefficient de corrélation doit porter sur deux objets de la classe Polynome_lagrange !") 
  
  
    def __eq__(self, other): 
        # méthode permettant de redéfinir l'opérateur « == » pour 2 polynômes d'interpolation de Lagrange 
  
        # renvoie True si les bases et les listes de coordonnées des vecteurs sont identiques 
        return (self.x==other.x) and np.array_equal(self.y,other.y) 
  
  
    def __call__(self, X): 
        # permet d'évaluer le polynôme d'interpolation de Lagrange en fonction de X et des valeurs de x et y 
  
        # initialisation de la variable Lx 
        Lx = 0 
  
        # parcours des y 
        for j in range(len(self.y)): 
            lj = 1 
            # parcours des x 
            for i in range(len(self.x)): 
                if i!=j: 
                    lj *= (X - self.x[i])/(self.x[j] - self.x[i]) 
            # ajour de la valeur de lj*y[j] à Lx 
            Lx +=self.y[j]*lj 
  
        # renvoie la valeur de Lx 
        return Lx 
  
  
# fonction lambda permettant de changer le type d'appel pour évaluer le coefficient de corrélation 
# r = p1.coef_corr(p2) -> r = coef_corr(p1, p2) 
coef_corr = lambda p1,p2 : p1.coef_corr(p2) 
  
print("IV-A. Évaluation du produit scalaire de deux polynômes\n") 
  
# création du 1er objet de la classe Polynome_lagrange 
p1 = Polynome_lagrange(x=[0, 1, 2], y=[1, 2, 1]) 
  
# création du 2e objet de la classe Polynome_lagrange 
p2 = Polynome_lagrange(x=[0, 1, 2], y=[-1, 1, -1]) 
  
# affiche les expressions des polynômes p1 et p2 
print("p1 =", p1) 
print("p2 =", p2) 
  
print() 
  
# affiche l'appartenance de p1 et p2 à leur espace vectoriel : R2[X], Base = (L0, L1, L2), x = [0, 1, 2] 
print("p1 ∈ " + p1.espace() + ", Base = " + p1.base()) 
print("p2 ∈ " + p2.espace() + ", Base = " + p2.base()) 
  
print() 
  
# calcul du produit scalaire de p1 et p2 
ps = (p1 @ p2) 
  
# affiche la valeur du produit scalaire de p1 et p2 
print("p1⋅p2 = {0}".format(ps)) 
  
print();print() 
  
  
print("IV-B. Évaluation de la norme d'un polynôme\n") 
  
# création de l'objet de la classe Polynome_lagrange 
p = Polynome_lagrange(x=[0, 1, 2], y=[1, 1, 1]) 
  
# affiche l'expression du polynôme p 
print("p =", p) 
  
print() 
  
# affiche l'appartenance de p à leur espace vectoriel : R2[X], Base = (L0, L1, L2), x = [0, 1, 2] 
print("p ∈ " + p.espace() + ", Base = " + p.base()) 
  
print() 
  
# calcul la norme de p 
n = p.norme() 
  
# affiche la valeur de la norme de p 
print("norme(p) = {0}".format(n)) 
  
print();print() 
  
  
print("IV-C. Évaluation du coefficient de corrélation entre deux vecteurs\n") 
  
# création du 1er objet de la classe Polynome_lagrange 
p1 = Polynome_lagrange(x=[0, 1, 2], y=[1, 2, 5]) 
  
# création du 2e objet de la classe Polynome_lagrange 
p2 = Polynome_lagrange(x=[0, 1, 2], y=[1, 3, 9]) 
  
# affiche les expressions des polynômes p1 et p2 
print("p1 =", p1) 
print("p2 =", p2) 
  
print() 
  
# affiche l'appartenance de p1 et p2 à leur espace vectoriel : R2[X], Base = (L0, L1, L2), x = [0, 1, 2] 
print("p1 ∈ " + p1.espace() + ", Base = " + p1.base()) 
print("p2 ∈ " + p2.espace() + ", Base = " + p2.base()) 
  
print() 
  
# calcul du coefficient de corrélation entre p1 et p2 
#r = p1.coef_corr(p2) 
r = coef_corr(p1, p2) 
  
# affiche la valeur du coefficient de corrélation 
print("coef_corr(p1,⋅p2) = {0}".format(r))


V. Conclusion

Apr�s avoir montr� que la famille des polyn�mes de Lagrange (l0, l1, �, ln) constitue une base orthonorm�e de l'espace des polyn�mes n[X], on a pu expliquer comment �valuer le produit scalaire et le coefficient de corr�lation entre ces vecteurs.

Ensuite, on a pu �galement ajouter ces nouvelles op�rations � notre classe Polynome_Lagrange pour enfin les tester dans l'environnement Python.

Sources :

https://fr.wikipedia.org/wiki/Base_orthonorm%C3%A9e
https://fr.wikipedia.org/wiki/Base_canonique
https://fr.wikipedia.org/wiki/Produit_scalaire
https://fr.wikipedia.org/wiki/Produi...aire_canonique
https://fr.wikipedia.org/wiki/Corr%C...(statistiques)
https://fr.wikipedia.org/wiki/Covariance
https://fr.wikipedia.org/wiki/Interp...n_lagrangienne
https://docs.python.org/fr/3/library/operator.html
Vous avez lu gratuitement 0 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.

Une erreur dans cette actualit� ? Signalez-nous-la !