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

如何解决多项式拟合时“SVD did not converge in Linear Least Squares”报错

报错原因

Excel中的空白单元格会被pandas自动识别为NaN空值,np.polyfit执行最小二乘多项式拟合时要求输入的x、y序列无空值,空值会导致矩阵计算阶段SVD分解失败,触发对应报错。

解决方法

只需要在拟合前对数据做空值清洗即可,有两种常用处理方案:

  • 方案1:直接删除s、c、cm三列中任意一列存在空值的整行数据,适合空值很少、数据量充足的场景
  • 方案2:分别提取两组拟合对应的非空配对数据,某一列的空值不会影响另一组拟合的数据量,适合尽量保留有效数据的场景
修改后可运行代码

这里以灵活度更高的方案2为例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

xls = pd.ExcelFile('/UsersAll_My_Files/Projects/output_file/s_energy_lcto.xlsx')
name = pd.read_excel(xls, 'energy', skiprows=[0])
newname = name[['s', 'c', 'cm']]

# 新增空值清洗逻辑:分别提取两组拟合的有效配对数据
df_c = newname[['s','c']].dropna()
p1 = np.polyfit(df_c['s'], df_c['c'], 2)
f1 = np.poly1d(p1)

df_cm = newname[['s','cm']].dropna()
p2 = np.polyfit(df_cm['s'], df_cm['cm'], 2)
f2 = np.poly1d(p2)

x = np.linspace(-0.055, 0.055, 100)

# 绘图也使用清洗后的有效数据
plt.plot(df_c['s'], df_c['c'], 'ro', label="C")
plt.plot(df_cm['s'], df_cm['cm'], 'gv', label="Cm")

plt.plot(x, f1(x), 'r')
plt.plot(x, f2(x), 'g')
# 原代码可补充以下两行展示图例和图像
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:48:02