b-spline python_SciPyTutorial-一元B样条插值
12. Scipy Tutorial-一元樣條插值
前邊使用過線性插值linear、最鄰近插值nearest以及三次插值cubic,這些插值凸點點多,不夠光滑,本章研究樣條插值spline,實現盡量讓插值函數的曲線顯得更光滑(收斂性)一些。樣條插值是使用一種名為樣條的特殊分段多項式進行插值的形式。由于樣條插值可以使用低階多項式樣條實現較小的插值誤差,這樣就避免了使用高階多項式所出現的龍格現象,所以樣條插值得到了流行。
scipy.interpolate包里提供了兩個函數splev和splrep共同完成(B-樣條:貝茲曲線(又稱貝塞爾曲線))插值,和之前一元插值一步就能完成不同,樣條插值需要兩步完成,第一步先用splrep計算出b樣條曲線的參數tck,第二步在第一步的基礎上用splev計算出各取樣點的插值結果。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import splev, splrep
def f(x):
return x ** 2 + 10 * np.sin(x) + 1
x = np.linspace(0, 10, 20)
y = f(x)
plt.plot(x, y, '*-')
plt.show()
x2 = np.linspace(0, 10, 200)
spl = splrep(x, y, s = 0)
y2 = splev(x2, spl)
plt.plot(x, y, 'o', x2, y2)
plt.show()
總結
以上是生活随笔為你收集整理的b-spline python_SciPyTutorial-一元B样条插值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python flask 部署_pyth
- 下一篇: git怎样用idea拉代码_一款强大的