如何使用 Symbolic 计算排名

How to calculate the rank with Symbolic

代码:

with(LinearAlgebra): 
mat := Matrix([[a, b, b, b, b], [b, a, b, b, b], [b, b, a, b, b],
 [b, b, b, a, b], [b, b, b, b, a]]);
Rank(mat);

函数Rank只是给了我5的结果,但实际上:

when a=b=0,rank(mat)=0
when a=b≠0,rank(mat)=1
when a+4b=0,rank(mat)=4
when a≠b&&a≠-4b,rank(mat)=5

枫计算的是另一种条件吗?

在大多数情况下,Maple 将此示例中的 a 和 b 等符号视为通用符号(例如,它们不满足任何代数方程式,例如 a-b=0 等),并且在这些假设下,秩为 5。这不是一个完全无用的结果,因为可能有一个不是一般满秩的符号矩阵。

如果你想得到所有的情况,我想你可能必须继续手动计算符号 determinants/minors 并找到它们的根。例如

d5 := LinearAlgebra:-Determinant(mat);
s := {solve(d5, a)}; # two solutions
mat1 := eval(mat, a = s[1]); # a=b
LinearAlgebra:-Rank(mat1); # rank=1
mat2 := eval(mat, a = s[2]); # a=-4*b
LinearAlgebra:-Rank(mat2); # rank=3

要深入到较低秩的情况,您需要开始查看 mat1 和 mat2 的次要项的零点。由于 mat1 是等级 1,因此您必须查看是什么使其 1x1 未成年人为零,但由于 mat1 具有所有相同的条目,因此该条件只是 b=0.

你仍然需要检查 mat2,因为可能有一个 rank=2 的情况,或者 b 上的其他条件给你排名 1 或 0。

minors := { seq(seq(LinearAlgebra:-Minor(mat2, i, j), i=1..5), j=1..5)) };
s2 := solve(minors, b); # {b=0}
LinearAlgebra:-Rank( eval(mat2, s2) ); # 0

这向我们展示了 a=-4*b 时唯一较低等级的可能性是 b=0 时,因此与 a=b 时相同的等级 0 条件。以上就是所有情况。

如果情况并非如此,那么您将不得不查看 3x3 和 2x2 未成年人,这需要明智地使用 LinearAlgebra:-SubMatrix 命令。在一般情况下,这种方法可能会导致大量案例拆分,并且几乎可以肯定有一种更好的方法可以更普遍地重复使用次要计算。

如果您有理由相信您的矩阵一般可对角化,那么您可以查看特征多项式的系数消失的位置。