web-dev-qa-db-ja.com

Excelでx、yテーブルを補間して検索する最も簡単な方法は何ですか?

次の表のx、yデータに基づいてルックアップと補間を実行したいと思います。考えられるエラーの量を減らすために、式をできるだけ単純にしてください。テーブル全体は、約50行x 30列です。私はそれらのテーブルを約20個持っています。これは、1つの抜粋です。

   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

たとえば、方程式はx = 2.27およびy = 0.15の値を見つける必要があります

8
dassouki

各テーブルの最初の行と最初の列にインデックス値があり、テーブルの内部に一連の値がある複数のテーブルがあり、それぞれが特定の行と列のインデックス値に関連付けられています。

行または列のインデックスと正確に等しい、または2つの行のインデックス値または2つの列のインデックス値の間にある2つの値が与えられた場合、指定された2つの値に基づいてテーブルの値を直線補間します。最初の行と最初の列の値。

Table for which interpolations will be calculated

テーブルのインデックス値の間にある入力値の補間を行うには、以下が必要です。

  • 垂直入力値vnumより大きい(または等しい)最小の垂直インデックス値の行番号。テーブルの列1のインデックス値は降順であるため、これは次のようにして取得できます。

    =MATCH(vnum,vrng,-1)

ここで、vnumは入力値で、vrngはテーブルの最初の列のインデックスの垂直範囲です。 MATCH関数の-3番目の引数-1は、「より小」のルックアップが実行されることを示します。 MATCH関数をこのように使用するには、インデックスの垂直範囲が降順になっている必要があります。

  • 垂直入力値(vnum)より小さい(または等しい)最大の垂直インデックス値。垂直インデックス値はMATCHで必要な昇順で並べ替えられていないため、MATCH関数を使用して取得することはできません。代わりに、次の配列数式が使用されます。

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

この式の重要な要素はvnum>=vrngは、最初のTRUEが、入力値よりも小さい最大の垂直インデックス値を保持する行位置にあるブール配列を生成します。 ( "> ="の使用は直観に反するように見えるかもしれません。列のインデックスが降順であるため必要です。式の残りの部分は、この行の位置を行番号に変換します。

これらの2つの上下の行番号は、入力値の上下を囲むインデックス値と、それらのインデックス値に対応する内部テーブル値の両方を計算するために使用されます。

水平インデックス範囲の対応する列番号と列値は、同様の方法で作成されます。

残りのステップは、補間の計算を通して機能します。

Remaining step to calculate interpolated value for input value pair

このように多くのステップがあるため、複数の入力値の補間された量を計算することは実際的ではないように思えるかもしれません。双方向データ(what-if)テーブルを使用すると、実際には非常に簡単です。

Two-way data table

複数のテーブルに対するこれらの計算の設定は、それらの1つの式のバージョンを使用することにより、さらに簡略化できます。これを使用するには、名前付き範囲vnumhnumvrnghrngdatarngvalidvnumvalidhnumを設定する必要があります。テーブルは別のシートまたは別のブックにある必要があります。別のシートにある場合、各シートの名前はワークシートのスコープを持つように設定する必要があります。

次に、シングルステップの計算式がデータテーブルの左上のセルに入力されます。この2,100(マイナス1)文字の数式は、ダウンロード可能なワークシートに含まれています。

この一連の計算を含むワークシートは、 このリンク を使用してダウンロードできます。

6
chuff

実際には、3次元のテーブルがあります。xyは独立変数であり、検索する必要があるのはzです。

2次元テーブルの解決策は知っていますが、3次元テーブルの場合も同様です。

したがって、2次元の表がある場合、Excelの「傾向線」機能を使用して、データに最適な数式を見つけることができます。その式を使用して、yxを計算できます

  1. 線形散布図(XY)を作成します(挿入=>散布図);
  2. 多項式または移動平均トレンドラインを作成し、「チャートに方程式を表示」をチェックします(系列を右クリック=>トレンドラインを追加)。
  3. 数式をセルにコピーし、xを目的のx値に置き換えます

以下のスクリーンショットでは、A12:A16はxを保持し、B12:B16はyを保持し、C12はyxを計算する式を含みます。

Excel Interpolation

あなたの場合(3次元データ)については、Excelにも3次元グラフを作成する機能がありますが、3次元傾向があるかどうかはわかりません。

3
alexkovelsky

Excelのインデックス機能と一致機能を組み合わせて使用​​すると、結果を得ることができます。上記のデータを使用すると、Excelに正確に配置され、次の式が導出されます。セル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

ここで見つけることができるバイリニア補間のVBAコードを作成しました: https://github.com/DanGolding/Linear-and-bilinear-interpolation-in-Excel

この方法の利点は、この画像に示すように、値のグリッドを簡単に補間できる単一の関数であることです(セルは値に応じて色付けされ、補間の効果を視覚化します)。

enter image description here

1
Dan

これが探している式です:2つの点(x1、y1)と(x2、y2)が与えられ、それらの間を補間するには、次の式を使用します。

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

ここで、xは入力、yは出力です。次の場合 table

式は次のとおりです。= IF(ISERROR(MATCH(O3、R $ 4:R $ 10))、S $ 4、IF(ISERROR(INDEX(R $ 4:R $ 10、MATCH(O $ 3、R $ 4:R $ 10)+1) )、S $ 10、(INDEX(R $ 4:S $ 10、MATCH(O3、R $ 10)+1,2)-INDEX(R $ 4:S $ 10、MATCH(O3、R $ 4:R $ 10)、2 ))/(INDEX(R $ 4:S $ 10、MATCH(O3、R $ 4:R $ 10)+1,1)-INDEX(R $ 4:S $ 10、MATCH(O3、R $ 4:R $ 10)、1)) *(O3-INDEX(R $ 4:S $ 10、MATCH(O3、R $ 4:R $ 10)、1))+ INDEX(R $ 4:S $ 10、MATCH(O3、R $ 4:R $ 10)、2)))

Iferror関数はエンドポイントを処理します。外挿ではなく、値を終点に保持します。

1
Tom

この問題に対するこれまでの最良の答えはこのビデオにあります https://www.youtube.com/watch?v=LFUd5qF8nyE

最終的な式は

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

ここで、「interpol_array」は値を補間する列として定義され、「lookup_array」は値を検索する列です。

この回答も同じことを述べています https://stackoverflow.com/questions/42877228/vlookup-and-interpolating

1
Rami Alloush

これは、3つの機能を組み合わせて解決されます。予測、オフセット、および一致。

=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