You need to enable JavaScript to run this app. 用SciPy LU分解解线性方程时报expected square matrix错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

用SciPy LU分解解线性方程时报expected square matrix错误如何解决

LU分解报错排查与修复

核心报错根源

  • scipy.linalg.lu_factor 仅接受方阵作为输入,要求矩阵的行数与列数完全相等
  • 之前小矩阵运行正常,是因为手动拼接元素时刚好凑成了行列数相等的方阵;本次构建自定义大矩阵时出现了维度错配:
    • 每一行定义了17个元素,对应列数为17
    • 矩阵一共定义了10行数据
    • 最终A的shape为(10, 17),属于非方阵,直接触发ValueError: expected square matrix报错

分步修复方案

  • 补全矩阵维度
    根据实际物理模型调整A的结构,保证行列数完全相等(即n行n列)。手数元素很容易出现行列数不匹配的问题,可以直接打印矩阵shape快速定位:
    # 打印矩阵实际维度,替代手动计数
    print(A.shape)
    
    构建大型稀疏矩阵时,推荐先初始化指定大小的全零矩阵,再按位置赋值非零元素,避免手动拼接行时出现元素数偏差:
    # 示例:初始化17*17的全零方阵
    A = np.zeros((17, 17))
    # 按方程逐行填充对应位置的数值
    A[0, 0] = math.sin(math.pi / 4)
    A[0, 1] = 1
    A[1, 0] = -math.sin(math.pi / 4)
    # ... 依次填充所有非零元素
    
  • 匹配右端向量B的维度
    修正后的方阵A为n行n列时,向量B的长度必须为n。当前B的长度为10,调整A的行数后,需要同步补充对应行的方程右端常数项,否则会触发矩阵维度不匹配的报错。
  • 修正三角函数的计算逻辑
    代码中math.sin(45)的输入单位为弧度,并非角度值,计算得到的结果和预期的45度正弦值偏差极大。如果需要计算45度的正弦值,需要先将角度转为弧度:
    sin_45deg = math.sin(math.pi / 4)
    

注意事项

  • LU分解仅适用于方阵求解,若实际模型对应的是超定/欠定方程组,不能直接使用lu_factor,需要改用最小二乘类求解接口
  • 大型矩阵求解时可以搭配稀疏矩阵存储格式,减少内存占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 15:15:05