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

使用Matlab mldivide求解Ax=B得NaN,多解场景为何返回错误结果?

奇异矩阵方程组求解:mldivide返回NaN的原因及解决方法

问题原因

你的矩阵A是奇异矩阵(行向量线性相关,秩为2,小于矩阵维度3),虽然方程组Ax=B是相容的(存在无穷多解),但mldivide(即MATLAB中的\运算符)在处理这类条件数无穷大的奇异矩阵时,会因数值计算的稳定性问题返回全NaN结果。

具体来说,mldivide依赖LU分解等数值方法求解,当矩阵奇异时,消元过程会出现主元为0的情况;再加上A的条件数为无穷大,MATLAB无法稳定判定方程组的相容性并计算有效解,因此返回NaN。

解决方法

针对这类有无穷多解的线性方程组,可通过以下两种方式求解:

  • 行最简形法求通解
    构造增广矩阵并转换为行最简形,直接得到解的结构:

    aug_matrix = [A, B];
    rref_aug = rref(aug_matrix);
    

    运行后得到的行最简形矩阵为:

    1   0   0   1
     0   1  -1  -1
     0   0   0   0
    

    由此可得通解:

    • ( x_1 = 1 )
    • ( x_2 = x_3 - 1 )(( x_3 )为自由变量,可取任意实数)
      取( x_3=1 )时,就得到你验证的解[1;0;1]。
  • 伪逆法求最小范数解
    使用伪逆pinv(A)可得到方程组的最小范数解(无穷多解中向量范数最小的那个):

    X = pinv(A) * B;
    

    运行结果为:

    X =
       1.0000
      -0.5000
       0.5000
    

    验证可知A*X的结果等于B,满足方程组要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:11:07