![](/img/trans.png)
[英]scipy.interpolate.make_interp_spline gives “x and y are incompatible” error
[英]scipy.interpolate.make_interp_spline how to retrieve all the coefficients?
我有以下程序:
nknots = 4
x_i = [0, 1, 2, 3]
y_i = [1, np.exp(1), np.exp(2), np.exp(3)]
coeff = interpolate.make_interp_spline(x_i, y_i, bc_type="natural")
我想使用坐标由 x_i 和 y_i 数组给出的节点构造三次样条。 但是,我很难获得所有系数。 三次样条函数具有以下形式:
y_i(x) = a + b*(x - x_i) + c*(x - x_i)^2 + d*(x - x_i)^3
当我做
print(coeff(x_i))
我只得到一个值的数组:
[ 1. 2.71828183 7.3890561 20.08553692]
但是,我缺少b 、 c和d系数的数组。 我如何提取这些? 还是我遗漏了一些步骤? 我阅读了关于 make_interp_spline 的 scipy 文档,但我不明白如何获得b 、 c和d系数。
我建议检查interpolate.CubicSpline
。 如果您追求的是多项式系数,那就方便多了。 使用你的变量:
spl = interpolate.CubicSpline( x_i, y_i )
spl.c
array([[-1.57973952e-01, 2.93118310e-01, -1.35144359e-01],
[ 1.11022302e-16, -4.73921855e-01, 4.05433076e-01],
[-3.01723742e-01, -7.75645598e-01, -8.44134377e-01],
[ 1.00000000e+00, 5.40302306e-01, -4.16146837e-01]])
有关分段多项式系数的存储方式,请参阅PPoly
文档。
附录:可以从make_interp_spline
的输出中提取系数,但这
并不简单,
它需要@ev-br 描述的额外步骤,因为B样条的“系数”(强调 B)与多项式系数不同.
给定spl = make_interp_spline(...)
, spl
是一个 BSpline 对象,它以spl.t
作为结点,以spl.c
作为系数 --- 在 b 样条基础上。 如果您确实需要幂基中的系数,则可以评估使用PPoly.from_spline(spl)
的导数。
或者确实使用在幂基础上工作的СubicSpline
。 (见@bogovicj 的回答)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.