Comment réaliser une interpolation linéaire 1D et 2D via visual basic

paprika45

XLDnaute Nouveau
Bonjour à tous,

J'ai un gros problème en ce qui concerne des macros sur les interpolations linéaires, ayant cherché pendant longtemps sur internet pour comprendre (cours de mathématique + programme sur les interpolations) je bloque sur deux problèmes :

-un concernant les interpolations linéaires 1D c'est à dire que dans un premier temps je souhaiterais écrire en langage VBA un algorithme qui calcule l'interpolation linéaire 1D (yi) en un point (xi) à partir de deux valeurs de coordonnées (x1,y1) et (x2,y2) puis un autre programme qui fasse la même chose mais pour deux vecteurs x et y (où x et y sont monotones et croissant)

J'ai commencé un programme avec 4 InputBox me demandant de rentrer les coordonnées x1, y1, x2, y2
puis de faire

m=(y2-y1)/(x2-x1)

MsgBox "On obtient une fonction affine yi= " & m & " xi +p"

Je pense que ce programme n'est pas complet (car nous ne pouvons pas trouver le "p"?) et je n'arrive vraiment pas à voir ce qu'il faut faire pour la suite, de plus les programmes que j'ai trouvé sur internet ne concernent que des macros utilisant des données de feuilles excel.

-Un deuxième problème concernant un algorithme qui calcule l'interpolation linéaire 2D (zi) en un point (xi, yi) à partir de deux valeurs de coordonnées (x1,y1,z1) et (x2,y2,z2) puis un autre programme qui fasse la même chose mais pour deux vecteurs x et y et une matrice z (où la taille de la matrice z est définie par la taille de x et y sachant que x et y sont monotones et croissant)


Merci d'avance à tous pour votre aide,
je continue mes recherches,
 

Dranreb

XLDnaute Barbatruc
Re : Comment réaliser une interpolation linéaire 1D et 2D via visual basic

Bonsoir paprika
Pour le premier problème:
VB:
Function IntpoLin(ByVal X As Double, ByVal X1 As Double, ByVal Y1 As Double, _
ByVal X2 As Double, ByVal Y2 As Double) As Double
IntpoLin = Y1 + (Y2 - Y1) * (X - X1) / (X2 - X1)
End Function
Pour les suivant, voulez vous chercher un peu ?
Peut être que ça revient à faire un peu la même chose en arithmétique complexe ?

Non, hein, c'est pas ça...
Mais alors pour trouver Z pour un X et Y donné il faut 3 coordonnées, pas 2 !
Certes l'une d'elle peut être X=0, Y=0, Z=0, mais c'est une coordonnée quand même.
C'est comme pour un tabouret: il lui faut 3 pieds pour être stable sans risquer d'être bancal !
Et c'est un tout petit chouia plus compliqué:
VB:
Function ZIntpoXY(ByVal X As Double, ByVal Y As Double, ByVal X1 As Double, ByVal Y1 As Double, ByVal Z1 As Double, _
                                                        ByVal X2 As Double, ByVal Y2 As Double, ByVal Z2 As Double, _
                                                        ByVal X3 As Double, ByVal Y3 As Double, ByVal Z3 As Double) As Double
ZIntpoXY = ( _
     X * (Z1 * (Y2 - Y3) + Z2 * (Y3 - Y1) + Z3 * (Y1 - Y2)) _
   + Y * (Z1 * (X3 - X2) + Z2 * (X1 - X3) + Z3 * (X2 - X1)) _
   + Z1 * (X2 * Y3 - Y2 * X3) + Z2 * (Y1 * X3 - X1 * Y3) + Z3 * (X1 * Y2 - Y1 * X2) _
            ) / (X1 * (Y2 - Y3) + Y1 * (X3 - X2) + (X2 * Y3 - Y2 * X3))
End Function
Cordialement.
 
Dernière édition:

Statistiques des forums

Discussions
312 803
Messages
2 092 250
Membres
105 316
dernier inscrit
cyrille225