Récupérer les coefficients a et b d'une courbe de tendance puissance
Bonjour,
J'ai fait un bout de code pour tracer une courbe de tendance de puissance à partir de points récupérés dans un datagrid.
Maintenant je voudrais afficher les coefficients a et b pour voir si ça colle et surtout pour les utiliser dans des calculs.
J'ai écrit le bout de code suivant pour les visualiser dans des "Label" (je n'ai pas changé le nom vu que c'est provisoire.
Le problème c'est que si la courbe afficher semble correcte, je n'obtiens pas les coeff et quand on regarde les points collectés, tous les x restent à 0.
Je soupçonne que le problème vient du fait que j'ai des "," dans mes valeurs de x, mais je ne trouve pas comment pallier à ce problème, et j'ai cherché pourtant ! Mais étant débutante, il y a surement une subtilité qui m'a échappée.
Si vous connaissez aussi un bon tuto sur les charts et datagrid, je prends !
Merci
Karen
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Private Sub BtnCourbe_Click(sender As Object, e As EventArgs) Handles BtnCourbe.Click
'Effacer les courbes
ChartEta.Series.Clear()
ChartEta.Series.Add(New DataVisualization.Charting.Series())
ChartEta.Series.Item(0).ChartType = False
ChartEta.Series.Item(0).MarkerStyle = DataVisualization.Charting.MarkerStyle.Cross
'Afficher les points d'etalonnage
ChartEta.Visible = True
For Each Ligne As DataGridViewRow In DataGridView2.Rows
If Not IsNothing(Ligne.Cells.Item(1).Value) Then
ChartEta.Series.Item(0).Points.AddXY(Ligne.Cells.Item(0).Value, Ligne.Cells.Item(2).Value)
End If
Next
'Afficher la courbe
ChartEta.Series.Add("Trendline")
ChartEta.Series("Trendline").ChartType = SeriesChartType.Line
ChartEta.DataManipulator.FinancialFormula(FinancialFormula.Forecasting, "Power,1,false,false", ChartEta.Series.Item(0), ChartEta.Series("Trendline"))
'Afficher les valeurs a et b
Dim CoupleXY As DataPoint
Dim x1 As Double
Dim x2 As Double
Dim y1 As Double
Dim y2 As Double
For Each CoupleXY In ChartEta.Series("Trendline").Points
If CoupleXY.XValue = 1 Then
y2 = CoupleXY.YValues(0)
Else
x1 = CoupleXY.XValue
y1 = CoupleXY.YValues(0)
End If
If x1 <> 0 And y2 <> 0 Then Exit For
Next
Dim a As Double
Dim b As Double
a = y2
Label1.Text = "a=" + a.ToString
b = Math.Log(y1 / y2) / Math.Log(x1)
Label2.Text = "b=" + b.ToString
End Sub |