4

以下に示すように、データが次のように見える FORTRAN で 2 次元補間を実装するにはどうすればよいですか。x と y は 2 つの座標であり、z はそれらに依存する値です。x は等間隔ですが、y は等間隔ではなく、x の均一な値に対応する y の最大値は増加し続けます。精度をあまり失うことなく-

  • 与えられた x と y に基づいて z の値を取得する最も簡単な方法は何ですか?
  • 指定された x と y に基づいて z の値を取得する最速の方法は何ですか?

ありがとうSM

x    y    z
-----------
0   0     -
0   0.014 -
0   0.02  -

.....
....

0.1 0     -
0.1 0.02  -
0.1 0.03  - 

.......
.....

1.0  0     -
1.0  0.05  -
1.0  0.08  -

.......
.......
4

3 に答える 3

7

指定した形式に従って、データを配列 N x 3 に既に読み取っていると仮定します。X間隔が何であるかを事前に知らないと仮定しています-Y間隔は変化するため、間違いなくわかりません。したがって、次の戦略をお勧めします。

  • X 間隔を計算します。最初の行から始めて、値の変化が見られるまで X 要素を調べます。これで、XSTART と XSTEP を理解できました。これらは後で必要になります。
  • XFOUND < X < XFOUND + XSTART のような値 XFOUND が見つかるまで、配列内で値 X をバイナリ検索します。
  • 「リストのどこか」を指していると仮定すると、対応する Y 値が見つかります。必要な値よりも大きいか小さいかに応じて、最初のエントリ < Y が見つかるまで配列をステップアップまたはステップダウンします。対応する値X11、Y11、Z11です。配列の次の行には、X12 Y12 と Z12 があります。
  • 補間を行う前に、さらに 2 つのポイントが必要です。このプロセスを繰り返して、「X の次の大きな値」を探します。これにより、XYZ21 と XYZ22 が得られます。
  • ここで、補間された Z 値の計算について考えることができます。一般に、精度が異なるさまざまな手法があります。
  • 「最近傍」: 最も近い点を見つけ、その Z の値を使用します (最も単純で最も精度が低い)
  • 「線形補間」: 最も近い 3 つの点を見つけ、相対距離に基づいて値の線形補間を行います
  • 「高次推定」: これを行うには、通常、グリッド ポイントの完全な接続マッピングを作成する必要があるため、スプライン補間を実行して、グリッド ポイント間のポイントで通常より正確な滑らかな補間を取得できます (サンプルによって記述されている関数は、実際には滑らかな関数です!)

私のFORTRANは少し錆びています - これが助けになることを願っています.

PS - X 値が既に等間隔に配置されているという事実を使用することで、より簡単なアプローチが可能になる可能性があります。これにより、より良い補間を行うことができます。この写真を見てください:

ここに画像の説明を入力

于 2013-07-04T22:35:45.160 に答える
0

TOMS 補間アルゴリズムの 1 つを使用することをお勧めします : https://people.sc.fsu.edu/~jburkardt/f77_src/toms526/toms526.html /toms660.html https://people.sc.fsu.edu/~jburkardt/f77_src/toms790/toms790.html

于 2021-11-12T18:51:50.017 に答える