如何显示样条函数 (k=3)

How to show spline-functions (k=3)

我有一些 x 和 y 坐标的数据,其中 x 坐标在增加。我使用样条曲线 (k=3) 得到这些点的平滑曲线并绘制出来。现在我想知道这些点之间的函数 f(x) 但我不知道如何显示或发出它以便我以后可以使用它。

这是我使用的代码:

import os, sys, re
import numpy as np
import scipy as sp
import pandas as pd
import matplotlib.pyplot as plt
from scipy.interpolate import InterpolatedUnivariateSpline

x = np.linspace(0, 10, 50)
y = np.linspace(0, 1, 50)
spl = InterpolatedUnivariateSpline(x, y)
table_path = 'path/to/table.csv'
df = pd.read_csv(table_path)
xs = df['a/b']
ys = df['N']
plt.plot(xs, spl(ys))

您构建了样条曲线,现在您可以根据 x 的任意值对其进行计算,spl(x)

>>> from scipy.interpolate import InterpolatedUnivariateSpline as IUS
>>> import numpy as np
>>> x = np.arange(8)
>>> y = x**4
>>> spl = IUS(x, y)
>>> spl(7)
2401.0
>>> spl([x+0.5 for x in range(8)])
array([  6.84210526e-01,   4.81578947e+00,   3.90526316e+01,
         1.49973684e+02,   4.10052632e+02,   9.14815789e+02,
         1.78568421e+03,   3.15907895e+03])

编辑:所以OP是关于样条函数本身的函数形式。答案不是很好:样条是在B样条基础上,你可以通过

得到结和系数
>>> spl.get_knots()
array([ 0.,  2.,  3.,  4.,  5.,  7.])
>>> spl.get_coeffs()
array([ -1.65247462e-16,   2.87719298e+00,  -9.75438596e+00,
         6.32982456e+01,   2.24298246e+02,   6.92578947e+02,
         1.48921053e+03,   2.40100000e+03])

要将其转换为多项式形式,您可以使用 PPoly.from_spline 方法,该方法接受样条阶数、节点和系数的三元组。使用 splev/splrep 组合而不是 UnivariateSpline class 更容易——它在功能上是等价的,你直接得到 (t, c, k) 元组,你不需要担心关于边界结。

或者,在以后的scipy版本(0.18+)中,您可以使用直接在多项式基础上工作的CubicSpline class。