li(x) - LAMFA

Transcription

li(x) - LAMFA
INTERPOLATION
MARK ASCH
1.
Introduction
L'approximation d'une fonction donnée par une autre, plus simple, est un outil très ecace
et répandu dans les mathématiques appliquées.
La fonction f sera approchée par un polynôme pn
Applications :
visualisation de résultats de calculs : pour des valeurs données d'une fonction f aux
points xi nous voulons tracer cette fonction sur l'intervalle [a, b] : f (x) ≈ pn (x), ∀x ∈
[a, b].
´b
´b
intégration numérique : an de calculer l'intégrale d'un fonction f : a f (x)dx ≈ a pn (x)
résolution numérique des équation diérentielles : dans les méthodes spectrales, la solution d'une équation est approchée par un polynôme ; dans la méthode d'éléments nis,
la solution est approchée par une fonction polynomiale par morceaux
L'approximation de f par pn ∈ Pn peut être considérée comme :
interpolation : le polynôme pn et la fonction f coïncident aux n + 1 points x0 , ..., xn ces points peuvent être donnés, ou inconnus
meilleure approximation : le polynôme pn est l'élément de Pn qui est le plus proche
de f par rapport à une norme donnée ; kf − pn k = inf q∈Pn kf − qk ; pour la normeL2 on parlera de l'approximation de moindres carrés ; pour la norme-L∞ on parlera
d'approximation uniforme (ou Chebyshev)
2.
Interpolation polynomiale
f : [a, b] → R est une fonction continue ; {xi }ki=0 est un ensemble de k + 1 points distincts
dans l'intervalle [a, b] ; {αi }ki=0 est un ensemble de k + 1 valeurs entières qui indique la dérivée
de f d'ordre le plus élevée au point xi
Problème : Trouver un polynôme pn qui coïncide avec f et, peut être, avec ses dérivées aux
points xi
2.1. Interpolation de Lagrange.
le cas où seule la fonction est interpolée, sans aucune dérivée : αi = 0 et k = n.
Théorème 2.1.
Pour
(n+1) points distincts donnés, x0 , ..., xn , et une fonction continue f
pn ∈ Pn tel que pour tout i = 0, ..., n,
donnée,
il existe un seul polynôme
(2.1)
pn (xi ) = f (xi ).
Ce polynôme pn est appelé le polynôme d'interpolation de Lagrange de f par rapport aux
points xi , dénoté par In (f ; x0 , ..., xn ) = In f
les polynômes caractéristiques de Lagrange associés aux points xi vérient
li ∈ Pn
et li (xj ) = δi,j
pour j = 0, ..., n
les polynômes de Lagrange forment une base de Pn :
li (x) =
n
Y
j=0, j6=i
x − xj
xi − xj
Préparation à l'Agrégation de Mathématiques, UPJV - 2009.
1
INTERPOLATION
on écrit alors
In f (x) =
n
X
2
f (xi )li (x)
i=0
Exemple 2.2. Prenons les données suivantes :
x = 0 :3 ; y = [-5 -6 -1 16] ;
La commande
disp([x ; y])
ache
0
1 2 3
-5 -6 -1 16
et le polynôme de Lagrange est alors de la forme,
p3 (x)
=
3
X
yi li (x)
i=0
=
x(x − 2)(x − 3)
(x − 1)(x − 2)(x − 3)
+ (−6)
(−1)(−2)(−3)
2
x(x − 1)(x − 3)
x(x − 21)(x − 2)
+ (−1)
+ (16)
−2
6
(−5)
(1) Montrer que les conditions d'interpolation (2.1) sont équivalent à un système linéaire
Aa = b.
(2) Résoudre le système est montrer que le polynôme est x3 − 2x − 5.
Solution :
(1) b = (f (x0 ), ..., f (xn ))T et

1
 1

A= .
 ..
1
x0
x1
···
···
xn
···
..
.
..
.

xn0
xn1 



n
xn
2. x=0 :3 ; y=[-5 -6 -1 16] ;
disp([x ; y])
% matrice de Vandermonde
V = vander(x)
% coefficients du polynome d'interpolation
c = V\y'
Exercice 2.3. Ecrire une fonction polyinterp qui évalue un polynôme d'interpolation dans
la forme de Lagrange pour un vecteur de points donnés. Utiliser cette fonction an de tracer
l'interpolant des points (x, y) dessus pour un vecteur de points denses entre −0.25 et 3.25. Essayer
également avec : x = 1 :6 ; y = [16 18 21 17 15 12] ; u = .75 :.05 :6.25. Commenter les
deux courbes.
x=0 :3 ; y=[-5 -6 -1 16] ;
disp([x ; y])
u = -.25 :.01 :3.25 ;
v = polyinterp(x,y,u) ;
plot(x,y,'o',u,v,'-')
figure
x = 1 :6 ;
y = [16 18 21 17 15 12] ;
disp([x ; y])
INTERPOLATION
3
u = .75 :.05 :6.25 ;
v = polyinterp(x,y,u) ;
plot(x,y,'o',u,v,'r-') ;
% polyinterp.m
function v = polyinterp(x,y,u)
n = length(x) ;
v = zeros(size(u)) ;
for k = 1 :n
w = ones(size(u)) ;
for j = [1 :k-1 k+1 :n]
w = (u-x(j))./(x(k)-x(j)).*w ;
end
v = v + w*y(k) ;
end
question : quelle est la base de Pn qui convient le mieux pour le calcul de In f ? comparons
trois :
(1) la base canonique : 1, x, ..., xn
(2) la base de polynômes de Lagrange
(3) la base donnée par les polynômes 1, (x − x0 ), ..., (x − x0 )(x − x1 ) · · · (x − xn−1 )
Exercice 2.4. Calcul dans la base canonique. Soient {ak }nk=0 les coecients de In f dans la base
canonique,
In f =
n
X
ak xk ,
k=0
où a = (a0 , ..., an )T ∈ Rn+1 .
(1) Pour n = 10, 20 dénir un vecteur x de n + 1 points aléatoires entre 0 et 1. Écrire un
programme qui calcul la matrice A.
(2) Pour f (x) = sin(10x cos x) calculer les coecients de In f en résolvant le système linéaire
Aa = b. Tracer, dans la même gure, In f et f évaluée aux points xi . Utiliser la fonction
polyval.
(3) Calculer, pour n = 10, 20, kAa − bk2 et le conditionnement de la matrice A, ainsi que son
rang. Commenter.
Solution :
(1) n=10 ; x=sort(rand(n+1,1)) ;
A=ones(length(x),1) ;
for k=1 :lenght(x)-1
A = [A x.^k] ;
end
(2) cf = A\test1(x) ;
cf = cf(end :-1 ;1) ;
y = polyval(cf,x) ;
xx = linspace(0,1,100) ;
yy = polyval(cf,xx) ;
plot(xx,test1(xx),xx,yy,x,y,'r+') ;
test1 = inline('sin(10.*x.*cos(x))') ;
(3) cf=cf(end :-1 :1) ;%reordering of the coefficients
b = test1(x) ;
fprintf('norm(A*cf-b)=%f\n', norm(A*cf-b)) ;
fprintf('cond(A) =%f\n',cond(A))
INTERPOLATION
4
fprintf('rank(A) =%d\n',rank(A) )
Commentaires : la matrice A est de type Vandermonde - elle est inversible si les points
sont distincts, mais elle a un mauvais conditionnement et le rang numérique est moins que
le rang théorique de n + 1.
Exercice 2.5. Calcul dans la base de Lagrange. Pour n ∈ {5, 10, 20} dénir les points xi = i/10
pour i = 0, ..., n. Écrire un programme qui prend n et k en entrée et qui calcul les coecients de
lk . Utiliser la fonction polyfit. Évaluer ln/2 (x0 ). Commenter.
Solution :
n=input(' n = ') ;
x=(0 :n)'/n ; i=round(n/2) ;
y=zeros(size(x)) ;
y(i)=1 ;
cf=polyfit(x,y,n) ; % utilise Vandermonde...
fprintf('l_[n/2](0)=%f\n',polyval(cf,0)) ;
la troisième base est liée aux diérences divisées : la diérence divisée d'ordre k de la fonction
f par rapport aux k + 1 points distincts x0 , ..., xk est le nombre réel, f [x0 , ..., xk ], déni pour
k = 0 par f [xi ] = f (xi ) et pour k ≥ 1 par,
f [x1 , ..., xk ] − f [x0 , ..., xk−1 ]
xk − x0
f [x0 , ..., xk ] =
son évaluation est faite par l'algorithme récurrente de Newton décrit par l'arbre suivant :
f [x0 ] = f (x0 )
&
%
f [x0 , x1 ] =
f (x1 )−f (x0 )
x1 −x0
&
f [x1 ] = f (x1 )
f [x0, x1 , x2 ] =
&
%
f [x1 ,x2 ]−f [x0 ,x1 ]
x2 −x0
..
.
..
..
f [x2 ] = f (x2 )
.
.
..
..
..
.
.
.
nous pouvons démontrer que les diérences divisées sont les coecients de In f dans la base
3
%
f [x1 , x2 ] =
f (x2 )−f (x1 )
x2 −x1
Proposition 2.6.
In f (x) = f [x0 ] +
n
X
f [x0 , ..., xk ] (x − x0 ) · · · (x − xk−1 ).
k=1
La forme de Horner : an d'évaluer In f à un point x,
In f (x) = c0 + (x − x0 ) {c1 + (x − x1 ) {c2 + c3 (x − x2 ) + · · · }}
où ci = f [x0 , ..., xi ]
l'algorithme de Horner :
y = cn
for k = n − 1 & 0
y = (x − xk )y + ck
end
INTERPOLATION
5
Exercice 2.7. Diérences divisées.
(1) Écrire un programme qui calcul les diérences divisées d'ordre n d'une fonction f. Commencer avec un vecteur c qui contient les (n+1) valeurs f [xi ] = f (xi ). D'abord, c0 = f [x0 ]
est inchangé et toutes les autres valeurs ck , k ≥ 1 sont remplacées par des diérences divisées d'ordre 1. Puis, c1 = f [x0 , x1 ] est inchangé et toutes les autres valeurs ck , k ≥ 2 sont
remplacées, ... Voici l'algorithme :
for k = 0 % n;
ck ← f (xk );
end ;
for p = 1 % n;
for k = n & p
ck ← (ck − ck−1 )/(xk − xk−p )
end
end
(2) Utiliser l'algorithme d'Horner an d'évaluer In f sur une grille ne de points dans [0, 1].
Tracer In f et f sur la même gure et marquer les points d'interpolation xi .
Solution :
n=input(' n = ') ; ;
x=(0 :n)'/n ;
g=0 :0.01 :1 ;
test1=inline('sin(10.*x.*cos(x))')
c=dd(x) ;
y=interpole(c,x,g) ;
yg=test1(g) ;
plot(g,yg,g,y,'r+')
hold on ;
yx=test1(x) ;
plot(x,yx,'O') ;
hold off
title(['Interpolation de Lagrange de la fonction sin(10.*x.*cos(x))
avec differences divisees '])
legend('f','I_nf','xy_i')
%
function c=dd(x)
% x contient les points x_i
% c contient les differences divisees
test1=inline('sin(10.*x.*cos(x))')
c=test1(x) ; % "test1" est defini ailleurs, ou par "inline n=length(x) ;
for p=1 :n-1
for k=n :-1 :p+1
c(k)=(c(k)-c(k-1))/(x(k)-x(k-p)) ;
end ;
end ;
%
function y=interpole(c,x,g)
% calculer l'interpolation de la fonction f sur la grille g
% sachant les differences divisees c calculees aux points x
n = length(c) ;
y = c(n)*ones(size(g)) ;
for k=n-1 :-1 :1
y = c(k)+y.*(g-x(k)) ;
INTERPOLATION
6
end
2.2. Erreur d'interpolation. Nous considérons le problème du contrôle de l'erreur de l'interpolationde Lagrange. Soit x ∈ [a, b] et évaluons l'erreur locale,
en (x) = f (x) − In f (x).
Si x est un point d'interpolation, en (x) = 0. Sinon, nous pouvons caractériser l'erreur par le
résultat suivant.
Proposition 2.8.
Soit
f ∈ C n+1 ([a, b]).
en (x) =
Pour tout
x ∈ [a, b]
ξx ∈ [a, b]
il existe
tel que
n
Y
1
(x − xi )f (n+1) (ξx ).
(n + 1)! i=0
On en déduit une borne supérieure
n
Y
1
|en (x)| =
(x − xi )
(n + 1)! i=0
(n+1) f
∞
∞
.
Ceci é&suggère de choisir les points d'interpolation an de minimiser le produit (on ne peut
rien pour f )
La constante de Lebesgue associée aux points {xi }ni=0 est la valeur réelle dénie par
(2.2)
Λn = max
x∈[a,b]
n
X
|li (x)|
i=0
qui dépend que des points xi et qui mesure la stabilité de l'interpolation de Lagrange, vu que
kIn f − pn k∞ ≤ Λn
où est l'erreur maximale dans les valeurs de f (xi ).
l'erreur d'interpolation :
l'erreur locale est,
en (x) = f (x) − In f (x)
et une borne uniforme est,
ken k∞ ≤ (1 + Λn )En (f )
où En (f ) = infq∈Pn kf − qk∞ est l'erreur de la meilleure approximation de f par des
polynômes de Pn dans la norme uniforme.
on peut démontrer que pour tout ensemble de points d'interpolation,
lim Λn = +∞.
n→∞
l'erreur globale, kf − In f k∞ est bornée par le produit de deux termes : Λn qui tend vers
∞ et En qui tend vers zéro avec un taux qui croît avec la régularité de f. Conclusion :
le processus d'interpolation de Lagrange converge uniformément si le produit Λn En (f )
tend vers zéro.
Exercice 2.9. Calcul de la constante de Lebesgue.
(1) Ecrire une fonction qui calcul la constante de Lebesgue associée à un vecteur x de n
nombres réels selon (2.2). Utilisez polyval et polyfit an d'évaluer li . Calculer la valeur
maximale sur une grille uniforme de 100 points entre xmin et xmax .
(2) Le cas uniform : calculer pour n = 10 : 5 : 30 la constante Λu (n) associée aux n + 1 points
équidistants dans l'intervalle [−1, 1]. Tracer la courbe n 7−→ ln(Λu (n)). Commenter.
INTERPOLATION
7
(3) Le cas Chebyshev : calculer pour n = 10 : 5 : 20 la constante Λc (n) associée aux n + 1
points de Chebyshev dans l'intervalle [−1, 1]. Tracer la courbe ln n 7−→ Λc (n). Commenter.
Les points de Chebyshev
sont les n racines du polynôme de Chebyshev Tn (t) = cos nθ,
ti = cos
π
2n
+ i nπ , 0 ≤ i ≤ n − 1.
Solution :
function leb=Lebesgue(x)
% calcul de la constante de Lebesgue associee aux points
% dans le tableau x
n=length(x)-1 ;
xx=linspace(min(x),max(x),100) ;%grid (100 points)
y=zeros(size(xx)) ;
for i=1 :n+1 ;
%calcul de ell_i(x)
l=zeros(size(x)) ;
l(i)=1 ;
cf=polyfit(x,l,n) ;
y=y+abs(polyval(cf,xx)) ;
end ;
leb=max(y) ;
%%
ind=[] ;lebE=[] ;
for n=10 :5 :30
x=(-n/2 :n/2)/n*2 ;
%points equidistants
l=Lebesgue(x)
ind=[ind ;n] ;
lebE=[lebE ;l] ;
end ;
figure(1) ;
plot(ind,log(lebE),'+-','LineWidth',2,'MarkerSize',10)
xlabel('n'), ylabel('log \Lambda(n)')
title('Constante de Lebesgue (cas uniform)')
%
ind=[] ;lebT=[] ;
for n=10 :5 :30
x=cos(pi*(.5+n :-1 :0)/(n+1)) ;
%points Chebyshev
l=Lebesgue(x) ;
ind=[ind ;n] ;
lebT=[lebT ;l] ;
end ;
figure(2) ;
plot(log(ind),lebT,'+-','LineWidth',2,'MarkerSize',10)
xlabel('log (n)'), ylabel('\Lambda(n)')
title('Constante de Lebesgue (cas Chebyshev)')
Exercice 2.10. Phénomène de Runge. Calculer et tracer sur une grille uniforme de 100 points,
le polynôme d'interpolation de Lagrange de la fonction f : x 7→ 1/(x2 + a2 ) aux (n + 1) points
xi = −1 + 2i/n, i = 0, ..., n. Prendre a = 2/5 et n = 10, 20, 30. Commenter les résultats.
Solution :
La fonction à interpoler est régulière, mais sa constante de Lebesgue explose.
function Runge()
% illustrer phenomene de Runge
INTERPOLATION
8
n=10 ;
x=-1+2*(0 :n) ;
g=(-1 :.02 :1) ;
y=test1Interpol(x,g) ;
plot(g,f(g),g,y,'r+','LineWidth',2,'MarkerSize',10)
legend('u','I_n u')
titre=['phenomene de Runge, n = ' num2str(n)] ; title(titre) ;
%
function y=f(x)
a=.4 ;y=1./(x.*x+a*a) ;
%
function y=test1Interpol(x,G)
% calcul de l interpolee dans la base 1
% sur la grille G
% interpolation aux points de x (vecteur colonne)
% On calcule la matrice A
A=ones(length(x),1) ;
for k=1 :length(x)-1
A=[A x.^k] ;
end ;
%c=cond(A) ;
cf=A\f(x) ;
%reorde
cf=cf(end :-1 :1) ;
y=polyval(cf,G) ;%%y=polyval(cf,x) ;
3.
Approximation polynomiale par morceaux
Soit f une fonction continue, dénie sur l'intervalle [0, 1]. L'objectif est d'approcher f par une
fonction S polynomiale par morceaux, appelée un spline. L'utilisation de telles fonctions a pour
but :
de contrôler les problèmes liés au manque de régularité globale de f ;
de surmonter des problèmes d'instabilité en utilisant plusieurs polynômes de degré bas, plutot
qu'un polynôme de degré élevé.
Dénition 3.1. Étant donnés k points ti appelés n÷uds dans un intervalle I = [a, b] avec
a = t0 < t1 < ... < tk = b.
La courbe S : [a, b] 7−→ R est appelée spline de degré n
si S ∈ C n−1 ]a, b[
et si sa restriction sur chaque sous-intervalle S[ti ,ti+1 ] ∈ Pn , i = 0, ..., k−1, où Pn est l'ensemble
des polynômes de degré n. En d'autres termes, sur chaque sous-intervalle, S est un polynôme
de degré n.
Les (ti , S(ti )) sont appelés des points de contrôle.
3.1. Approximation constante par morceaux. Soit S0 une fonction constante sur chaque
sous -intervalle, qui interpole f aux points xi+1/2 = (xi + xi+1 )/2. Supposons que f ∈ C 1 (I). Selon
la proposition 2.8, pour tout x ∈ Ii = [xi , xi+1 ], il existe ξx,i ∈ Ii tel que
f (x) − S0 (x) = (x − xi+1/2 )f 0 (ξx,i ).
On en déduit que si les noeuds sont équidistants avec xi+1 − xi = h = 1/n, alors
kf − S0 k∞ ≤
h
M1 ,
2
où M1 est une borne supérieure de f 0 sur I. Donc, lorsque h → 0, S0 converge uniformement vers
f.
INTERPOLATION
9
3.2. Approximation ane (linéaire) par morceaux. Ici, l'approximation S1 est ane sur
chaque Ii et coïncide avec f aux points xi et xi+1 . Nous avons
1
(f (xi+1 ) − f (xi )) (x − xi ) + f (xi ).
h
Supposons, d'abord, que f ∈ C 2 (I). Selon la proposition 2.8, pour tout x ∈ Ii = [xi , xi+1 ], il existe
ξx,i ∈ Ii tel que
(x − xi )(x − xi+1 ) 00
f (x) − S1 (x) =
f (ξx,i ).
2
On en déduit que si les noeuds sont équidistants avec xi+1 − xi = h = 1/n, alors
S1,Ii (x) =
h2
M2 ,
8
où M2 est une borne supérieure de f 00 sur I. Donc, lorsque h → 0, S1 converge uniformement vers
f avec un taux quadratique.
(3.1)
kf − S1 k∞ ≤
Exercice 3.2. Soit
f : [0, 1] 7→ f (x) = sin(4πx). Calculer la spline linéaire par morceaux, S1 .
Calculer et tracer la courbe
ln n 7→ ln kf − S1 k∞
et vériez l'estimation (3.1). Prenez n = 10k avec k = 1, 2, ..., 10.
Solution :
% approximation par spline affine
n0=10 ;E=[] ;N=[] ;
for i=1 :10,
n=i*n0 ;
E=[E ;APP_errorS1(n)] ;
N=[N ;n] ;
end ;
loglog(N,E,'-o','MarkerSize',8,'LineWidth',2) ;
xlabel('log n') ;ylabel('log Erreur') ;
fprintf('Pente de la droite = %g \n',log(E(end)/(E(1)))/log(N(end)/N(1))) ;
title('Approximation lineaire par morceaux')
figure
n=10 ; x=(0 :n)'/n ;h=1/n ;
fx=sin(4*pi*x) ;
plot(x,fx,'-o',0 :0.01 :1,sin(4*pi*(0 :0.01 :1)))
legend('S_1','f(x)')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=APP_errorS1(n)
x=(0 :n)'/n ;h=1/n ;fx=f(x) ;
% Evaluation de p_i sur chaque intervalle [x_i,x_{i+1}]
y=[] ;
for i=1 :n
a=(fx(i+1)-fx(i))/h ;
Ii=linspace(x(i),x(i+1),20) ;
fi=f(Ii) ;
Si=a*(Ii-x(i))+fx(i) ;
y=[y norm(Si-fi,'inf')] ;
end
y=max(y) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=f(x)
y=sin(4*pi*x) ;
INTERPOLATION
10
3.3. Approximation cubique par morceaux. Cherchons une approximation S3 dans C 2 (I)
qui est cubique dans chaque Ii et qui coïncide avec f aux points xi et xi+1 . Soit pi la restriction
de S3 à Ii , pour i = 0, ..., n − 1 :
pi (x) = ai (x − xi )3 + bi (x − xi )2 + ci (x − xi ) + di .
Clairement, di = f (xi ). Les autres inconnus peuvent être exprimés en termes des valeurs de f et
sa dérivée seconde aux points xi . Posant αi = p00i (xi ) et utilisant la continuité des deux premeières
dérivées de l'approximation aux points xi , nous obtenons
bi =
1
αi ,
2
ai =
et la relation de récurrence,
αi+1 − αi
,
6h
ci =
fi+1 − fi
2αi + αi+1
−
h,
h
6
6
(fi−1 − 2fi + fi+1 ).
h
Il faut rajouter 2 équations an de completer le système, par exemple α0 = αn = 0. Dans ce cas,
α = (α1 , ..., αn−1 )T est la solution d'un système linéaire, tridiagonale
h(αi−1 + 4αi + αi+1 ) =
Ax = b
avec

4
1
0




A = h



1
4
1
···
0
..
.
..
.
..
0
···
1
0
4
1
..
.
.
0

.. 
. 


,
0 


1 
4

f0 − 2f1 + f2

..

.

6
f
−
2f
b =  i−1
i + fi+1
h
.
..

fn−2 − 2fn−1 + fn




.



Exercice 3.3. Ecrivez unprogramme
qui calcul la spline cubique avec les conditions α0 = αn = 0.
n
Prenez les (n + 1) points,
la fonction f et sa spline.
i
n
i=0
. Testez le programme avec f (x) = sin(4πx) et n = 5, 10. Tracer
Solution :
% calculer la spline cubique
close all
f=inline('sin(4*pi*x)') ;
n=5 ;x=(0 :n)'/n ;h=1/n ;fx=f(x) ;
b=-2*fx(2 :n)+fx(1 :n-1)+fx(3 :n+1) ;
b=6*b/h ;A=h*toeplitz([4,1,zeros(1,n-3)]) ;
alpha=A\b ;alpha=[0 ;alpha ;0] ;
%Evaluation de p_i sur chaque intervalle [x_i,x_{i+1}]
hold on
for i=1 :n
a=(alpha(i+1)-alpha(i))/6/h ;
b=alpha(i)/2 ;
c=(fx(i+1)-fx(i))/h-(2*alpha(i)+alpha(i+1))*h/6 ;
Ii=linspace(x(i),x(i+1),20) ;
fi=f(Ii) ;
Si=a*(Ii-x(i)).^3+b*(Ii-x(i)).^2+c*(Ii-x(i))+fx(i) ;
plot(Ii,fi,Ii,Si,'r+','MarkerSize',8,'LineWidth',3) ;
fprintf('Taper pour la suite\n')
title(strcat('intervalles 1..',num2str(i)))
xlim([0,1])
pause
end
title('Interpolation de spline cubique de sin(4 \pi x) ')
INTERPOLATION
11
legend('f','S_3')
4.
Régression linéaire
4.1. La droite de moindres carrés. Le problème suivant est souvent rencontré dans tous les
domaines où des mathématiques sont appliquées. Pour des points discrets ti (souvent des instants de temps), des observations bi d'un phénomène quelconque sont faites, et les résultats sont
enrégistrés comme un ensemble de couples
D = {(t1 , b1 ), (t2 , b2 ), ..., (tm , bm )} .
Sur la base des ces observations, le problème est de faire des estimations ou des prévisions aux
points (instants) t̂ diérents des ti . L'approche classique est alors de trouver l'équation de la courbe
y = f (t)
qui est ajustée au mieux aux points dans D an de pouvoir ensuite estimer le phénomène selon
ŷ = f (t̂).
Commençons par ajuster une ligne droite aux points dans D. Une fois que nous avons compris
ceci, il est relativement facile d'ajuster les données avec des lignes courbes. La stratégie est de
déterminer les coecients, α et β, de la droite
f (t) = α + βt
qui s'ajuste au mieux aux points (ti , bi ) dans le sens où la somme des erreurs verticales (nous
supposons ici que les instants sont connus sans erreurs) 1 , 2 , ...m est minimale.
Si nous dénissons les erruers comme
i = |f (ti ) − bi | = |α + βti − bi |
alors le but est : trouver les valeurs de α et β qui minimisent
E=
m
X
2i .
i=1
Selon la théorie d'optimisation, la valeur minimale se trouve par la résolution des équations pour
les points stationnaires,
∂E
= 0.
∂β
∂E
= 0,
∂α
Nous calculons aisement,
2
2
m
X
i=1
m
X
(α + βti − bi ) =
0
(α + βti − bi ) ti =
0,
i=1
qui peut être réecrit en termes des deux inconnus,
m
X
i=1
m
X
!
1 α+
ti
i=1
!
α+
m
X
i=1
m
X
!
ti
β
!
t2i
β
i=1
Ce système est équivalent à l'équation matricielle,
(4.1)
=
AT Ax = AT b,
=
m
X
i=1
m
X
i=1
bi
ti bi .
INTERPOLATION
avec

1
 1

A= .
 ..
1

t1
t2 

..  ,
. 
tm
Le système (4.1) est le système d'équations
12


b1
 b2 


b= . 
 .. 
bm
normales
et x =
.
associé au système Ax = b. Le produit,

1
 1
1 1 ··· 1

=

t1 t2 · · · tm  ...
1
Pm
m
i=1 ti
Pm
Pm
=
.
2
t
i
i=1
i=1 ti
AT A
α
β

t1
t2 

.. 
. 
tm
Vu que les ti sont supposés distincts, le système admet une solution unique donnée par
x = AT A
−1
AT b
et l'erreur totale par
m
X
2i = (Ax − b)T (Ax − b).
i=1
Nous résumons dans un théorème.
Théorème 4.1.
Pour
A ∈ Rm×n
moindres carrés est de trouver le
b ∈ Rm , soit = (x) = Ax − b.
vecteur x qui minimise la quantité
m
X
et
Le problème général de
2i = T = (Ax − b)T (Ax − b).
i=1
Tout vecteur qui fournit une valeur minimale s'appele une solution de moindres carrés. L'ensemble
de toutes les solutions de moindres carrés est précisément l'ensemble de solutions du système des
équations normales,
T
−1
AT Ax = AT b.
Il existe une solution de moindres carrés unique, donnée par
T
x= A A
A b, si et seulement si le rank(A) = n.
de Ax = b est la même que celle de moindres carrés.
Si
Ax = b
est consistente, alors la solution
4.2. La courbe de moindres carrés. Le problème est ici de trouver un polynôme de degré
donné,
p(t) = α0 + α1 t + α2 t2 + · · · + αn−1 tn−1
qui se rapproche autant que possible, dans le sens des moindres carrés, à un ensemble de mesures
D = {(t1 , b1 ), (t2 , b2 ), ..., (tm , bm )} ,
où les ti sont distincts et n ≤ m. Le but, de nouveau, est de minimiser la somme de carrés,
m
X
2i =
i=1
où

1
 1

A= .
 ..
1
m
X
i=1
t1
t2
t21
t22
···
···
tm
t2m
···
···
..
.
2
(p(ti ) − bi ) = (Ax − b)T (Ax − b).,
..
.

tn−1
1

tn−1
2

,
.. 
. 
tn−1
m


b1
 b2 


b= . 
 .. 
bm



et x = 

α0
α1
..
.



.

αn−1
Le polynome de moindres carrés est unique parce que Am×n est une matrice de Vandermonde avec
n ≤ m, et donc rank(A) = n.
INTERPOLATION
13
4.3. Résolution numérique des équations normales.
instabilités d'une résolution directe par élimination de Gauss et même par factorisation de
Cholesky
QR (Householder) et SVD factorisations pour la résolution des équations normales
Matlab anti-slash opérateur
SVD plus robuste que Householder, mais beaucoup plus cher
La solution de norme minimale à
Ax = b
est donnée par
x = A+ b,
où la
pseudoinverse
de la matrice A de dimension m × n, avec m > n, est dénie par
A+ = AT A
La factorisation
SVD
−1
AT .
de A est
A = U ΣV T
où U est une matrice orthogonale m × m, V est une matrice orthogonale n × n et Σ est une matrice
diagonale de dimension m × n avec
(
0
σij =
σi
pour i 6= j,
pour i = j
et σi sont les valeurs singulières de A, dénies comme des valeurs réelles, non négatives, telles que
Av
=
σu
A u =
σv,
H
où u ∈ R et v ∈ R sont des vecteurs unités, non nuls. Les valeurs singulières (au carré) sont
des valeurs propres de la matrice carrée AAT .
Finalement le pseudoinverse est aussi donnée par
m
n
A + = V Σ+ U T ,
où Σ+ est le pseudoinverse de Σ avec chaque élément non nul remplacé par sa réciproque.
La factorisation QR de A est
R
0
où Q est une matrice orthogonale de dimension m×m, et R est une matrice triangulaire supérieure
de dimension n × n. Finalement le pseudoinverse est aussi donnée par
A=Q
A+ = R−1 QT1
où Q1 est la partition m × n de Q telle que
A=Q
R
0
= [Q1 Q2 ]
R
0
= Q1 R.
Le SVD a de très nombreuses applications : dans la résolution de problèmes inverses,
la régularisation de Tikhonov, l'analyse en composantes principales (voir Google), le traitement
de signal, le traitement d'image, etc.
Remarque.
Exemple 4.2. Ajuster une droite à 5 observations.
On obtient le problème de moindres carrés linéaires suivant :



Ax = 


1
1
1
1
1
t1
t2
t3
t4
t5




 x1

∼

 x2 = 


y1
y2
y3
y4
y5



=b


INTERPOLATION
Données :
t
y
−1.0 −0.5 0.0
−0.45 −0.2 0.07
1
1
1
1
1
−1.0
−0.5
0.0
0.5
1.0
14
0.5
0.19
1.0
0.4
Système linéaire 5 × 3










 x1

∼

 x2 = 


Solution (par SVD ou QR)
x=
0.002

−0.45
−0.20
0.07
0.19
0.40
0.418


=b


T
Polynôme d'approximation est donc
p(t) = 0.002 + 0.418t.
Exemple 4.3. Ajuster un polynôme quadratique à 5 observations.
On obtient le problème de moindres carrés linéaires suivant :

1
1
1
1
1


Ax = 


Données :
t1
t2
t3
t4
t5
−1.0
1.0
t
y
t21
t22
t23
t24
t25



y1
y2
y3
y4
y5


 x1


  x2  ∼
=



 x3
−0.5
0.5



=b


0.0 0.5 1.0
0.0 0.5 2.0
Système linéaire 5 × 3






1
1
1
1
1
−1.0
−0.5
0.0
0.5
1.0
1.0
0.25
0.0
0.25
1.0




 x1



  x2  ∼

=


 x3

1.0
0.5
0.0
0.5
2.0



=b


Solution (par SVD ou QR)
x=
0.086
0.40
1.4
T
Polynôme d'approximation est donc
p(t) = 0.086 + 0.4t + 1.4t2 .
5.
Régression non linéaire
5.1. La méthode de Gauss-Newton. Dans les problèmes de moindres carrés non linéaires, la
fonction à minimiser prend en général la forme
m
g(x) =
1X
gi (x)2 .
2 i=1
Pour appliquer la méthode de Newton à la minimisation de g(x), on doit calculer le Hessien de g,
qui dans ce cas précis prend une forme particulière. D'une part, la gradient de g est
∇g(x) =
m
X
∇gi (x)gi (x)
i=1
et le Hessien de g est donné par
∇2 g(x) =
m
X
i=1
∇gi (x)∇gi (x)T +
m
X
i=1
gi (x)∇2 gi (x).
INTERPOLATION
15
2
y
1.5
1
0.5
0
−1
−0.8
−0.6
−0.4
−0.2
0
t
0.2
0.4
0.6
0.8
1
Courbe quadratique et données
Figure 4.1.
Si l'on se place près de l'optimum, où on supposera que les gi (x) sont petits, le deuxième terme
peut alors être négligé. La matrice obtenue
H(x) =
m
X
∇gi (x)∇gi (x)T
i=1
est semi-dénie positive et la plupart du temps, avec m n, elle est dénie positive. La méthode
obtenue de la méthode de Newton en ramplacant ∇2 g(x) par H(x) est la méthode de GaussNewton :


x 0
Hk


xk+1
donné,
Pm
= i=1 ∇gi (xk )∇gi (xk )T ,
= xk − Hk−1 ∇g(xk ).
Pour l'ajustement de données (ti , yi ), soit la fonction résiduelle
ri (x) = yi − f (t, xi ),
i = 1, ..., m
où x est un vecteur de paramètres inconnus, f est une fonction non linéaire connue. Nous voulons
minimiser
φ(x) =
Son gradient est
1 T
r (x)r(x).
2
∇φ(x) = J T (x)r(x)
et sa matrice Hessienne est donnée par
H(x) = J T (x)J(x) +
m
X
i=1
ri (x)Hi (x)
INTERPOLATION
i
[S]
1
2
0.038 0.194
rate 0.050 0.127
3
0.425
0.094
Table 1.
4
0.626
0.2122
16
5
1.253
0.2729
6
2.500
0.2665
Données expérimentales.
Itération
Estimation
1
[0.9 , 0.2]
2
[0.3327 , 0.2602]
3
[0.93428 , 0.24261]
4
[0.3578 , 0.5295]
5
[0.3614 , 0.5537]
6
[0.3618 , 0.5561]
Table 2. Résultats de la méthode
7
3.740
0.3317
Σ7i=1 ri2
1.4455
0.01507
0.00846
0.00786
0.007844
0.007844
Gauss-Newton
∂(r1 ,..,rm )
où J(x) = ∂(x
est le Jacobien de r(x) et Hi (x) est le Hessien de r(xi ). Mais le deuxième
1 ,...,xn )
terme de H(x) est supposé petit proche de la solution, et nous le négligeons. Ceci donne le système
linéaire à résoudre à chaque itération :
(5.1)
J T (xk )J(xk )sk = J T (xk )r(xk )
puis la mise à jour
xk+1 = xk − sk .
Notons que l'équation (5.1) est le système d'équations normales et peut être résolue par une
factorisation QR (ou une SVD). Finalement, nous répétons les itérations jusqu'à la convergence.
Exemple 5.1. Vitesse de réaction. Dans cet exemple, l'algorithme de GaussNewton est utilisé
pour ajuster un modèle en minimisant la somme des carrés entre les observations et les prévisions
du modèle. Dans une expérience de biologie, on étudie la relation entre la concentration du substrat
[S] et la vitesse de réaction dans une réaction enzymatique à partir de données reportées dans la
Table 1.
On souhaite ajuster les données à une courbe de la forme :
rate =
Vmax [S]
.
KM + [S]
L'estimation par moindres carrés porte sur les paramètres Vmax et KM . Pour i = 1, ..., 7 on note
par xi les valeurs de [S] et par yi la vitesse de réaction. On pose β1 = Vmax et β2 = KM . Nous
allons chercher β1 et β2 pour minimiser la somme des carrés des résidus,
ri = yi −
β1 x i
,
β2 + x i
i = 1, ..., 7.
La jacobienne Jr du vecteur des résidus ri par rapport aux inconnus βj est une matrice 7 × 2 dont
la ligne i est
∂ri
−xi
∂ri
β1 x i
=
,
=
2.
∂β1
β2 + x i
∂β2
(β2 + xi )
Commençant avec l'estimation initiale β1 = 0.9 et β2 = 0.2 , il sut de 5 itérations de l'algorithme
de GaussNewton pour atteindre les estimations optimales β̂1 = 0.362 et β̂2 = 0.556. Le critère
de la somme des carrés des résidus chute de 1.202 à 0.0886 en 5 itérations. La Table 2 détaille les
cinq itérations et la courbe obtenue est tracée dans la Figure 5.1.
5.2. La méthode de Levenberg-Marquardt. An d'assurer la convergence globale de la méthode de Gauss-Newton, on peut la combiner avec une recherche linéaire. L'itération obtenue est
alors :
(
dk
xk+1
= −Hk−1 ∇f (xk ),
= xk + ρk dk ,
INTERPOLATION
17
Regression non lineaire pour reaction enzymatique
0.35
0.3
0.25
rate
0.2
0.15
0.1
0.05
0
0
Figure 5.1.
0.5
1
1.5
2
[S]
2.5
3
3.5
4
Courbe de régression non linéaire pour données observées.
cependant, il n'y a pas de garantie que Hk reste dénie positive et en général on fait appel à la
méthode de Levenberg-Marquardt qui remplace la matrice Hk par Hk + λI où λ est un réel positif.
La méthode est décrite par :


x0

H
k
dk



xk+1
donné,
Pm
= i=1 ∇fi (xk )∇fi (xk )T ,
−1
= − (Hk + λI) ∇f (xk )
= xk + ρk dk .
Exemple 5.2. Vitesse de réaction II. Le modèle Hougen-Watson pour la cinétique d'une
réaction est donnée par :
r=
où
β1 x2 − x3 /β5
1 + β2 x 1 + β 3 x 2 + β4 x 3
x1 , x2 et x3 sont les concentrations d'hydrogène, n -pentane, isopentane resp.,
β1 , ..., β5 sont des paramètres inconnus,
r̂1 , ..., r̂n sont des vitesses observées, pour des concentrations xij , i = 1, ...5, j = 1, ..., n.
Formulation : chercher les valeurs des paramètres qui minimisent le carré de l'erreur,
min E =
β
n
X
2
(r̂j − r(x, β)) .
j=1
Pour résoudre ce problème on utilisera la fonction nlinfit de Matlab qui implémente l'algorithme de Levenberg-Marquardt.

Documents pareils