繁体   English   中英

scipy.interpolate.make_interp_spline 如何检索所有系数?

[英]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]

但是,我缺少bcd系数的数组。 我如何提取这些? 还是我遗漏了一些步骤? 我阅读了关于 make_interp_spline 的 scipy 文档,但我不明白如何获得bcd系数。

我建议检查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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM