1
$\begingroup$

I'm trying to solve a pair of simultaneous matrix equations of the form,

$$AX + XA^\dagger + BJB^\dagger = 0,\ \ X C^\dagger + B J D^\dagger = 0,$$ where, $$J = \begin{bmatrix}1&0\\0&-1\end{bmatrix}$$

However sometimes Mathematica cannot find a solution:

$Assumptions = {s0 \[Element] Reals, s0 > 0};
Module[{a, b, c, d,
  n = 2, no = 2, X, ji = {{1, 0}, {0, -1}}},
 {a, b, c, 
   d} = {{{(-2 + s0)/(2 + s0), Sqrt[s0 (4 + s0^2)]/(2 + s0)}, {Sqrt[
     s0 (4 + s0^2)]/(2 + s0), -((2 + 3 s0)/(2 + s0))}}, {{0, 1/Sqrt[
     2 + s0]}, {Sqrt[(2 + s0)/(
     4 + s0^2)], -(2/Sqrt[(((2 + s0) (4 + s0^2))/s0)])}}, {{-4 Sqrt[
      s0/(2 + s0)], -((2 Sqrt[8 + 4 s0 + 2 s0^2 + s0^3])/(
      2 + s0))}, {-2 Sqrt[2 + s0], 0}}, {{1, 0}, {0, 1}}};
 X = Array[x, {n, n}];
 
 Print[Solve[
    Simplify[
      a.X + X.a\[ConjugateTranspose] + b.ji.b\[ConjugateTranspose]] ==
      ConstantArray[0, {n, n}], Flatten[X]] // Simplify];
 Print[Solve[
    Simplify[X.c\[ConjugateTranspose] + b.ji.d\[ConjugateTranspose]] ==
      ConstantArray[0, {n, no}], Flatten[X]] // Simplify];

(* Checking that solution solves both equations *)
Print[Simplify[(X /. 
  Solve[Simplify[
     a.X + X.a\[ConjugateTranspose] + 
      b.ji.b\[ConjugateTranspose]] == ConstantArray[0, {n, n}], 
   Flatten[X]]) == (X /. 
  Solve[Simplify[
     X.c\[ConjugateTranspose] + b.ji.d\[ConjugateTranspose]] == 
    ConstantArray[0, {n, no}], Flatten[X]])]];
 
 sols = Solve[
   Simplify[
      a.X + X.a\[ConjugateTranspose] + b.ji.b\[ConjugateTranspose]] ==
      ConstantArray[0, {n, n}]
    && Simplify[
      X.c\[ConjugateTranspose] + b.ji.d\[ConjugateTranspose]] == 
     ConstantArray[0, {n, no}], Flatten[X]]]

The output is:

{{x[1,1]->-(1/(4+2 s0)),x[1,2]->Sqrt[s0/(4+s0^2)]/(2+s0),x[2,1]->s0/((2+s0) Sqrt[s0 (4+s0^2)]),x[2,2]->1/(4+2 s0)}}
{{x[1,1]->-(1/(4+2 s0)),x[1,2]->Sqrt[s0/(4+s0^2)]/(2+s0),x[2,1]->1/Sqrt[((2+s0)^2 (4+s0^2))/s0],x[2,2]->1/(4+2 s0)}}
True
{}

Note that the returned results for the first two Print statements (solving them separately) solve both equations, so why isn't Solve working?

$\endgroup$
2
  • 1
    $\begingroup$ If you use Reduce instead of Solve you get this: The answer found by Reduce contains unsolved equation(s) ... A likely reason for this is that the solution set depends on branch cuts of Wolfram Language functions. $\endgroup$
    – flinty
    Commented Jul 1, 2020 at 15:33
  • 1
    $\begingroup$ There is a generic solution: $$ X= (AB J D^\dagger-BJB^\dagger C^\dagger)(A^\dagger C^\dagger)^{-1}$$. $\endgroup$
    – yarchik
    Commented Jul 1, 2020 at 19:28

1 Answer 1

1
$\begingroup$

With Method->Reduce you get the result as ConditionalExpressions.

Solve[Simplify[
    a.X + X.a\[ConjugateTranspose] + b.ji.b\[ConjugateTranspose]] == 
   ConstantArray[0, {n, n}] && 
  Simplify[X.c\[ConjugateTranspose] + b.ji.d\[ConjugateTranspose]] == 
   ConstantArray[0, {n, no}], Flatten[X], Method -> Reduce]

enter image description here

Alternatively, you can reformulate the problem as a single equation

$$AXC^\dagger + XA^\dagger C^\dagger + BJB^\dagger C^\dagger = 0,\ \ AX C^\dagger + AB J D^\dagger = 0$$

$$ XA^\dagger C^\dagger + BJB^\dagger C^\dagger -AB J D^\dagger= 0$$

FullSimplify[
 Solve[X.a\[ConjugateTranspose].c\[ConjugateTranspose] + 
    b.ji.b\[ConjugateTranspose].c\[ConjugateTranspose] - 
    a.b.ji.d\[ConjugateTranspose] == ConstantArray[0, {n, n}], 
  Flatten[X]]]

enter image description here

$\endgroup$
4
  • $\begingroup$ Your reformulation as a single equation is the way I will go! Not sure why I didn't think of that. Thank you! I still wonder why this is an issue in the first place though $\endgroup$ Commented Jul 1, 2020 at 18:45
  • $\begingroup$ According to the documentation: "Solve gives generic solutions only. Solutions that are valid only when continuous parameters satisfy equations are removed." I did not look deep to work out why the conditions are needed. $\endgroup$ Commented Jul 1, 2020 at 18:53
  • $\begingroup$ But why do you use Solve for a linear equation? $\endgroup$
    – yarchik
    Commented Jul 1, 2020 at 19:25
  • $\begingroup$ This code has been running for a long time and cannot give results (MMA v13.0). I wonder if the code is incomplete? Could you give the complete code? Thanks!@Suba Thomas $\endgroup$
    – lotus2019
    Commented Jul 31, 2022 at 9:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.