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

多项式逼近遇LinAlgError:维度不兼容,求绘图解决方案

最小二乘法拟合多项式图像报错解决

错误原因分析

第一个报错(LinAlgError: Incompatible dimensions)

代码中m2, c2 = np.linalg.lstsq(m1, s1, rcond = None)[0]属于多余且错误的操作:

  • m1是(6,2)的矩阵(对应6个样本、2个特征:x和常数项)
  • s1是线性拟合得到的系数数组,形状为(2,),而np.linalg.lstsq要求第二个参数的行数必须与第一个参数的行数一致(即6行),维度不匹配直接触发报错
  • 实际上s1已经包含了线性拟合的斜率和截距,无需再次调用拟合函数

第二个报错的问题

代码里s2 = np.linalg.lstsq(m2, s2, rcond = None)[0]同样错误:

  • s2是二次拟合的系数数组(形状(3,)),m2是(6,3)的矩阵,两者维度不匹配,无法执行拟合计算
  • 这行代码无实际意义,二次拟合系数已经通过之前的s2 = np.linalg.lstsq(m2, y, rcond = None)[0]得到,无需重复操作

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt

# 实验数据
x = np.array([1.0, 1.2, 1.4, 1.6, 1.8, 2.0])
y = np.array([2.0, 6.0, 4.0, 4.0, 2.0, 5.0])

# 构造线性拟合设计矩阵:[x, 1]
m1 = np.vstack((x, np.ones(len(x)))).T
# 构造二次拟合设计矩阵:[x², x, 1]
m2 = np.vstack((x**2, x, np.ones(len(x)))).T

# 最小二乘法求解系数
s1 = np.linalg.lstsq(m1, y, rcond=None)[0]  # 线性拟合系数:[斜率m, 截距c]
s2 = np.linalg.lstsq(m2, y, rcond=None)[0]  # 二次拟合系数:[a, b, c],对应y=ax²+bx+c

# 打印系数与标准差
print("线性拟合系数:", s1)
print("线性系数标准差:", np.std(s1))
print("二次拟合系数:", s2)
print("二次系数标准差:", np.std(s2))

# 生成密集x值,让拟合曲线更平滑
x_fit = np.linspace(min(x)-0.2, max(x)+0.2, 100)

# 绘制图像
plt.figure(figsize=(8, 6))
plt.plot(x, y, 'o', label='原始数据', markersize=10)
plt.plot(x_fit, s1[0]*x_fit + s1[1], 'r-', label='线性拟合')
plt.plot(x_fit, s2[0]*x_fit**2 + s2[1]*x_fit + s2[2], 'b-', label='二次拟合')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.show()

代码说明

  • 移除了未使用的pandas相关导入
  • 直接从已求解的s1、s2中提取拟合系数,避免重复拟合导致的维度错误
  • 生成密集的x_fit值绘制拟合曲线,提升曲线平滑度
  • 同时展示原始数据、线性拟合、二次拟合结果,满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:40:26