IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Poursuivre une courbe de tendance jusqu'à l'origine du graphique


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Geologue
    Inscrit en
    Août 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Geologue
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2022
    Messages : 12
    Par défaut Poursuivre une courbe de tendance jusqu'à l'origine du graphique
    Bonjour,

    Après avoir réalisé un graphique à partir de points extraits d'un datagrid, je réalise une première courbe de tendance (loi de puissance) sur l'ensemble des points puis une seconde en omettant le premier point.
    Jusque là mon code fonctionne...

    Maintenant je souhaite que ma courbe de tendance ne commence non pas au 1er point sélectionné mais à l'origine de mon graphique (0,0)...et là je ne trouve rien sur la façon de faire.

    J'ai bien pensé ajouté le point 0,0 mais je ne peux forcer le passage par ce point et de toute façon ça fait bugger le calcul des coefficients a et b de l'équation de ma courbe de tendance...

    Donc si quelqu'un à un début de solution... merci

    Karen



    Pour info, voici le code qui me sert à tracer mes courbes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    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
     
            ChartEta.Series.Item(1).Points.AddXY(DataGridView2.Rows(0).Cells.Item(0).Value, Double.NaN)
            For i = 1 To DataGridView2.Rows.Count - 1
                Dim Ligne As DataGridViewRow = DataGridView2.Rows.Item(i)
                If Not IsNothing(Ligne.Cells.Item(1).Value) Then
                    ChartEta.Series.Item(1).Points.AddXY(Ligne.Cells.Item(0).Value, Ligne.Cells.Item(2).Value)
                End If
            Next
     
            ChartEta.Series.Item(2).Points.AddXY(DataGridView2.Rows(0).Cells.Item(0).Value, Double.NaN)
            ChartEta.Series.Item(2).Points.AddXY(DataGridView2.Rows(1).Cells.Item(0).Value, Double.NaN)
     
            For i = 2 To DataGridView2.Rows.Count - 1
                Dim Ligne As DataGridViewRow = DataGridView2.Rows.Item(i)
                If Not IsNothing(Ligne.Cells.Item(1).Value) Then
                    ChartEta.Series.Item(2).Points.AddXY(Ligne.Cells.Item(0).Value, Ligne.Cells.Item(2).Value)
                End If
            Next
     
     'tracer la courbe de tendance la mieux ajustée
            ChartEta.Series.Add("Trendline")
            ChartEta.Series("Trendline").ChartType = SeriesChartType.Line
            ChartEta.Series("Trendline").Color = Color.Red
            ChartEta.DataManipulator.IsStartFromFirst = True
            ChartEta.DataManipulator.FinancialFormula(FinancialFormula.Forecasting, "Power,1,false,false", ChartEta.Series.Item(0), ChartEta.Series("Trendline"))
     
            'définir les coefficients a et b
            Dim PointsSaisis As DataPointCollection = ChartEta.Series.Item(0).Points
            Dim xx(PointsSaisis.Count - 1) As Double
            Dim yy(PointsSaisis.Count - 1) As Double
            For i = 0 To PointsSaisis.Count - 1
                xx(i) = Double.Parse(PointsSaisis(i).AxisLabel.Replace(",", "."))
                yy(i) = PointsSaisis(i).YValues(0)
            Next
     
            Dim r = Fit.Power(xx, yy)
            DataGridView1.Item(1, 0).Value = r.A
            DataGridView1.Item(2, 0).Value = r.B
     
     
            ChartEta.Series.Add("Trendline1")
            ChartEta.Series("Trendline1").ChartType = SeriesChartType.Line
            ChartEta.Series("Trendline1").Color = Color.Blue
            ChartEta.DataManipulator.FinancialFormula(FinancialFormula.Forecasting, "Power,1,false,false", ChartEta.Series.Item(1), ChartEta.Series("Trendline1"))
     
            'définir les coefficients a et b
            PointsSaisis = ChartEta.Series.Item(1).Points
            ReDim xx(PointsSaisis.Count - 2)
            ReDim yy(PointsSaisis.Count - 2)
            For i = 0 To PointsSaisis.Count - 2
                xx(i) = Double.Parse(PointsSaisis(i + 1).AxisLabel.Replace(",", "."))
                yy(i) = PointsSaisis(i + 1).YValues(0)
            Next
     
            r = Fit.Power(xx, yy)
            DataGridView1.Item(1, 1).Value = r.A
            DataGridView1.Item(2, 1).Value = r.B

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    Tu te contredis un peu: tu veux commencer en (0,0) mais sans imposer (0,0) euh ..
    Tu veux sans doute commencer au point x=0, donc il faut calculer avec les paramètres de ta courbe de tendance la valeur Y correspondante et rajouter ce couple de coordonnées ensuite, non ?

  3. #3
    Membre averti
    Femme Profil pro
    Geologue
    Inscrit en
    Août 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Geologue
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2022
    Messages : 12
    Par défaut
    Bonjour umfred,

    Désolée pour le délai de réponse mais j'étais occupée ailleurs.

    En fait, je veux commencer ma courbe de régression en (0,0) sans pour autant que le point appartienne à ma série de données qui sert à calculer ladite régression.

    J'espère que c'est plus clair maintenant...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    ta fonction Fit.Power ne dispose pas d'autres paramètres optionnels permettant d'obtenir ce que tu veux ?
    (ça me fait penser à une réponse que j'ai donné il n'y a pas très longtemps sur la fonction LinEst (Excel/VBA) où le 3ème paramètre force à avoir b=0 (dans le cadre d'une régression linéaire, il y a le même genre de paramètres pour les autres types de régressions), il y a peut-être ce genre de paramètres aussi dans ton cas ?

    Edit: si c'est celle de Math.Net, elle est censé renvoyé le tuble (a,b) pour y=a*x^b
    ValueTuple<double, double> Power(Double[] x, Double[] y, DirectRegressionMethod method)
    Least-Squares fitting the points (x,y) to a power y : x -> a*x^b, returning its best fitting parameters as (a, b) tuple.
    https://numerics.mathdotnet.com/api/.../Fit.htm#Power

Discussions similaires

  1. Application d'une courbe de tendance
    Par Hocéane dans le forum Excel
    Réponses: 0
    Dernier message: 29/06/2011, 10h06
  2. Récupérer l'équation d'une courbe de tendance dans une cellule Excel
    Par Marsama dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/04/2011, 16h45
  3. [XL-2007] Modif.couleur d'une courbe de tendance
    Par shemonet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/02/2010, 07h53
  4. Calculer une "courbe de tendance"
    Par boullette38 dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/07/2007, 14h43
  5. [VBA-E] recuperation de l'equation d'une courbe de tendance
    Par miotte83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/09/2005, 01h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo