【问题标题】:Scipy Interpolation CubicSpline BoundariesScipy插值三次样条边界
【发布时间】:2018-12-27 14:40:26
【问题描述】:

我在使用 scipy.interpolate.CubicSpline 函数时遇到问题。 这是我的代码:

CS1 = CubicSpline(T,A,bc_type='not-a-knot',extrapolate=bool, axis=1)

结果: CS1 =

[-8.34442117e+03 -6.94866126e+03 -5.71682333e+03 -4.63872647e+03
 -3.70418976e+03 -2.90303229e+03 -2.22507315e+03 -1.66013142e+03
 -1.19802617e+03 -8.28576513e+02 -5.41601516e+02 -3.26920268e+02
 -1.74351855e+02 -7.37153621e+01 -1.48298738e+01  1.24855245e+01
  1.84117475e+01  1.31297102e+01  6.82032749e+00  9.66451413e+00
  3.15397607e+01  7.05279383e+01  1.09387991e+02  1.32530056e+02
  1.36799756e+02  1.22858734e+02  9.60947464e+01  6.66210660e+01
  4.28224903e+01  2.64229282e+01  1.75832317e+01  1.45176021e+01
  1.39435432e+01  1.33609464e+01  1.23801442e+01  1.09650786e+01
  9.27738095e+00  7.59606003e+00  6.29249366e+00  5.91452686e+00
  6.79882387e+00  7.57144653e+00  6.13515774e+00  2.70590543e+00
  9.34668162e-01  3.86336659e+00  9.73615276e+00  1.52487556e+01
  1.90469811e+01  2.20000000e+01]

有负值,我觉得很奇怪,因为原始数据只是正值:

[7.0,
 12.0,
 20.0,
 111.0,
 132.0,
 68.0,
 22.0,
 14.0,
 12.0,
 8.0,
 6.0,
 7.0,
 1.0,
 13.0,
 22.0,
 23.0,
 5.0,
 3.0,
 5.0,
 65.0,
 236.0,
 234.0,
 105.0,
 152.0,
 466.0,
 401.0,
 157.0,
 51.0,
 21.0,
 13.0,
 11.0,
 19.0,
 15.0,
 11.0,
 9.0,
 15.0,
 86.0,
 276.0,
 423.0,
 291.0,
 108.0,
 36.0,
 22.0,
 21.0,
 16.0,
 16.0,
 13.0,
 9.0]

而 T 只是一个从 1 到 48 的列表(48 是 A 和 T 的长度) 我觉得问题出在边界问题上,但问题才刚刚开始……

有什么想法吗?

【问题讨论】:

    标签: python-3.x scipy interpolation boundary cubic-spline


    【解决方案1】:

    这里没有什么奇怪的:正数据的三次样条可以得到负值,无论边界条件是什么。如果需要保持积极性,可以选择分段线性插值(1 次样条)。其他选项在How can I find a non-negative interpolation function? 中讨论

    这是为什么会发生这种情况的说明:spl = CubicSpline([-2, -1, 1, 2], [10, 1, 1, 10])

    这条样条曲线拟合给定点的抛物线。抛物线在两点之间的中间陷入负区域。

    在您的示例中,这发生在边界附近并不是很重要;它可以发生在任何地方。

    【讨论】:

    • 感谢您的回答。问题是:为什么负值在 0 之前开始,而我的数据在 0 之后开始?两张图的x轴不相同。
    • 我发现了问题,是我创建了一个 linspace 的时候。我没有考虑边界,因此边界错误哈哈。无论如何谢谢你的回答,它也为我清除了关于三次样条的事情!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2019-08-05
    相关资源
    最近更新 更多