Grab the four pieces of N.
{{{ C = N.subdivision(0,0) Z = N.subdivision(1,0) K = N.subdivision(0,1) L = N.subdivision(1,1) }}}And build two bigger pieces.
{{{ B = C.stack(Z) J = K.stack(L) }}} {{{ B }}} {{{ J }}}Some properties of the pieces, as given in Theorem PEEF.
J is nonsingular.
{{{ J.inverse() }}}A, B and J are related. Effectively, J consolidates the net effect of all of the row operations that convert A into B.
{{{ J*A == B }}}Any linear combinations of the columns of L that create a zero column will create a consistent system when used as the vector of constants with A as coefficient matrix. This is another way of saying the null space of L is the column space of A.
{{{ NL = L.right_kernel(basis='pivot') NL }}}We create an element of the null space of L.
{{{ NLbasis = NL.basis() }}} {{{ b = 3*NLbasis[0] + (-2)*NLbasis[1] + 5*NLbasis[2] b }}}b will create a consistent system with A as coefficient matrix.
{{{ P = A.augment(b, subdivide=True) P.rref() }}}The column space of A is equal to the null space of L. This is part of Theorem FS.
{{{ CA = A.column_space() CA }}} {{{ NL.echelonized_basis() }}} {{{ CA == NL }}}