gpt4 book ai didi

python - scipy splrep 的行为

转载 作者:行者123 更新时间:2023-11-28 16:46:19 25 4
gpt4 key购买 nike

我有一组数据点,想用样条函数对它们进行近似。我使用了两个不同的函数:

  1. splrep 来自 scipy
  2. 和我发现的三次样条函数here .

结果看起来像this .

代码如下:

from matplotlib.pyplot import *
from numpy import *
from scipy import interpolate
#----------------------------------------------
s = arange(257)/256.0
z = s[::-1]
b = transpose(array((z*z*z,
3*z*z*s,
3*z*s*s,
s*s*s)))
def cubicspline(c,t):
return dot(b[t],c)
#----------------------------------------------

A = array([
[ -126.041 , 246.867004],
[ -113.745003, 92.083 ],
[ 208.518997, -183.796997],
[ 278.859009, -190.552994]])

a1 = A[:,0]
a2 = A[:,1]
cs = reshape(A, (-1, 4, 2))
X = []
Y = []
#spline with cubicspline()
for (x,y) in [cubicspline(c,16*t) for c in cs for t in arange(17)]:
X.append(x)
Y.append(y)

# spline with splrep
tck = interpolate.splrep( a1, a2)

xnew = np.arange( min(a1), max(a1), 5)
ynew = interpolate.splev(xnew, tck)
plot(a1, a2, "--ob", ms = 9, label = "points")
plot(X, Y, "r", lw=2, label = "cubicspline")
plot(xnew, ynew, "g", lw=2, label = "splrep")
legend(); savefig("image.png"); show()

如您所见,splrep 的结果远不能令人满意。有人可以解释这种行为以及如何从 splrep 获得合理的近似值吗?

最佳答案

您需要定义“满意”的含义。显然,您的三次样条没有通过点进行插值,而 splrep 结果却可以(并且在这个意义上是完全令人满意的)。另请注意,您的“三次样条”实际上只是一个多项式而不是样条(样条是带有断点的多项式)。

您需要明确告诉 splrep 样条曲线不需要通过这些点 --- 传入一个非零的 s 平滑参数。如何正确选择这个,看这个问题: scipy.interpolate.UnivariateSpline not smoothing regardless of parameters

关于python - scipy splrep 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com