Interpolation linéaire

Signaler
Messages postés
2
Date d'inscription
mercredi 15 janvier 2014
Statut
Membre
Dernière intervention
16 janvier 2014
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour à tous,

Je suis entrain de coder une fonction d'interpolation linéaire un peu particulière et qui porterait les éléments suivants :

Cette fonction prendra en arguments
Un décimal x compris entre deux limites a et b
Un tableau de valeurs x_i (x_0,...,x_i,?...x?_n )
Un tableau de valeurs considérées comme les images des valeurs précédentes, les y_i=f(x_i)

Le programme consistera dans un premier temps à trouver i tel que x_i<x<x_(i+1) à l'aide d'une boucle while...wend, et d'interpoler linéairement son image y entre y_i et y_(i+1).

Pour le moment, voici le code que j'ai inscrit :

Function IntpoLin(X As Double, Tab_X() As Double, Tab_Y() As Double) As Double

Dim X1 As Double
Dim X2 As Double
Dim Y1 As Double
Dim Y2 As Double
Dim i As Integer

i = 1
While X < Tab_X(i)
i = i + 1
X1 = Tab_X(i - 1)
X2 = Tab_X(i)
Y1 = Tab_Y(i - 1)
Y2 = Tab_Y(i)
Wend
IntpoLin = (Y1 - Y2) / (X1 - X2) * (X - X2) + Y2

End Function


Ce code ne fonctionne bien évidemment pas (cela affiche #valeur lorsque je l'appelle depuis une feuille) et j'aurais voulu que vous me guidiez. Je soupçonne peut être un probleme dans mes tableaux ...

Etant nouveau, j'aimerais vraiment comprendre mon erreur et donc si possible, ne pas me donner la réponse mais m'inviter à creuser certains points, etc ...

Merci d'avance !

4 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,
L'écriture du code montré n'appelle, en soi, aucune remarque.
Ton erreur est donc dûe :
- soit à des valeurs inattendues passées pour leur type (non numériques, NULL, par exemple)
- soit à des opérations impossibles, telles une division par 0. Ce sera notamment le cas lorsque X1 = X2
Tu es seul à pouvoir vérifier tout cela. (mode debug, pas à pas ...)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
2
Date d'inscription
mercredi 15 janvier 2014
Statut
Membre
Dernière intervention
16 janvier 2014

Merci pour vos éléments de réponses.

Pour exemple, j'ai simulé 2 tableaux :

Tab_X :1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12 , 13, 14 , 15, 16, 17

Tab_Y (représentant les images du premier tableau):
2, 4, 6, 8, 10 , 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34
(égale à 2X)

Je me place en B2, j'appelle ma fonction personnalisée (= > fx personnalisée > Intpolin) en sélectionnant comme arguments :
- X une cellule dans laquelle je rentrerai la valeur 2,6
- Tab_X : le premier tableau
- Tab_Y : le second tableau

Là, l'erreur #Valeur s'affiche. Pourtant, nous sommes d'accord que mes valeurs sont bien des nombres.

Je n'arrive par ailleurs, pas à accéder au pas à pas détaillé de ma fonction. Je vais dans l'onglet formule > vérification des erreurs > afficher les étapes du calcul, mais lorsque je l'active, l'erreur #valeur s'affiche immédiatement après que j'ai cliqué sur évaluer (bien que j'ai mis un STOP sur ma fonction qui se situe dans un module 1 dans le menu développeur...

Je suis un peu perdu !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Si tu n'entres pas dans ta function lors d'un pas-à-pas, c'est qu'il y a un problème de syntaxe.
Vas dans le menu "Debogage" + "Compiler" pour vérifier que la syntaxe ne pose pas de problème.
Si c'est le cas, ce sont peut-être les types des tableaux que tu transmets à ta fonction.
Il faudrait voir comment sont initialisés et remplis tes tableaux Tab_X et Tab_Y.
Méfiance entre les points et les virgules.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
PS : Tu dis appeler cette fonction depuis une feuille.
Tes 'tableaux' sont peut-être des ensembles de cellules ?
Dans ce cas, il faut transmettre des Range qui représenteront ces tableaux (item pour X) car la conversion Range -> tableau de Double n'est pas native.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Commence par regarder les cellules concernées de ta feuille de calcul.
Si l'une d'entre elles contient une valeur alignée à gauche, son contenu n'est pas numérique, quelle que puisse en être la raison (nombres décimaux avec le séparateur décimal inadéquat, etc ...)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend