(The functions used in this notebook require the C++ NCGB module.)

This is a type of problem known as a matrix completion problem. This particular one was  suggested by Hugo Woerdeman.   We are grateful to him for discussions.

Problem:
     	Given matrices a, b, c,  and  d,    we  wish to determine under what conditions there exists matrices  x,  y,  z, and w such that the block matrices

(({{a, x}, {y, b}}))                       (({{w, c}, {d, z}}))

are inverses of each other.     Also, we wish to find formulas for x,  y, z,  and  w.

    This problem was solved in a paper by  W.W. Barrett, C.R. Johnson, M. E. Lundquist  and H. Woerderman  [BJLW] where  they showed it splits into several cases depending upon which of a, b, c and d are invertible. In our example, we assume that a, b, c and d  are invertible and discover the result which they obtain in this case.

<< NCGB.m

First we set all of our variables to be noncommutative and set up the relations which make matrices a, b, c, and d invertible.  (Inverses in this particular problem are taken to be two sided.)   Strong invertibility relations help when one is trying to get an idea of the solution of the problem.

\(\(
\ \ \ \ \ \ \ \ \ \ \ \ \ 
    SNC[a, b, c, d, w, x, y, z, 
	\ Inv[a], \ \ Inv[b], \ Inv[c]\ , 
      Inv[d]\ \ ]
\)\)

Then we define the relations we are interested in.   The  two relations below set our block matrices as inverses of each other.

first  =  {{a, x}, {y, b}}second  =  {{w, c}, {d, z}}

\(
oneway\  = MatMult[first, second]\  - \ IdentityMatrix[2]\)\(otherway\  = \ 
\ \ \ \ \ 
      MatMult[second, first] - \ \ IdentityMatrix[2]\)

\(
start\  = \ Flatten[{\ oneway, \ otherway\ \ }]
\)\(inverses\  = 
      \ {\(-1\)\  + \ a\ **\ Inv[a], \ \(-1\)\  + \ Inv[a]\ **\ a, 
\ \ \ \ 
        \(-1\)\  + \ b\ **\ Inv[b], \ \(-1\)\  + \ Inv[b]\ **\ b, 
\ \ \ \ 
        \(-1\)\  + \ c\ **\ Inv[c], \ \(-1\)\  + \ Inv[c]\ **\ c, 
\ \ \ \ \ 
        \(-1\)\  + \ d\ **\ Inv[d], \ \(-1\)\  + \ Inv[d]\ **\ d\ 
	}
\)start = Join[start, inverses]

Specify to NCAlgebra which variables are known and which are unknown.

\(
SetKnowns[a, Inv[a], b, Inv[b], c, Inv[c], d, Inv[d]]
\)\(SetUnknowns[{z}, {x, y, w}]
\)

Tell NCAlgebra to solve for our unknown variables

\(\(
\ \ 
\(answer = NCProcess2[start, 4, \ "DemoGBMA"\ ]; \)


    \)\)

The spreadsheet which appears shows that, if a, b, c and d are invertible, then one can find x, y, z and w such that the matrices above are inverses of each other if and only if z b z = z + d a c.

The spreadsheet also gives formulas for x, y and w in terms of z.