• Initiateur de la discussion Initiateur de la discussion David73
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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 :
 
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
 
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
 
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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
2 K
Retour