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


1.はじめに

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

2.データ

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

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で補間したデータをグラフ化すると下図。測定値も一緒にプロットしている。

"gaussian"で違いが分かるが、あとは似たような感じ。y=4の断面を抽出して下にグラフ化する。

・"cubic"は"gaussian"の分布と似ているが、外挿の分布が異なる。
・"gaussian"はいわゆる正規分布を匂わせる分布に見える。
・"linear"は明らかにカクカクしているように見える。
・"thin_plate"は他の分布より歪量は小さいが、外挿の分布が平板に近い。

5.まとめ

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