Accueil

Annexe 1

Sous-Programme Visual Basic de Régression polynomiale

 

Public Sub RGRS_POL(Nbr_Pt, X() As Double, Y() As Double, Degre, Poly() As Double)
'Arguments d'entrée :
' - Nbr_Pt nombre de points à traiter
' - X() Tableau des abscisses X1, X2, X3, ...
' - Y() Tableau des ordonnées Y1, Y2, ...
' - Degré du polynôme de régression à calculer
' Argument de sortie :
' - Poly() contenant les paramètre du polynôme par ordre d'exposants décroissants A(degré), A(degré-1), ...


M = Degre + 1
ReDim SX(2 * M + 1) As Double, SYX(M) As Double
ReDim A(M, M) As Double, B(M, 2 * M) As Double, C(M, 2 * M) As Double

'Calcule les sommes des puissances de X
For I = 1 To 2 * M - 1
   SX(I) = 0
Next I
For I = 1 To M
   SYX(I) = 0
Next I
For J = 1 To Nbr_Pt
   'Sommes des X^i
   XP = 1
   For I = 1 To 2 * M - 1
     SX(I) = SX(I) + XP
     XP = XP * X(J)
   Next I
   'Sommes des YjX^i
   XP = Y(J)
   For I = 1 To M
     SYX(I) = SYX(I) + XP
     XP = XP * X(J)
   Next I
Next J

'Forme la matrice carrée des sommes
For I = 1 To M
   For J = 1 To M
     K = 2 * M - I - J + 1
     A(I, J) = SX(K)
   Next J
Next I

'Inverse la matrice
For I = 1 To M
  For J = 1 To M
     B(I, J) = A(I, J)
   Next J
   For J = M + 1 To 2 * M
     B(I, J) = 0
   Next J
   B(I, I + M) = 1
Next I
For K = 1 To M
  For J = 1 To 2 * M
    C(K, J) = B(K, J) / B(K, K)
   Next J
  For I = 1 To M
     If K <> I Then
       For J = 1 To 2 * M
         C(I, J) = B(I, J) - B(I, K) * C(K, J)
       Next J
     End If
   Next I
   For I = 1 To M
     For J = 1 To 2 * M
       B(I, J) = C(I, J)
     Next J
   Next I
Next K

'Calcule le polynôme en multipliant la matrice carrée par la matrice ligne
For I = 1 To M
   Poly(I) = 0
   For J = 1 To M
     Poly(I) = Poly(I) + B(I, J + M) * SYX(M + 1 - J)
   Next J
Next I
End Sub