【问题标题】:scipy.interpolate.make_interp_spline how to retrieve all the coefficients?scipy.interpolate.make_interp_spline 如何检索所有系数?
【发布时间】:2020-12-20 01:29:32
【问题描述】:

我有以下程序:

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

我只得到 a 值的数组:

[ 1.          2.71828183  7.3890561  20.08553692]

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

【问题讨论】:

    标签: python scipy interpolation coefficients cubic-spline


    【解决方案1】:

    我建议您查看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)与多项式系数不同。

    【讨论】:

      【解决方案2】:

      给定spl = make_interp_spline(...)spl 是一个 BSpline 对象,它具有 spl.t 作为节点,spl.c 是系数 --- 在 b 样条基础中。如果你真的需要幂基中的系数,你可以评估使用PPoly.from_spline(spl)的导数。

      或者确实使用在电源基础上工作的СubicSpline。 (请参阅@bogovicj 的答案)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 2012-02-17
        • 2012-07-25
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多