Python で 1 次元スプライン補間

SciPy には 1 次元スプライン補間曲線を得られる関数が多数用意されています。 全ての点を通過する 1 次元スプライン曲線を得るには、以下に示すような方法があります。 1 次元スプライン補間には、オブジェクト指向型のインターフェースである UnivariateSpline クラスを使うのが柔軟で便利です。

import numpy as np
from scipy import signal, interpolate
from matplotlib import pylab as plt

# サンプルデータ作成
t = np.linspace(0, 10, 11)
tt = np.linspace(0, 10, 51)
y = np.sin(t)

# オブジェクト指向型の FITPACK のラッパー
spl1 = interpolate.UnivariateSpline(t, y, s=0)
y1 = spl1(tt)

# UnivariateSpline で s=0 とした場合と同じ
spl2 = interpolate.InterpolatedUnivariateSpline(t, y)
y2 = spl2(tt)

# 非オブジェクト指向型の FITPACK のラッパー
c1 = interpolate.splrep(t, y)
y3 = interpolate.splev(tt, c1)

# 3 次スプライン曲線
c2 = signal.cspline1d(y)
y4 = signal.cspline1d_eval(c2, tt)

# 2 次スプライン曲線
c3 = signal.qspline1d(y)
y5 = signal.qspline1d_eval(c3, tt)

plt.figure()
plt.plot(t, y, "o")
plt.plot(tt, y1)
plt.plot(tt, y2)
plt.plot(tt, y3)
plt.plot(tt, y4)
plt.plot(tt, y5)
plt.show()
15080201.png

コメント

Comments powered by Disqus
書籍更新情報
2017-02-18
Pythonによる科学技術計算 基礎編
1.4版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
電子書籍
線形代数(1): Pythonによる科学技術計算 実践編