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

如何用Matlab solve()获取线性方程组的完整解集而非特解

用MATLAB符号工具箱求解含自由变量的线性方程组完整解集

直接用solve()获取参数化解集的方法

当方程组未知数数量与方程数相等但存在自由变量时,只需手动指定自由变量,就能让solve()返回带参数的完整解集,无需先调用rref()检查秩。针对你的方程组,有两种实现方式:

方式1:引入自定义参数作为自由变量

syms x y z w t  % 定义参数t作为自由变量
eq1 = 2*x + z + w == 5;
eq2 = y - w == -1;
eq3 = 3*x - z - w == 0;
eq4 = 4*x + y + 2*z + w == 9;

% 求解x,y,z,将t设为参数(对应自由变量w)
sol = solve([eq1,eq2,eq3,eq4], [x,y,z], 'Parameters', t)

输出结果为参数化形式:

sol = struct with fields:
    x: t
    y: t - 1
    z: 3*t - 5

完整解集可表示为:

  • x = t
  • y = t - 1
  • z = 3t - 5
  • w = t(t为任意实数)

方式2:直接指定现有变量为自由变量

无需额外定义参数,直接指定某个变量作为自由变量即可:

syms x y z w
eq1 = 2*x + z + w == 5;
eq2 = y - w == -1;
eq3 = 3*x - z - w == 0;
eq4 = 4*x + y + 2*z + w == 9;

% 指定w为自由变量,求解所有变量
sol = solve([eq1,eq2,eq3,eq4], [x,y,z,w], 'FreeVariables', {'w'})

输出结果会直接用w作为自由参数:

sol = struct with fields:
    w: w
    x: w
    y: w - 1
    z: 3*w - 5

为什么默认solve()只返回特解?

MATLAB的solve()函数默认逻辑是:当未知数数量等于方程数时,优先假设方程组有唯一解,会自动代入自由变量的特定值(比如0)返回一个特解。只有当未知数数量明显多于方程数时,才会自动引入参数返回完整解集。但当方程组存在线性相关方程(即系数矩阵秩小于未知数数量),即使未知数和方程数相等,也需要手动指定自由变量来触发参数化求解。

无需提前用rref()判断的技巧

不用提前调用rref()检查秩,直接通过solve()的输出即可判断解的情况:

  • 如果返回的解是具体数值,说明方程组有唯一解;
  • 如果返回的解包含未被赋值的变量(或自定义参数),说明存在自由变量,解集有无穷多组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:52:42