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

NumPy数组定义疑问:线性方程组求解结果差异原因探究

问题原因分析及NumPy数组正确定义方式

差异原因

两种求解结果出现偏差的核心问题是最初定义的矩阵A不符合线性方程组系数矩阵的要求,具体分为两种常见情况:

  • 矩阵形状错误:把本该是(n,n)的二维方阵,误定义成了一维数组(如(9,))或非方阵(如(1,9))。np.linalg.solve要求输入的A必须是n阶二维方阵,b是长度为n的一维数组或n×1的列向量,若A形状错误,函数会错误解析方程组结构,导致结果偏离。
  • 元素排列错误:将系数矩阵的行和列搞反(即使用了原矩阵的转置)。此时solve求解的是转置矩阵对应的方程组,自然和原方程组的解不同;而你用矩阵逆求解时,可能手动使用了正确的行排列矩阵,因此得到正确结果。

举个实际例子:假设正确的3×3系数矩阵是

A_correct = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 10]
])
b = np.array([15, 36, 64])

用逆求解np.linalg.inv(A_correct) @ b得到[5., 4., 2.],np.linalg.solve(A_correct, b)也会返回正确结果。但如果误将A定义为转置矩阵A_wrong = A_correct.T,再用solve求解,得到的结果就会完全错误,和你遇到的[-29., 6., 38.]类似。

NumPy数组正确定义方式

定义线性方程组的系数矩阵和右侧向量时,需严格遵循以下规范:

  • 系数矩阵A:必须是二维方阵,每个子列表代表方程组的一行(即一个方程的系数),元素顺序与方程中未知数的顺序一致。示例:
    import numpy as np
    # 3阶线性方程组的系数矩阵
    A = np.array([
        [a11, a12, a13],  # 第一个方程:a11*x1 + a12*x2 + a13*x3 = b1
        [a21, a22, a23],  # 第二个方程:a21*x1 + a22*x2 + a23*x3 = b2
        [a31, a32, a33]   # 第三个方程:a31*x1 + a32*x2 + a33*x3 = b3
    ])
    
  • 右侧向量b:可以是一维数组(推荐)或二维列向量,元素顺序与方程顺序一一对应:
    # 一维向量(形状(3,))
    b = np.array([b1, b2, b3])
    # 或二维列向量(形状(3,1))
    b = np.array([[b1], [b2], [b3]])
    
  • 验证矩阵形状:定义后可通过print(A.shape)检查,确保输出为(n,n)(n为方程组未知数个数),避免形状错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:15:24