如何为`scipy.interpolate.splev`指定特定的x值?

时间:2019-04-23 09:40:14

标签: python scipy interpolation bspline

如何在特定的x点插值hysteresis loop?关于使用scipy.interpolate.splprep进行B样条插值的SOF,可以使用多个相关的questions/answers(其他问题herehere)。但是,我在非常相似(但不完全相同)的x位置处有数百个磁滞回线,我想在特定的x坐标上对所有这些位置执行B样条插值。

接受previous example

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

x = np.array([23, 24, 24, 25, 25])
y = np.array([13, 12, 13, 12, 13])

# append the starting x,y coordinates
x = np.r_[x, x[0]]
y = np.r_[y, y[0]]

# fit splines to x=f(u) and y=g(u), treating both as periodic. also note that s=0
# is needed in order to force the spline fit to pass through all the input points.
tck, u = interpolate.splprep([x, y], s=0, per=True)

# evaluate the spline fits for 1000 evenly spaced distance values
xi, yi = interpolate.splev(np.linspace(0, 1, 1000), tck)

# plot the result
fig, ax = plt.subplots(1, 1)
ax.plot(x, y, 'or')
ax.plot(xi, yi, '-b')
plt.show()

enter image description here

是否可以为interpolate.splev提供特定的x值?我得到了意外的结果:

x2, y2 = interpolate.splev(np.linspace(start=23, stop=25, num=30), tck)

fig, ax = plt.subplots(1, 1)
ax.plot(x, y, 'or')
ax.plot(x2, y2, '-b')
plt.show()

enter image description here

1 个答案:

答案 0 :(得分:2)

b样条曲线给出给定u(介于0和1之间)的x和y位置。 对于给定的x位置获取y位置涉及求解逆。由于可能有许多y与一个x对应(在给定的示例中,地方有4个y,例如在x=24)。

获取两个限制之间的(x,y)的{​​{1}}列表的一种简单方法是创建过滤器:

x

resulting plot