Polynôme du troisième degré

Accueil

Régression multiple

Régression selon le critère des moindres carrés

6 Lissage Savitzky-Golay

1 Combinaison linéaire de fonctions

2 Application au lissage polynomial

3 Droite des moindres carrés

4 Parabole des moindres carrés

5 Polynôme du troisième degré

6 Lissage Savitzky et Golay

7 Régression multiple

8 Régression plane

9 Régression multiple du 10ème degré

 

10 Régression d'une fonction

 


  En 1964, A.SAVITZKY et M.J.E.GOLAY (1) publiaient dans Analytical Chemistry un article décrivant une technique de lissage simple et efficace : "Smoothing and Differentiation of Data by Simplified Least Squares Procedures"

  Leur méthode permet de lisser ou de dériver une suite de résultats expérimentaux, d'abscisses équidistantes, par simple convolution avec une série de coefficients correspondant au degré du polynôme d'interpolation choisi et à l'opération souhaitée : simple lissage ou dérivation jusqu 5ème ordre.


Lissage

  Un exemple montrera la facilité d'utilisation.
  Traitons manuellement les premiers points d'un spectre commençant par ces valeurs, régulièrement espacées : 184, 189, 209, 201, 189, 205, 193, 203, 176, ...
  Lissons le 4ème point en utilisant les pondérations correspondant au polynôme du second degré sur 7 points.
  Savitzky et Golay donnent dans la colonne 7 de leur  1er tableau les coefficients à appliquer : -2, 3, 6, 7, 6, 3, -2.

regrs_601.jpg (49810 octets)

  La convolution sera réalisée par 7 multiplications suivies de la somme des produits et terminée en divisant par la norme correspondante :

regrs_602.gif (2323 octets)

   L'opération se répétera après déplacement des coefficients de pondération pour obtenir la valeur lissée du 5ème point :

  regrs_603.gif (2331 octets)

  Et en confiant la tâche à un ordinateur, le sous programme CONVOLUER lissera ou dérivera toutes série de résultats expérimentaux.

Public Sub CONVOLUER(Nbr_Pt As Integer, Nbr_Pond As Integer, Y() As Double, YL() As Double) 
Lim_Sup = Nbr_Pt - (Nbr_Pond - 1) / 2
For I = Lim_Inf To Lim_Sup
   Som = 0
   For J = 1 To Nbr_Pond
      Som = Som + Y(I + J - Lim_Inf) * Pond(J)
   Next J
   YL(I) = Som / Norm
Next I
End Sub


- Nbr_Pt  représente le nombre total de points
- Nbr_Pond le nombre coefficients de pondération
- Y() le tableau des ordonnées à lisser
et l'argument de sortie YL() contenant la suite des valeurs lissées ou de la dérivée choisie.

On obtient finalement :

  La dispersion a diminué, mais pour atteindre l'efficacité du lissage polynomiale classique il sera nécessaire de porter à 21 le nombre des coefficients de pondérations .

  La courbe lissée devient comparable à celle obtenue par régression polynomiale.

  L'article de Savitzky et Golay s'accompagne de 11 tableaux  de coefficients adaptés au lissage ou la détermination des 5 premières dérivées, les convolutions s'effectuent pour différents degrés de polynômes et sur de étendues échelonnées entre 5 et 25 points.

  L'efficacité du lissage croît avec le nombre de points considérés et décroît en augmentant le degré du polynôme. Un lissage exagéré peut gommer un détail significatif  mais un compromis judicieux révélera un signal noyé dans le bruit.


Dérivation

  La performance la plus surprenante de la méthode réside dans sa capacité de déterminer les dérivées d'une courbe expérimentale, jusqu'à la cinquième dans les cas les plus favorables. Les deux exemples suivant reprennent les tests utilisés dans le programme de régression polynomiale.

  La quatrième dérivée d'une sinusoïde se superpose sur la fonction  de façon quasi parfaite avec seulement 7 pondérations et encore mieux en  augmentant ce nombre.

  L'introduction de légères fluctuations statistiques empêche de dépasser le dérivée seconde.


Téléchargement du programme

  Le programme proposé au téléchargement permet, entre autres, la réalisation des exemples ci-dessus mais aussi de traiter vos propres données. Il comporte également 11 fichiers contenant les coefficients de pondération corrigés.

Télécharger Liss_SG

  Si ce télé-chargement vous pose quelques problème, consultez d'abord le mode opératoire détaillé.

  Liss_SG.exe est un fichier compressé auto extractible.

  Chargez-le dans le répertoire de votre choix.
  En l'exécutant vous ouvrirez la fenêtre ci-contre.
  Changez éventuellement le dossier destinataire, sinon la décompression s'effectuera dans "Program Files".

  Le dossier Liss_SG.exe comporte
- un exécutable et son raccourci
- 17 fichiers de données
-VB5FR.DLL et MSVBVM50.DLL


Propagation d'erreur

  Malgré la précision des instruments de mesure, malgré les précautions prises pour assurer la reproductibilité des mesures, des résultats expérimentaux sont toujours affectés d'erreurs statistiques. En répétant les mesures et les lissages on déterminera l'écart type des valeurs lissées. Mais avec une série de mesures unique, si les erreurs sur chaque composante sont connues, la loi de propagation d'erreur appliquée à une somme algébrique permettra de calculer l'erreur sur chaque valeur lissée.
  3 lignes supplémentaires dans le sous programme CONVOLUER réaliseront ce calcul, tant pour le lissage que pour les dérivées.

Public Sub CONVOLUER(Nbr_Pt As Integer, Nbr_Pond As Integer, Y() As Double, YL() As Double,
              Sig_Y() As Double, Sig_YL() As Double)
Lim_Inf = (Nbr_Pond + 1) / 2
Lim_Sup = Nbr_Pt - (Nbr_Pond - 1) / 2
For I = Lim_Inf To Lim_Sup
   Som = 0
   Som_Sig = 0
   For J = 1 To Nbr_Pond
     K = I + J - Lim_Inf
      Som = Som + Y(K) * Pond(J)
      Som_Sig = Som_Sig + (Sig_Y(K) * Pond(J)) ^ 2
   Next J
   YL(I) = Som / Norm
   Sig_YL(I) = Sqr(Som_Sig) / Norm
Next I
End Sub


- Sig_Y() représente l'écart type sur chacune des valeurs initiales
- Sig_YL() l'écart type des valeurs lissées

  L'application ci-dessous simule un comptage gamma dans un spectromètre multi-canaux : chaque erreur est la racine du nombre d'évènements dans le canal correspondant.

  Après lissage, l'erreur sur chaque point diminue d'autant plus que la convolution porte sur un grand nombres de points.
  Ici les erreurs sont sensiblement réduites de moitié mais le lissage les a rendues interdépendantes et donc inutilisables pour de nouveaux calculs de propagation d'erreur, l'erreur sur l'aire d'un pic par exemple.


Téléchargement du programme   ( avec propagation d'erreur )

  Le programme proposé au téléchargement permet, entre autres, la réalisation des exemples ci-dessus mais aussi de traiter vos propres données. Il comporte également 11 fichiers contenant les coefficients de pondération corrigés.

Télécharger Liss_SG_PE

  Si ce télé-chargement vous pose quelques problème, consultez d'abord le mode opératoire détaillé

  Liss_SG.exe  est un fichier compressé auto extractible.

  Chargez-le dans le répertoire de votre choix.
  En l'exécutant vous ouvrirez la fenêtre ci-contre.
  Changez éventuellement le dossier destinataire, sinon la décompression s'effectuera dans "Program Files".

  Le dossier Liss_SG.exe comporte
- un exécutable et son raccourci
- 17 fichiers de données
-VB5FR.DLL et MSVBVM50.DLL

  Plutôt que de transférer vos données il sera plus simple d'incorporer le sous programme de lissage CONVOLUER dans votre application ainsi que les paramètres de lissage Table_1.dat à Table_11.dat téléchargés avec  Liss_SG .


Avantages et inconvénients

- L'extrême facilité de programmation est le principal intérêt du procédé
- Il permet un accès direct aux valeurs des dérivées
- Le dernier exemple démontre la simplicité du calcul de propagation d'erreur

  En revanche, les abscisses sont obligatoirement équidistantes, les points extrêmes sont ignorés et l'expression analytique des courbes reste inaccessible.


Coefficients de pondérations

  Malencontreusement, les tables publiées par Savitzky et Golay comportent de nombreuses erreurs numériques. Elles furent corrigées par J.Steiner Y.Termonia et J.Deltour  (2) .

  Des tests systématiques ont révélé qu'il ensubsistait quelques erreurs typographiques :

Table I Colonne 25 Norme 5177 au lieu de 5175
Table IV Colonne 9 Point +1 126 au lieu de 129
Table IV Colonne 21 Point +10 -84075 au lieu 84075
Table IV Colonne 17 Point > 0 Inverser tous les signes

  Elles sont corrigées dans ces 11 tables. Pour éviter d'en commettre de nouvelles, il s'agit de copies d'écran d'un programme de vérification.

Table 1

Lissage

Quadratique Cubique

A20  A30

Table 2

Lissage

Quartique Quintique

A40  A50

Table 3

1ere dérivée

Quadratique

A21

Table 4

1ere dérivée

Cubique Quartique

A31  A41

Table 5

1ere dérivée

Quintique Sexique

A51  A61

Table 6

2eme dérivée

Quadratique Cubique

A22  A32

Table 7

2eme dérivée

Quartique Quintique

A42  A52

Table 8

3eme dérivée

Cubique Quartique

A33  A43

Table 9

3eme dérivée

Quintique Sexique

A53  A63

Table 10

4eme dérivée

Quartique Quintique

A44  A54

Table 11

5eme dérivée

Quintique Sexique

A55  A65


(1) A.Savitzky et M.J.E.Golay,  ANAL. CHEM., 36,1627 (1964)
(2) J.Steiner Y.Termonia et J.Deltour, ANAL. CHEM., 44,1909 (1972)


Extraire la page pour l'enregistrer ou l'imprimer