2

I saw a post here to solve the rank relation equation of matrix:

symbolicMatrixRank[mat_, assumptions_] := Assuming[assumptions,
  Simplify @ Total @ Map[
    Boole @ Simplify @ Reduce[ConditionalExpression[#, $Assumptions] != 0]&,
    SingularValueList[mat]
  ]
];

adj[m_](adjoint matrix):= Map[Reverse, Minors[Transpose[m], Length[m] - 1], {0, 1}]* Table[(-1)^(i + j), {i, Length[m]}, {j, Length[m]}]

Reduce[symbolicMatrixRank[adj[{{a, b, b}, {b, a, b}, {b, b, a}}], Element[a, Reals] && Element[b, Reals]] == 1]

The custom function symbolicMatrixRank of Sjoerd Smit is great. But I find that the following matrix equation cannot be solved by the above method:

Reduce[symbolicMatrixRank[{{a, 2*b}, {b, 2*c}, {c, 2*a}}, 
       Element[a, Reals] && Element[b, Reals] && Element[c, Reals]] == 
     symbolicMatrixRank[{{a, 2*b, -3*c}, {b, 2*c, -3*a}, {c, 
     2*a, -3*b}}, 
       Element[a, Reals] && Element[b, Reals] && Element[c, Reals]] == 
  2]

How can I improve the above code so that I can solve the kind of matrix equation?

Note: The following questions are from the 10th question of the 2003 Chinese Graduate Mathematical Entrance Examination (first set).

The reference answer of this question is a + b + c = 0.

1 Answers1

1

I only managed to get this one by just messing around with the singular values until some combination of Reduce and Simplify yielded something legible:

mat1 = {{a, 2*b}, {b, 2*c}, {c, 2*a}}
mat2 = {{a, 2*b, -3*c}, {b, 2*c, -3*a}, {c, 2*a, -3*b}}
assumptions = {a, b, c} \[Element] Reals

rank1 = Assuming[assumptions, Total[ Boole @ Simplify @ Reduce @ Reduce[# != 0 && assumptions] & /@ SingularValueList[mat1] ] ] rank2 = Assuming[assumptions, Total[ Boole @ Simplify @ Reduce @ Reduce[# != 0 && assumptions] & /@ SingularValueList[mat2] ] ]

Simplify[Reduce[assumptions && rank1 == rank2], Assumptions -> assumptions]

(c != 0 && ((a == c && b == c) || a + b + c == 0)) || (a + b == 0 && c == 0)

Sjoerd Smit
  • 23,370
  • 46
  • 75