为什么会出现尺寸上的三次样条误差?

问题描述

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()

上面的代码将起作用