问题描述
def f(x):
return 1/(1 + (x**2))
from scipy.interpolate import CubicSpline
a = -1
b = 1
n = 5
xArray = np.linspace(a,b,n)
yArray = f(xArray)
x = np.linspace(a,nPts)
y = CubicSpline(xArray,yArray,x)
plt.plot(x,y,label="Interpolation," + str(n) + " points")
我想知道以这种方式使用三次样条的问题是什么。我收到的错误消息指出尺寸错误?
ValueError:x和y必须具有相同的第一维度,但形状为(101,)和(1,
解决方法
我在这里看到您的误解源于对'extrapolate'关键字的误解,引用了CubicSpline的文档
推算{bool,“定期”,无},可选 如果是 bool ,则确定是否外推到界外点 根据第一个和最后一个间隔,或返回NaN。如果是“定期” 使用定期外推法。如果为None(默认),则设置推断 为bc_type ='periodic'设置为'periodic',否则为True。
是一个布尔值,而不是您要内插和/或外推的点的列表。
正确的用法是先拟合一个CubicSpline,然后使用它进行内插或外推
def f(x):
return 1/(1 + (x**2))
from scipy.interpolate import CubicSpline
import numpy as np
import matplotlib.pyplot as plt
a = -1
b = 1
n = 5
xArray = np.linspace(a,b,n)
yArray = f(xArray)
x = np.linspace(a,101)
cs = CubicSpline(xArray,yArray,True) # fit a cubic spline
y = cs(x) # interpolate/extrapolate
plt.plot(x,y,label="Interpolation," + str(n) + " points")
plt.show()
上面的代码将起作用