Interpolation linéaire

Tabouray38 Messages postés 2 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 16 janvier 2014 - 15 janv. 2014 à 17:05
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 16 janv. 2014 à 11:17
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/01/2014 à 17:56
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
0
Tabouray38 Messages postés 2 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 16 janvier 2014
16 janv. 2014 à 10:13
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 !
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 janv. 2014 à 10:50
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.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 janv. 2014 à 10:57
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 janv. 2014 à 11:17
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
0
Rejoignez-nous