"Source: Text/Basics/Mat.text";
"Line: 2857";
"Date: Thu Sep 25 14:47:46 2025";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Basics/Mat.text, line: 2857
// Example: H27E12 ()
print "Example: H27E12";
ei := GetEchoInput();
SetEchoInput(true);
RR := RealField(10);
r := 3;
c := 5;
S := [-2^10..2^10];
A := [Vector([RR!Random(S)/2^9 : i in [1..c]]) : j in [1..r]];
M := Matrix(A cat [A[1]+A[2]-A[3]]);
M;
NumericalRank(M);
NumericalKernel(M); // scaled to norm 1
v := Vector([RR!Random(S)/2^9 : i in [1..c]]);
NumericalIsConsistent(M,v);
w := &+[M[i] * Random(S)/2^9 : i in [1..r]];
NumericalIsConsistent(M,w);
PI := NumericalPseudoinverse(M); PI;
Max([Abs(x) :  x in Eltseq(PI*M*PI-PI)]);
//
CC<i> := ComplexField(30);
r := 5;
c := 4;
A := [CC!Random([-2^30..2^30])/2^28 : j in [1..r*c]];
B := [CC!Random([-2^30..2^30])/2^28 : j in [1..r*c]];
M := Matrix(r,c,A) + i*Matrix(r,c,B);
NumericalRank(M);
NumericalKernel(M);
PI := NumericalPseudoinverse(M);
Max([Abs(x) :  x in Eltseq(PI*M*PI-PI)]);
Max([Abs(x) :  x in Eltseq(M*PI*M-M)]);
Max([Abs(x) :  x in Eltseq(M*PI-ConjugateTranspose(M*PI))]);
Max([Abs(x) :  x in Eltseq(PI*M-ConjugateTranspose(PI*M))]);
SetEchoInput(ei);
