web-dev-qa-db-fra.com

Quel est le moyen le plus simple d'interpoler et de rechercher dans une table x, y dans Excel?

Je voudrais faire une recherche et une interpolation basée sur les données x, y pour le tableau suivant. Je voudrais que l'équation soit aussi simple que possible pour réduire le nombre d'erreurs possibles. Le tableau complet contient environ 50 lignes x 30 colonnes. J'ai environ 20 de ces tables. Voici un extrait d'un:

   A       B      C    D 
1        0.1    0.2   0.3 
2  2.4   450    300   50
3  2.3   500    375   52
4  2.1   550    475   55
5  1.8   600    600   60

Par exemple, l’équation doit trouver la valeur pour x = 2,27 et y = 0,15

8
dassouki

Vous avez un certain nombre de tables qui ont des valeurs d'index dans la première ligne et la première colonne de chaque table et un ensemble de valeurs à l'intérieur de la table, chacune étant associée à des valeurs d'index de ligne et de colonne spécifiques.

Étant donné que deux valeurs, respectivement, peuvent correspondre exactement à un index de ligne ou de colonne, ou peuvent se situer entre deux valeurs d'index de ligne ou deux valeurs d'index de colonne, vous souhaitez effectuer une interpolation linéaire des valeurs de la table en fonction des deux données données. valeurs pour la première ligne et la première colonne.

Table for which interpolations will be calculated

Pour effectuer l'interpolation des valeurs d'entrée situées entre les valeurs d'index du tableau, vous devez disposer des éléments suivants:

  • Numéro de ligne de la plus petite valeur d'index vertical supérieure ou égale à la valeur d'entrée verticale vnum. Les valeurs d'index de la colonne 1 du tableau étant par ordre décroissant, vous pouvez les obtenir avec:

    =MATCH(vnum,vrng,-1)

vnum est la valeur en entrée et vrng est la plage verticale des index dans la première colonne de la table. Le troisième argument -1 de la fonctionMATCH indique qu'une recherche "inférieure à" sera effectuée. Cette utilisation de la fonction MATCH nécessite que la plage d'index verticale soit dans l'ordre décroissant.

  • La plus grande valeur d'index vertical inférieure ou égale à la valeur d'entrée verticale (vnum). Cela ne peut pas être obtenu à l'aide de la fonction MATCH car les valeurs d'index vertical ne sont pas triées dans l'ordre croissant requis par MATCH. Au lieu de cela, la formule de tableau suivante est utilisée.

    =MIN(IFERROR(1/(vnum>=vrng)*ROW(INDIRECT("1:"&ROWS(vrng))),ROWS(vrng)))

L'élément clé de cette formule est vnum>=vrng, qui produit un tableau booléen dans lequel la première TRUE se trouve dans la position de ligne qui contient la plus grande valeur d'index vertical inférieure à la valeur d'entrée. (L'utilisation de "> =" peut sembler contre-intuitive; elle est nécessaire car les index de la colonne sont dans l'ordre décroissant.) Le reste de la formule convertit cette position de ligne en un numéro de ligne.

Ces deux numéros de rangée supérieure et inférieure servent à calculer à la fois les valeurs d'index qui encadrent la valeur d'entrée supérieure et inférieure et les valeurs de la table intérieure correspondant à ces valeurs d'index.

Les numéros de colonne et les valeurs de colonne correspondants pour la plage d'index horizontal sont construits de manière similaire.

Les étapes restantes traitent de l'arithmétique de l'interpolation.

Remaining step to calculate interpolated value for input value pair

Avec toutes ces étapes, il peut sembler que le calcul des montants interpolés pour plusieurs valeurs d'entrée ne serait pas pratique. C'est en fait assez facile d'utiliser une table de données bidirectionnelle ("what-if").

Two-way data table

La configuration de ces calculs pour plusieurs tables peut être simplifiée davantage en utilisant la version à formule unique. Pour l'utiliser, les plages nommées vnum, hnum, vrng, hrng, datarng, validvnum et validhnum devront être configurées. Les tableaux doivent figurer sur des feuilles séparées ou dans des classeurs séparés. Si les feuilles sont séparées, les noms de chaque feuille doivent être définis pour avoir une étendue de feuille de calcul.

La formule de calcul en une étape serait alors entrée dans la cellule en haut à gauche du tableau de données. Cette formule à 2 100 caractères (moins un) est incluse dans la fiche de travail téléchargeable.

Une feuille de calcul contenant cet ensemble de calculs peut être téléchargée en utilisant ce lien .

6
chuff

En fait, vous avez un tableau à trois dimensions - x et y sont des variables indépendantes, et celle que vous devez trouver est z.

Je connais une solution pour un tableau à deux jours, mais pour un plan à trois jours, elle devrait être semblable.

Ainsi, si vous disposez d'un tableau à deux dimensions, vous pouvez trouver la formule qui convient le mieux à vos données, à l'aide de la fonction "courbe de tendance" d'Excel. En utilisant cette formule, vous pouvez calculer y pour tout x

  1. Créez une dispersion linéaire (XY) pour elle (Insertion => Dispersion);
  2. Créez une ligne de tendance moyenne polynomiale ou mobile, cochez la case "Afficher l'équation sur un graphique" (cliquez avec le bouton droit de la souris sur la série => Ajouter une ligne de tendance);
  3. Copiez l'équation dans la cellule et remplacez x par la valeur x souhaitée

Sur la capture d'écran ci-dessous, A12: A16 correspond à x, B12: B16 à y et C12 contient une formule qui calcule y pour toute x.

Excel Interpolation

En ce qui concerne votre cas (données 3D), Excel peut également créer des graphiques 3D, mais je ne sais pas s'ils ont des tendances 3D.

3
alexkovelsky

Utilisez la fonction Index et Match d'Excel en combinaison pour obtenir votre résultat. En utilisant les données ci-dessus, vous avez placé exactement dans Excel et dérivé la formule suivante. La formule est entrée dans la cellule D8.

=INDEX($B$3:$D$6,MATCH(E2,$A$3:$A$6,-1),MATCH(F2,$B$2:$D$2,-1))

enter image description here

1
roman_bull

J'ai écrit le code VBA pour interpolation bilinéaire que vous pouvez trouver ici: https://github.com/DanGolding/Linear-and-bilinear-interpolation-in-Excel

L’avantage de cette méthode est qu’il s’agit d’une fonction unique qui facilite l’interpolation d’une grille de valeurs comme indiqué dans cette image (notez que les cellules sont colorées en fonction des valeurs pour mieux visualiser l’effet de l’interpolation):

enter image description here

1
Dan

Voici la formule que vous recherchez: Étant donné deux points (x1, y1) et (x2, y2), pour interpoler entre eux, utilisez la formule:

y = (y2-y1)/(x2-x1) * (x-x1) + y1

où x est l'entrée et y la sortie. Étant donné le tableau suivant

La formule est la suivante: = IF (ISERROR (MATCH (O3, 4 R $: 10 R $)), 4 USD, SI (ISERROR (INDEX (4 R $: 10 R $, MATCH (3 O, 4 R $: 10 R)) +1) ), 10 S $ (INDEX (4 R $: 10 S $, MATCH (O3, 4 R $: 10 R $) +1,2)) - INDEX (4 R $: 10 S $, MATCH (O3, 4 R $: 10 R $), 2 ))/(INDEX (4 R $: S $ 10, MATCH (O3, R $ 4: R $ 10)) +1,1) -INDEX (4 RUS: 10 S $, MATCH (O3, R $ 4: R $ 10), 1)) * (O3-INDEX (4 R $: S $ 10, MATCH (O3, R $ 4: R $ 10), 1)) + INDEX (R $ 4: S $ 10, MATCH (O3, R $ 4: R $ 10), 2)))

Les fonctions iferror gèrent les points finaux. Ils conservent la valeur au point final plutôt que d'extrapoler.

1
Tom

Il est résolu avec trois fonctions combinées; Prévisions, décalage et correspondance.

=FORECAST($B$9,OFFSET(B3:D3,0,MATCH($B$9,$B$2:$D$2,1)-1,1,2),OFFSET($B$2:$D$2,0,MATCH($B$9,$B$2:$D$2,1)-1,1,2))

=FORECAST(B10,OFFSET(E3:E6,MATCH(B10,A3:A6,-1)-1,0,2),OFFSET(A3:A6,MATCH(B10,A3:A6,-1)-1,0,2))

Excel spreadsheet details

0
Yasir Alharthi

La meilleure réponse à ce problème se trouve dans cette vidéo https://www.youtube.com/watch?v=LFUd5qF8nyE

La formule finale est

=FORECAST(C3,OFFSET(interpol_array,MATCH($C3,lookup_array,1)-1,0,2),OFFSET(lookup_array,MATCH($C3,lookup_array,1)-1,0,2))

Où "interpol_array" est défini comme la colonne à partir de laquelle vous voulez interpoler les valeurs et "lookup_array" est la colonne dans laquelle vous recherchez les valeurs.

Cette réponse indique également la même chose https://stackoverflow.com/questions/42877228/vlookup-and-interpolating

0
Rami Alloush