XL 2016 DROITEREG

David73

XLDnaute Nouveau
Bonjour à tous,

le sujet a sûrement déjà été traité dans le forum mais je ne trouve pas l'information que je cherche.

je souhaiterai déterminer des coefficients de polynômes y=f(x) dans VBA

D'après ce que je lis, il apparaît judicieux d'utiliser la fonction DROITEREG d'excel un peu comme ci-dessous :

a = Application.Index(Application.LinEst(y, x)

Mais j'aimerais aller plus loin et spécifier le degré du polynôme à utiliser.

SI quelqu'un a la solution, je suis preneur.

Merci beaucoup.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Droitereg, comme son nom l'indique, est une linéarisation du premier degré de type y=ax+b.
Il n'y a pas de formules permettant d’extraire directement un polynôme d'une matrice.
Mais il y a des méthodes comme celle ci :
ou celle ci à partir de la courbe :
 

David73

XLDnaute Nouveau
Merci pour ta réponse.

Malheureusement, ces liens concernent des solutions qui utilisent Excel.

Moi, je ne veux utiliser que VBA.

L'exemple ci-dessous me conviendrait bien (mais en pouvant choisir le degré) :

Sub Regression()
Dim X(3), Y(3), a As Double, b As Double
X(0) = 0: Y(0) = 1
X(1) = 1: Y(1) = 3
X(2) = 2: Y(2) = 5
X(3) = 3: Y(3) = 7
a = Application.Index(Application.LinEst(Y, X), 1)
b = Application.Index(Application.LinEst(Y, X), 2)
MsgBox "Pente a = " & a & Chr(10) & "Ordonnée à l'origine b = " & b
End Sub
 

David73

XLDnaute Nouveau
J'ai trouvé le petit bout de code suivant.
J'aimerais juste remplacer les "Range" par des tableaux de valeurs (X,Y).
Quelqu'un a une idée ?

Sub Coefs()

coeffs = Application.LinEst(Range("B1:B8"), _
Application.Power(Range("A1:A8"), Array(1, 2, 3)))

End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Testez déjà votre code sur des cellules XL, je n'obtiens pas les bons coefficients. iIl semble qu'il manque des paramètres.
En PJ divers méthodes de calculs qui marchent.
Reste à trouver le transfert d'un tableau dans la feuille en un array déclaré en VBA.
La solution la plus simple est de passer par une feuille, ce qui résout le problème.
 

Pièces jointes

  • Extraction coef linéarisation polynomiale.xlsm
    37.1 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je n'arrive pas à passer un array dans la formule.

VB:
OK
    Set tablo1 = Range("A1:A8")
    Set tablo2 = Range("B1:B8")
    coeffs = Application.LinEst(tablo2, Application.Power(tablo1, Array(1, 2, 3, 4, 5)))

Not OK
    tablo1 = Array(1, 2, 3, 4, 5, 6, 7, 8)
    tablo2 = Array(8, 65, 366, 1367, 3908, 9333, 19610, 37451)
    coeffs = Application.LinEst(tablo2, Application.Power(tablo1, Array(1, 2, 3, 4, 5)))

Une solution qui ne va pas vous plaire : utiliser un court instant une plage feuille :
Code:
Sub Coefs3()
Dim X(8) As Double, Y(8) As Double, tablo1, tablo2
    tablo1 = Array(1, 2, 3, 4, 5, 6, 7, 8)                      ' Matrice X
    tablo2 = Array(8, 65, 366, 1367, 3908, 9333, 19610, 37451)  ' Matrice Y
    Range("AA1:AA8") = Application.Transpose(tablo1)            ' On met MatX dans la feuille
    Range("AB1:AB8") = Application.Transpose(tablo2)            ' On met MatY dans la feuille
    coeffs = Application.LinEst(Range("AB1:AB8"), Application.Power(Range("AA1:AA8"), Array(1, 2, 3, 4, 5)))
    Range("AA1:AA8").ClearContents                              ' On efface les deux matrices
    Range("AB1:AB8").ClearContents
End Sub
 

bargol

XLDnaute Nouveau
Bonjour
Utiliser
theLeastSquareCoef = Application.LinEst(range_y, Application.Power(range_x, Array(1, 2, 3, 4, 5, 6)))
(1,2,3,4,5,6) = poly de dégré 6 par convention n=6

et récupérer les valeur du tableau dans la variable
Application.Index(theLeastSquareCoef, xxx) xxx de 1 à n+1
Bon courage
 

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal