[Help] Interpolation Lagrangienne en Visual Basic
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

[Help] Interpolation Lagrangienne en Visual Basic



  1. #1
    Kokore

    [Help] Interpolation Lagrangienne en Visual Basic


    ------

    Bonjour à tous,

    L'interpolation lagrangienne consiste à retrouver l'équation de la courbe d’un objet à partir des premières valeurs expérimentales afin de pouvoir déterminer la distance parcourue par l’objet à n’importe quel instant T. Dans mon projet, je dois pouvoir définir n'importe quelle distance quand t appartient à [0;10]s.

    Voici les valeurs expérimentales fournies :
    t(s) : 0,4412 / 0,6116 / 0,7626 / 0,9086 / 1,0121 / 1,1016 / 1,1940 / 1,2807 / 1,3560 / 1,4114
    d(m) : 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10

    PROBLEME : Quand je stocke ces données dans un tableau excel (avec t=x et d=y) et que j'exécute l'algorithme, les valeurs "d" obtenues sont cohérentes quand t∈[0; 1,4114] mais quand t∈[1,4114 ; 10], les valeurs de "d" sont infiniment trop grandes (puissances de 10). Je suppose que cela est du au fait que le T que je demande s'éloigne des valeurs expérimentales fournies : mon algorithme ne donne sûrement pas une bonne approximation de la courbe quand t>1,4. Je suppose que ce problème vient aussi du fait que je demande la position de t dont on veut savoir la valeur mais je ne vois pas comment faire autrement.

    Si quelqu'un peut m'expliquer d'où vient le problème ou sur quelle fausse route je me suis engagé, cela m'aiderait beaucoup !
    Voici ci-dessous ma macro actuelle :

    Code:
    Option Explicit
    
    Sub Lagrangeprojet()
    
    'Définir les variables
    Dim n, i, order As Integer
    Dim x(100), y(100), xi As Double
    
    'Savoir les dimensions du tableau
    n = InputBox("Rentrer le nombre de couples de valeurs")
    
    'Rentrer les données de T
    For i = 1 To n
       x(i) = Range("a" & i)
    Next
    
    'Rentrer les données de D
    For i = 1 To n
       y(i) = Range("b" & i)
    Next
    
    'Demander x pour trouver f(x)
    xi = InputBox("Rentrer la valeur de t dont vous voulez savoir la distance")
    Cells(1, 3).Value = xi
    
    'Situer x par rapport aux valeurs expérimentales
    order = InputBox("Donnez la position de cette valeur")
    Cells(2, 3).Value = order
    
    'Résultat f(x)
    MsgBox ("La valeur estimé de f(x) est : " & Lagrange(x, y, order, xi))
    Cells(1, 4).Value = Lagrange(x, y, order, xi)
    
    End Sub
    
    ---------------------------------------------------------------------------------------------------------
    
    'Sous algorithme de l'inteporlation Lagrangienne
    
    'Définir les variables
    Function Lagrange(x, y, order, xi)
    Dim i, j As Integer
    Dim sum, prod As Double
    
    'Initialiser la somme
    sum = 0
    
    For i = 0 To order
    prod = y(i)
    
    For j = 0 To order
    
    If i <> j Then
    prod = prod * (xi - x(j)) / (x(i) - x(j))
    End If
    
    Next j
    sum = sum + prod
    Next i
    
    Lagrange = sum
    
    End Function

    Je vous remercie d'avance pour votre aide,

    Kokore

    -----

  2. #2
    Paraboloide_Hyperbolique

    Re : [Help] Interpolation Lagrangienne en Visual Basic

    Bonjour,

    Votre problème est celui de l'extrapolation de données; qui est compliqué en général. Effectuer une extrapolation avec un polynôme de Lagrange est une mauvaise idée: son comportement devient de plus en plus "sauvage" à mesure que l'on s'éloigne des points de données et que son degré est élevé.

    Au vue de vos données, j'essaierais plutôt une approximation linéaire ou quadratique. La courbe ne passera plus forcément par les points de données, mais celle-ci sera beaucoup plus "sage".

  3. #3
    tet2lar

    Re : [Help] Interpolation Lagrangienne en Visual Basic

    Bonjour

    En effet, sur des corrélations aussi régulières que celle citée en exemple, il est préférable d'utiliser l'option "courbe de tendance d'excel" qui permet d'extrapoler correctement. La polynomiale donne un très bon résultat.
    Par contre, par curiosité sur votre macro, je ne comprends pas quelle position de la valeur vous saisissez quand vous sortez de l'intervalle des mesures expérimentales. Dans l'exemple cité, pour une valeur de t supérieure à 1.41, vous ne pouvez pas saisir une 11ème position ?

Discussions similaires

  1. visual basic
    Par estmahdi dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 13/09/2016, 13h31
  2. Problème de réception port série visual basic ( visual studio 2012)
    Par extremgear dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 30/07/2013, 23h44
  3. visual basic ??!!
    Par omar.STE dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 13/07/2008, 21h02
  4. Visual Basic
    Par invite16ba2b9a dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 09/01/2007, 11h09
  5. Visual Basic
    Par invite588da7a7 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 09/07/2004, 14h57