순위와 관련된 이런 종류의 행렬 방정식을 푸는 방법

Aug 20 2020

행렬의 순위 관계 방정식을 해결하기 위해 여기 에 게시물을 보았습니다 .

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]

사용자 정의 기능 symbolicMatrixRankSjoerd 미트는 중대하다. 그러나 위의 방법으로 다음 행렬 방정식을 풀 수 없다는 것을 알았습니다.

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]

행렬 방정식의 종류를 풀 수 있도록 위 코드를 어떻게 개선 할 수 있습니까?

참고 : 다음 문제는 2003 년 중국 대학원 수학 입학 시험 (1 차) 의 10 번째 문제입니다 .

이 질문에 대한 참조 답변은입니다 a + b + c = 0.

답변

1 SjoerdSmit Aug 24 2020 at 17:33

나는 단지 몇 가지 조합이 Reduce있고 Simplify읽을 수있는 것을 산출 할 때까지 특이한 값을 엉망으로 만져서 이것을 얻을 수 있었다.

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)