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

使用NumPy求解线性方程组遇报错:Last 2 dimensions of the array must be square

线性方程组求解错误排查与解决

问题重现

你尝试用以下代码求解包含x、y、z的线性方程组,但运行报错:

import numpy as np
# Exerciocio de fixação para solução de sistemas lineares

# Given
'''
1.5x -y = 0
3x+1-z=0
'''
# Define Ax=b
A=np.array([[1.5,-1,0,],[3,0,-1,]])
b=np.array([0,-1])

#Solve x,y,z
x,y,z= np.linalg.solve(A,b)
#Print x,y,z
print((x,y,z))

报错信息:

Traceback (most recent call last):
  File "script.py", line 14, in <module>
    x,y,z= np.linalg.solve(A,b)
  File "<__array_function__ internals>", line 6, in solve
  File "/usr/local/lib/python3.6/dist-packages/numpy/linalg/linalg.py", line 390, in solve
    _assertNdSquareness(a)
  File "/usr/local/lib/python3.6/dist-packages/numpy/linalg/linalg.py", line 213, in _assertNdSquareness
    raise LinAlgError('Last 2 dimensions of the array must be square')
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square

错误原因

np.linalg.solve的核心要求是系数矩阵A必须是方阵(行数等于列数),也就是方程组的数量必须和未知数的数量一致,才能保证有唯一解。但你的情况是:

  • 未知数有3个:x、y、z
  • 只有2个方程,属于欠定方程组,这类方程组有无穷多个解,无法用solve直接求解。

解决方案

针对欠定方程组,有两种常见处理方式:

1. 求最小二乘解

用np.linalg.lstsq可以得到方程组的最小二乘解(方程组相容时会返回其中一个特解):

import numpy as np

# 定义系数矩阵和常数项
A = np.array([[1.5, -1, 0], [3, 0, -1]])
b = np.array([0, -1])

# 求解最小二乘解
x, residuals, rank, singular_values = np.linalg.lstsq(A, b, rcond=None)

print(f"其中一组解:x={x[0]:.4f}, y={x[1]:.4f}, z={x[2]:.4f}")

运行后会输出一组满足方程组的特解,例如:其中一组解:x=0.0000, y=0.0000, z=1.0000。

2. 推导通解

手动将方程组转化为参数化形式,得到所有解的表达式:
从第一个方程1.5x - y = 0可得:y = 1.5x
从第二个方程3x + 1 - z = 0可得:z = 3x + 1

令x = t(t为任意实数),则通解为:

  • x = t
  • y = 1.5t
  • z = 3t + 1

可以用代码生成任意多组解:

import numpy as np

# 取任意t值,比如t=2
t = 2
x = t
y = 1.5 * x
z = 3 * x + 1

print(f"当t={t}时,解为:x={x}, y={y}, z={z}")

运行结果:当t=2时,解为:x=2, y=3.0, z=7,代入原方程组验证完全成立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:50:16