Scipy CubicSpline与第三方工具三次样条系数差异原因咨询
三次样条系数不一致的原因解析
1. 多项式形式定义差异
Scipy的CubicSpline输出的系数是基于偏移变量 ( t = x - x_i )的三次多项式,每个区间 ([x_i, x_{i+1}]) 的表达式为:
[ S_i(x) = c_{3,i}(x-x_i)^3 + c_{2,i}(x-x_i)^2 + c_{1,i}(x-x_i) + c_{0,i} ]
而你提到的工具输出的是基于原始x变量的标准三次多项式 ( ax^3 + bx^2 + cx + d )。
2. 边界条件设置不同
你的代码明确指定了bc_type=((2,0),(2,0)),即自然三次样条(两端二阶导数为0)。而工具网站默认使用的边界条件大概率不是这个(比如可能是 clamped样条,即指定两端一阶导数,或其他默认规则),这是系数差异的核心原因。
验证Scipy系数与工具的匹配性
运行你的代码后,myCS.c的输出为:
[[-0.5 0.5] [ 0. -3. ] [ 1.5 4.5] [ 0. -1. ]]
- 第一个区间
[0,1]的系数[-0.5, 0, 1.5, 0],转换为标准多项式就是-0.5x³ + 0x² +1.5x +0,和工具给出的第一个区间系数完全一致。 - 第二个区间
[1,2]的系数是基于x-1的偏移多项式,展开后得到的标准多项式与工具输出不同,本质是因为工具用了不同的边界条件。
3. 系数输出顺序确认
Scipy的CubicSpline.c按三次项、二次项、一次项、常数项的顺序排列,每一列对应一个区间;工具网站的输出顺序也是同样的高次到低次,顺序本身没有问题,差异只来自边界条件和多项式的变量定义(偏移vs原始x)。
内容的提问来源于stack exchange,提问作者little lion
相关产品推荐
相关产品推荐

