Python/SciPy : How to get cubic spline equations from CubicSpline

标签 python numpy scipy spline

我正在通过一组给定的数据点生成三次样条曲线图:

import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

x = np.array([1, 2, 4, 5])  # sort data points by increasing x value
y = np.array([2, 1, 4, 3])
arr = np.arange(np.amin(x), np.amax(x), 0.01)
s = interpolate.CubicSpline(x, y)
plt.plot(x, y, 'bo', label='Data Point')
plt.plot(arr, s(arr), 'r-', label='Cubic Spline')
plt.legend()
plt.show()

如何从 CubicSpline 中获取样条方程?我需要以下形式的方程式:

我尝试了各种方法来获取系数,但它们都使用了使用不同数据获得的数据,而不仅仅是数据点。

最佳答案

来自 the documentation :

c (ndarray, shape (4, n-1, ...)) Coefficients of the polynomials on each segment. The trailing dimensions match the dimensions of y, excluding axis. For example, if y is 1-d, then c[k, i] is a coefficient for (x-x[i])**(3-k) on the segment between x[i] and x[i+1].

所以在您的示例中,第一段的系数 [x1, x2] 将在第 0 列:

  • y1 将是 s.c[3, 0]
  • b1 将是 s.c[2, 0]
  • c1 将是 s.c[1, 0]
  • d1 将是 s.c[0, 0] .

然后对于第二个片段[x2, x3] 你会得到s.c[3, 1] , s.c[2, 1] , s.c[1, 1]s.c[0, 1]对于y2b2c2>、d2 等等。

例如:

x = np.array([1, 2, 4, 5])  # sort data points by increasing x value
y = np.array([2, 1, 4, 3])
arr = np.arange(np.amin(x), np.amax(x), 0.01)
s = interpolate.CubicSpline(x, y)

fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.plot(x, y, 'bo', label='Data Point')
ax.plot(arr, s(arr), 'k-', label='Cubic Spline', lw=1)

for i in range(x.shape[0] - 1):
    segment_x = np.linspace(x[i], x[i + 1], 100)
    # A (4, 100) array, where the rows contain (x-x[i])**3, (x-x[i])**2 etc.
    exp_x = (segment_x - x[i])[None, :] ** np.arange(4)[::-1, None]
    # Sum over the rows of exp_x weighted by coefficients in the ith column of s.c
    segment_y = s.c[:, i].dot(exp_x)
    ax.plot(segment_x, segment_y, label='Segment {}'.format(i), ls='--', lw=3)

ax.legend()
plt.show()

enter image description here

关于Python/SciPy : How to get cubic spline equations from CubicSpline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458414/

相关文章:

python - 为什么Python中没有忽略特殊变量?

python - 从双指针(来自 CythonGSL)获取 numpy ndarray (查看,而不是复制)

python - pandas - 数据框列值的线性回归

machine-learning - 如何使用 scipy.minimize 最小化套索损失函数?

Python:有效替换子字符串

python - 给定输入 10,print(sum) 会产生什么输出?

python - 带 WPF 的 IronPython 中的消息框

python - 如何在 Python 中旋转数组?

python - 如何从 Numpy 的 polyfit 推导出方程?

python - 如何在 Python 中从 z、p、k 中找到增益 g