MATLAB:使用带有超定系统的符号变量的反斜杠运算符

计算科学 matlab 线性求解器 符号计算
2021-12-26 09:17:57

我在 MATLAB 中有一个超定系统(方程太多),表示为 Ax=b。当我尝试使用 A\b 解决它时,我收到错误:

Warning: System is inconsistent. Solution does not exist.

但是,如果我用值代替符号变量,系统就可以解决,并且给出的答案与我手工计算的结果相匹配。MATLAB 是否无法处理涉及符号变量的超定系统?

1个回答

tl;dr: 主要使用 MATLAB 进行数值计算,而不是符号计算。

MATLAB 最初被设计为一个数值计算包,后来添加了它的符号功能。此外,作为一般规则,计算具有具体值的数量比计算抽象中的相同数量更容易。例如,对于 5 次或更高阶的单个变量的一般多项式方程,不存在封闭形式的解。鉴于这两种趋势,预期对于任何给定的符号表达式和 MATLAB 操作,MATLAB 不太可能返回符号解。

对于超定线性系统的特定情况,DaveP 指出,MATLAB 反斜杠正在执行最小二乘,因此它正在执行 QR 分解,然后是线性求解,可能通过 LU 分解。rref另一方面,将系统置于缩减排梯队形式。

原则上,该rref算法本质上是高斯消元法,可能通过选择好的枢轴来增强一些数值稳定性。除法由枢轴完成,这可能使符号计算相对简单(即使结果表达式超出了令人发指的范围)。

QR 分解可以用许多算法(改进的 Gram-Schmidt、Givens 旋转、Householder 变换)来计算。修改后的 Gram-Schmidt 可能是最简单的,并且涉及规范和划分。

启发式地,因为rref可能会产生更简单的表达式,这可能就是为什么rref有效,但反斜杠失败。在任何一种情况下,尝试将这些算法用于符号操作通常都不是一个好的策略,因为这些算法主要是为数值计算而设计的,而不是为了研究符号表达式。你能用它们来进行符号操作吗?当然。这是个好主意吗?可能不是。