5
5

More than 3 years have passed since last update.

平面上におけるポテンシャルデータの補間

Last updated at Posted at 2021-01-23

1.はじめに

 平面地図上における標高マップの様に、二つの独立関数x, yに従属変数zが測定されるケースを考える。データの取得作業を最小限にし、補間することで情報量を確保したい。scipy.interpolate.Rbfによる補間をfanctionを変え実施し、結果を比較する。今回は、平板のポテンシャルデータ(歪み変形量)を離散的に測定し、測定間を補間していく。

2.データ

 測定した平板の歪変形データを散布図化する。scatter.png

3.scipy.interpolate.Rbf 補間

 測定したデータに対し、scipy.interpolate.Rbfを用い、測定値を補間していく。fanctionとして、"cubic", "gaussian", "linear", "thin_plate"の4種を試す。コードは下記。

import numpy as np
import pandas as pd
from scipy.interpolate import Rbf
import matplotlib.pyplot as plt

#データの読み込み
df = pd.read_csv('./data/test.csv')
x = np.array(df['x'])
y = np.array(df['y'])
displacement = np.array(df['displacement'])

#補間するエリアを指定
xi = np.linspace(0, 10, 100)
yi = np.linspace(0, 6, 60)
xx, yy = np.meshgrid(xi, yi)

#cubicで補間
rbf_c = Rbf(x, y, displacement, function='cubic')
zz_c = rbf_c(xx, yy)
#gaussianで補間
rbf_g = Rbf(x, y, displacement, function='gaussian')
zz_g = rbf_g(xx, yy)
#linearで補間
rbf_l = Rbf(x, y, displacement, function='linear')
zz_l = rbf_l(xx, yy)
#thin_plateで補間
rbf_t = Rbf(x, y, displacement, function='thin_plate')
zz_t = rbf_t(xx, yy)

4.結果の比較

 Rbfで補間したデータをグラフ化すると下図。測定値も一緒にプロットしている。
cubic.png
"gaussian"で違いが分かるが、あとは似たような感じ。y=4の断面を抽出して下にグラフ化する。
cross_section.png
・"cubic"は"gaussian"の分布と似ているが、外挿の分布が異なる。
・"gaussian"はいわゆる正規分布を匂わせる分布に見える。
・"linear"は明らかにカクカクしているように見える。
・"thin_plate"は他の分布より歪量は小さいが、外挿の分布が平板に近い。

5.まとめ

・平板の歪変形量を題材とした場合、scipy.interpolate.Rbfのfanctionは"thin_plate"が一番自然な補間のように思える。
・もっと細かい測定値を取得し、補間データと比較したい。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5