为什么interpolate.splev()不评估我在x参数中提供的点?

时间:2019-12-04 13:12:27

标签: python scipy

我想评估样条线,该样条线由xy在第三点pointToEvaluate(此处为0)处定义,但不评估该点我通过了。

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

x = (-1, 0, 1, 2, 3)
y = (1, 0, 1, 4, 9)
tck, u = interpolate.splprep([x,y], s=0)

pointToEvaluate = 0
xPoints, yPoints = interpolate.splev(pointToEvaluate, tck)

fig, ax = plt.subplots()
ax.plot(x, y, 'r-')
ax.plot(xPoints, yPoints, 'bo')
plt.show()
print(xPoints, yPoints)

它应将(xPoints,yPoints)的值打印为(0.0,0.0),但返回:(-1.0000000000000002 1.0)。在图像中: Red are my own lines. The blue point is the value, which should be evaluated on x

我显然错误地使用了interpolate.splev(),但我不知道在哪里。

1 个答案:

答案 0 :(得分:0)

我设法使其与splrep(splprep的一维版本)一起使用。

对于splprep,splev说

  

x:array_like

     

要返回平滑样条或其衍生值的点的数组。如果从splprep返回tck,则应给出参数值u。

那么,我猜想有人需要向splprep提供u关键字

  

u:类似array_,可选

     

参数值的数组。如果未给出,则这些值将自动计算为M = len(x [0]),其中

     

v [0] = 0

     

v [i] = v [i-1] +距离(x [i],x [i-1])

     

u [i] = v [i] / v [M-1]

但是,我无法设法以这种方式工作...

此外,还有更新的make_interp_spline(外观here)。后者和splrep的示例均提供:

import matplotlib.pyplot as plt
from scipy import interpolate

x = (-1, 0, 1, 2, 3)
y = (1, 0, 1, 4, 9)
tck = interpolate.splrep(x, y, s=0)
b = interpolate.make_interp_spline(x, y)
pointsToEvaluate = (0,)
yPoints1 = interpolate.splev(pointsToEvaluate, tck)
yPoints2 = b(pointsToEvaluate)
fig, ax = plt.subplots()
ax.plot(x, y, 'r-')
ax.plot(pointsToEvaluate, yPoints1, 'bo', markersize=15)
ax.plot(pointsToEvaluate, yPoints2, 'ws')
plt.show()

并显示

enter image description here