scipy 如何在三次样条曲线上使用渐近多边形?

lvmkulzt  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(140)
from scipy.interpolate import CubicSpline
from sympy import Symbol, Poly

xpts = np.linspace(0, 1)
cs = CubicSpline(xpts, np.exp(xpts))
Poly(cs)

如何用渐近多边形求出三次样条曲线的多项式?

y0u0uwnf

y0u0uwnf1#

三次样条由许多不同的多项式组成。您可以使用.c属性获取它们的系数:

In [33]: cs.c.shape
Out[33]: (4, 49)

这是一个4行49列的数组,每列给出一个多项式的系数:

In [35]: cs.c[:,0]
Out[35]: array([0.17111101, 0.49985044, 1.00000156, 1.        ])

这表示多项式并且可以被转换为SymPy多项式,如下:

In [41]: x = Symbol('x')

In [42]: Poly(cs.c[:,0], x)
Out[42]: Poly(0.171111008723916*x**3 + 0.499850444583089*x**2 + 1.00000155672475*x + 1.0, x, domain='RR')

该图显示该多项式在x=0附近紧密地遵循指数曲线:

In [40]: plot(Poly(cs.c[:,0], x).as_expr(), exp(x))

这是第一个多项式,但还有48个多项式可以使用0以外的索引得到,系数是以原点为中心的多项式的系数,因此需要移位才能得到正确的系数:

In [46]: plot(Poly(cs.c[:,48], x).as_expr().subs(x, x-xpts[-1]), exp(x))

相关问题