You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scipy Lagrange插值报除零错误且多项式系数为无穷如何解决

问题排查结果

直接原因:输入x数组存在未被检出的重复值

你提供的30个x样本中,索引为26和29的两个值均为302.487,去重后仅剩余29个唯一值,完全符合拉格朗日插值除零错误的触发条件。拉格朗日基函数的分母项为x_i - x_j,两个x坐标完全相等时会直接触发除零,最终返回无穷值的多项式系数。
你可以通过以下代码验证重复值:

import numpy as np
x = np.array([273.324,285.579,309.292,279.573,297.427,290.681,276.621,293.586,283.463,284.674,273.904,288.064,280.125,294.269,288.51,285.898,273.419,273.023,281.754,281.546,283.21,303.399,297.392,293.359,306.404,356.285,302.487,280.586,299.487,302.487])
print("原始x长度:", len(x))
print("去重后x长度:", len(np.unique(x)))
print("重复的x值:", [v for v in np.unique(x) if np.sum(x == v) > 1])

额外注意:拉格朗日插值的数值稳定性限制

即使删除重复值,30个节点的高阶拉格朗日插值也存在严重的数值不稳定问题,浮点计算误差会被指数级放大,仍然大概率得到异常的系数结果。生产场景中不建议使用节点数超过10的拉格朗日插值,优先选择三次样条插值等更稳定的方案。

修复代码示例

import numpy as np
from scipy.interpolate import CubicSpline

# 原始数据处理
x = out["x"].round(decimals=3)
y = out["y"].round(decimals=3)
# 去重
_, idx = np.unique(x, return_index=True)
x_unique = x[idx]
y_unique = y[idx]
# 按x升序排序(样条插值要求输入x严格递增)
sort_idx = np.argsort(x_unique)
x_sorted = x_unique[sort_idx]
y_sorted = y_unique[sort_idx]
# 插值计算
pol = CubicSpline(x_sorted, y_sorted)
print(pol)

内容的提问来源于stack exchange,提问作者wladyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:09:02