Generic Linear Algebra
Motivation
In order to use the generic linear algebra routines, one needs to define only the operations required by the routines. This is better than requiring the user to define all ring or field operations because many of the operations are generally not needed by the algorithm. For example, in the Berkowitz algorithm, the only operations needed are +, -, *, =, and the ring constants 1 and 0. The code does not need to know the characteristic of the ring. Nor does it need to do scalar multiplication by integers. Thus we will require only the "basic" ring operations.
The operations can be defined in either a table or module, where the name of the operations must match the names of the operations expected by the generic linear algebra routines. The generic routines are defined inside a module.
We'll show how to program a generic linear algebra routines with an example to perform matrix matrix multiplication.
MatMatMul := proc(A::Matrix,B::Matrix) local D,n,p,m,C,i,j,k;
D := GenericCheck( procname, [`0`,`+`,`*`] );
if op(1,A)[2]<>op(1,B)[1] then error "incompatible dimensions"; fi;
n,p := op(1,A);
m := op(1,B)[2];
C := Matrix(n,m);
for i to n do for j to m do C[i,j] := D[`+`](seq(D[`*`](A[i,k],B[k,j]),k=1..p)) od od;
C
end:
The table or module containing the operations required by the matrix matrix multiply must have `0`, `+`, `*` defined. For this purpose, a list is defined for type checking, and the GenericCheck procedure does the checking given the list. It also extracts the table (or module) from the procname.
In the matrix multiply routine, whenever a ring operation is performed, we use the operation defined by the table or module containing the operations.
For example, to execute
A[i,k]*B[k,j]
over the ring, we execute instead
D[`*`](A[i,k],B[k,j])
To use the matrix multiply routine, first we need to define a table or module of operation required by the routine. Here, we must define `0`, `+`,`*`.
For this example, assume the ring is the ring of integers, and we'll define a module of operations.
Z:=table(): Z[`0`] := 0; Z[`+`] := `+`; Z[`*`] := `*`;
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPiZJIlpHRiY2I0kiMEdGJiIiITcjRi8=
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPiZJIlpHRiY2I0kiK0clKnByb3RlY3RlZEdGLjcjRi4=
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPiZJIlpHRiY2I0kiKkclKnByb3RlY3RlZEdGLjcjRi4=
A:=Matrix([[2,0,0],[0,2,0],[0,0,2]]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtSSNtbkdGJDYkUSIyRidGOS8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGX3AvJStncm91cGFsaWduR0ZfcC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZmcC1GZ282KC1Gam82JFEiMEYnRjlGXXBGYHBGYnBGZHBGZ3BGaXBGXXBGYHBGYnAtRmRvNihGaXBGZm9GaXBGXXBGYHBGYnAtRmRvNihGaXBGaXBGZm9GXXBGYHBGYnAvJSZhbGlnbkdRJWF4aXNGJy9GXnBRKWJhc2VsaW5lRicvRmFwUSdjZW50ZXJGJy9GY3BRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGX3IvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGanIvJSZmcmFtZUdGanIvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmdyLUY2NjBRIl1GJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVQ==
To call the matrix multiply routine, we index the procedure with the table or module.
MatMatMul[Z](A,A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjRGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvLUZZNigtRmZuNiRRIjBGJ0YvRmluRlxvRl5vRmBvRmNvRmVvRmluRlxvRl5vLUZWNihGZW9GWEZlb0ZpbkZcb0Zeby1GVjYoRmVvRmVvRlhGaW5GXG9GXm8vJSZhbGlnbkdRJWF4aXNGJy9Gam5RKWJhc2VsaW5lRicvRl1vUSdjZW50ZXJGJy9GX29RJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGW3EvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZnEvJSZmcmFtZUdGZnEvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y3LyUtZXF1YWxjb2x1bW5zR0Y3LyUtZGlzcGxheXN0eWxlR0Y3LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmNxLUYsNjBRIl1GJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTQ==
We have put the generic linear algebra routines and algorithms in a module. Here, the module is called GenericLinearAlgebra.
with(GenericLinearAlgebra);
NzVJMUJhcmVpc3NBbGdvcml0aG1HNiJJM0Jlcmtvd2l0ekFsZ29yaXRobUdGJEk5Q2hhcmFjdGVyaXN0aWNQb2x5bm9taWFsR0YkSSxEZXRlcm1pbmFudEdGJEk0R2F1c3NpYW5FbGltaW5hdGlvbkdGJEktR2VuZXJpY0NoZWNrR0YkSSxIZXJtaXRlRm9ybUdGJEk0SGVzc2VuYmVyZ0FsZ29yaXRobUdGJEkvSGVzc2VuYmVyZ0Zvcm1HRiRJLExpbmVhclNvbHZlR0YkSS5NYXRyaXhJbnZlcnNlR0YkSTVNYXRyaXhNYXRyaXhNdWx0aXBseUdGJEk1TWF0cml4VmVjdG9yTXVsdGlwbHlHRiRJL01pbm9yRXhwYW5zaW9uR0YkSSpOdWxsU3BhY2VHRiRJJVJSRUZHRiRJNlJlZHVjZWRSb3dFY2hlbG9uRm9ybUdGJEkqU21pdGhGb3JtR0YkSThTdHJvbmdseUNvbm5lY3RlZEJsb2Nrc0dGJA==
should load the generic linear algebra routines.
Examples
Integers and Rationals
We show the use of a module to define the domain, the arithmetic operations for the integers.
Z := module()
export `0`,`1`,`+`,`-`,`*`,`=`,Divide,Gcdex,Quo,Rem,UnitPart,EuclideanNorm;
`0` := 0:
`1` := 1:
`+` := :-`+`:
`-` := :-`-`:
`*` := :-`*`:
`=` := proc(a,b) evalb(a=b) end:
Divide := proc(x,y,q) evalb(irem(args)=0) end:
Gcdex := igcdex:
Quo := iquo:
Rem := irem:
UnitPart := sign:
EuclideanNorm := abs:
end:
A := Matrix([[1,0,0,0,1],[0,1,0,0,0],[1,1,0,0,0],[0,1,0,0,1],[0,0,0,1,1]]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2OS1JJG10ckdGJDYqLUkkbXRkR0YkNigtSSNtbkdGJDYkRlRGOS8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnAvJStncm91cGFsaWduR0ZecC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcC1GZ282KC1Gam82JFEiMEYnRjlGXHBGX3BGYXBGY3BGZnBGaHBGaHBGZm9GXHBGX3BGYXAtRmRvNipGaHBGZm9GaHBGaHBGaHBGXHBGX3BGYXAtRmRvNipGZm9GZm9GaHBGaHBGaHBGXHBGX3BGYXAtRmRvNipGaHBGZm9GaHBGaHBGZm9GXHBGX3BGYXAtRmRvNipGaHBGaHBGaHBGZm9GZm9GXHBGX3BGYXAvJSZhbGlnbkdRJWF4aXNGJy9GXXBRKWJhc2VsaW5lRicvRmBwUSdjZW50ZXJGJy9GYnBRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGYnIvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGXXMvJSZmcmFtZUdGXXMvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmpyLUY2NjBRIl1GJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVQ==
StronglyConnectedBlocks[Z](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW5HRiQ2JFEiMUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNjBRIixGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR1EldHJ1ZUYnLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EkMGVtRicvJSdyc3BhY2VHUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGJy8lKG1pbnNpemVHRi4vJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUYzNjBRIltGJ0YvL0Y3RjsvRjpGOC9GPUY7Rj5GQEZCRkQvRkdRJ3ByZWZpeEYnL0ZKUS50aGlubWF0aHNwYWNlRicvRk1GaW5GT0ZRLUYjNictRiM2JUZWLUYjNiMtSSdtdGFibGVHRiQ2NS1JJG10ckdGJDYmLUkkbXRkR0YkNihGKy8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXHAvJStncm91cGFsaWduR0ZccC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZjcEZqb0ZdcEZfcC8lJmFsaWduR1ElYXhpc0YnL0ZbcFEpYmFzZWxpbmVGJy9GXnBRJ2NlbnRlckYnL0ZgcFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjsvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZjcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zeci8lJmZyYW1lR0Zeci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjgvJS1lcXVhbGNvbHVtbnNHRjgvJS1kaXNwbGF5c3R5bGVHRjgvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGW3ItRjM2MFEiXUYnRi9GWUZaRmVuRj5GQEZCRkQvRkdRKHBvc3RmaXhGJ0Zobi9GTVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZPRlFGMi1GIzYlRlYtRiM2Iy1GYm82Ni1GZW82J0Znb0Znb0Zqb0ZdcEZfcC1GZW82J0Znby1GaG82KC1GLDYkUSIwRidGL0Zqb0ZdcEZfcEZhcEZkcEZqb0ZdcEZfcEZmcEZpcEZbcUZdcUZfcUZhcUZkcUZmcUZpcUZcckZfckZhckZjckZmckZockZqckZcc0Zfc0Zhc0YyRl1vRmFz
CharacteristicPolynomial[Z](A,method=BerkowitzAlgorithm);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY6LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvRmhuRltvRl1vLUZWNiYtRlk2KC1GZm42JFEpJm1pbnVzOzNGJ0YvRmhuRltvRl1vRl9vRmJvRmhuRltvRl1vLUZWNiYtRlk2KC1GZm42JFEiMkYnRi9GaG5GW29GXW9GX29GYm9GaG5GW29GXW9GVS1GVjYmLUZZNigtRmZuNiRRKSZtaW51czsxRidGL0ZobkZbb0Zdb0Zfb0Zib0ZobkZbb0Zdby1GVjYmLUZZNigtRmZuNiRRIjBGJ0YvRmhuRltvRl1vRl9vRmJvRmhuRltvRl1vLyUmYWxpZ25HUSVheGlzRicvRmluUSliYXNlbGluZUYnL0Zcb1EnY2VudGVyRicvRl5vUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNC8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRl1yLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmhyLyUmZnJhbWVHRmhyLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGNy8lLWVxdWFsY29sdW1uc0dGNy8lLWRpc3BsYXlzdHlsZUdGNy8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zlci1GLDYwUSJdRidGL0YyRjVGOEY6RjxGPkZAL0ZDUShwb3N0Zml4RidGRS9GSVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZKRk0=
c := 1*x^5-3*x^4+2*x^3+1*x^2-1*x+0;
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPkkiY0dGJiwsKiQpSSJ4R0YmIiImIiIiRjEqJiIiJEYxKUYvIiIlRjEhIiIqJiIiI0YxKUYvRjNGMUYxKiQpRi9GOEYxRjFGL0Y2NyNGLA==
factor(c);
KihJInhHNiIiIiIsKCokKUYjIiIjRiVGJUYjISIiRiVGKkYlKSwmRiNGJUYlRipGKUYl
CharacteristicPolynomial[Z](A,output=factored);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW5HRiQ2JFEiMUYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNjBRIixGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR1EldHJ1ZUYnLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EkMGVtRicvJSdyc3BhY2VHUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGJy8lKG1pbnNpemVHRi4vJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUYzNjBRIltGJ0YvL0Y3RjsvRjpGOC9GPUY7Rj5GQEZCRkQvRkdRJ3ByZWZpeEYnL0ZKUS50aGlubWF0aHNwYWNlRicvRk1GaW5GT0ZRLUYjNictRiM2JUZWLUYjNiMtSSdtdGFibGVHRiQ2Ni1JJG10ckdGJDYmLUkkbXRkR0YkNihGKy8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXHAvJStncm91cGFsaWduR0ZccC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZjcEZqb0ZdcEZfcC1GZW82Ji1GaG82KC1GLDYkUSkmbWludXM7MUYnRi9Gam9GXXBGX3BGYXBGZHBGam9GXXBGX3AvJSZhbGlnbkdRJWF4aXNGJy9GW3BRKWJhc2VsaW5lRicvRl5wUSdjZW50ZXJGJy9GYHBRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y7LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGanEvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZXIvJSZmcmFtZUdGZXIvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y4LyUtZXF1YWxjb2x1bW5zR0Y4LyUtZGlzcGxheXN0eWxlR0Y4LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmJyLUYzNjBRIl1GJ0YvRllGWkZlbkY+RkBGQkZEL0ZHUShwb3N0Zml4RidGaG4vRk1RMnZlcnl0aGlubWF0aHNwYWNlRidGT0ZRRjItRiM2JUZWLUYjNiMtRmJvNjdGZG9GZnBGZnBGXXFGYHFGYnFGZHFGZnFGaHFGW3JGXXJGYHJGY3JGZnJGaHJGanJGXXNGX3NGYXNGY3NGZnNGaHNGMkZdb0Zocw==
A:=Matrix([[9, -36, 30], [-36, 192, -180], [30, -180, 180]]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtSSNtbkdGJDYkUSI5RidGOS8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGX3AvJStncm91cGFsaWduR0ZfcC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZmcC1GZ282KC1Gam82JFEqJm1pbnVzOzM2RidGOUZdcEZgcEZicEZkcEZncC1GZ282KC1Gam82JFEjMzBGJ0Y5Rl1wRmBwRmJwRmRwRmdwRl1wRmBwRmJwLUZkbzYoRmlwLUZnbzYoLUZqbzYkUSQxOTJGJ0Y5Rl1wRmBwRmJwRmRwRmdwLUZnbzYoLUZqbzYkUSsmbWludXM7MTgwRidGOUZdcEZgcEZicEZkcEZncEZdcEZgcEZicC1GZG82KEZecUZqcS1GZ282KC1Gam82JFEkMTgwRidGOUZdcEZgcEZicEZkcEZncEZdcEZgcEZicC8lJmFsaWduR1ElYXhpc0YnL0ZecFEpYmFzZWxpbmVGJy9GYXBRJ2NlbnRlckYnL0ZjcFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjEvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0Zjcy8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZedC8lJmZyYW1lR0ZedC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRj0vJS1lcXVhbGNvbHVtbnNHRj0vJS1kaXNwbGF5c3R5bGVHRj0vJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGW3QtRjY2MFEiXUYnRjlGZ25GPkZobkZCRkRGRkZIL0ZLUShwb3N0Zml4RidGW28vRlFRMnZlcnl0aGlubWF0aHNwYWNlRidGUkZV
CharacteristicPolynomial[Z](A,method=BerkowitzAlgorithm);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY4LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvRmhuRltvRl1vLUZWNiYtRlk2KC1GZm42JFErJm1pbnVzOzM4MUYnRi9GaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2Ji1GWTYoLUZmbjYkUSUzMzEyRidGL0ZobkZbb0Zdb0Zfb0Zib0ZobkZbb0Zdby1GVjYmLUZZNigtRmZuNiRRLCZtaW51czsyMTYwRidGL0ZobkZbb0Zdb0Zfb0Zib0ZobkZbb0Zdby8lJmFsaWduR1ElYXhpc0YnL0ZpblEpYmFzZWxpbmVGJy9GXG9RJ2NlbnRlckYnL0Zeb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZmcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zhci8lJmZyYW1lR0Zhci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGXnItRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
Determinant[Z](A,method=BerkowitzAlgorithm);
IiVnQA==
Determinant[Z](A,method=MinorExpansion);
IiVnQA==
BareissAlgorithm[Z](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjlGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvLUZZNigtRmZuNiRRKiZtaW51czszNkYnRi9GaW5GXG9GXm9GYG9GY28tRlk2KC1GZm42JFEjMzBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLUZWNigtRlk2KC1GZm42JFEiMEYnRi9GaW5GXG9GXm9GYG9GY28tRlk2KC1GZm42JFEkNDMyRidGL0ZpbkZcb0Zeb0Zgb0Zjby1GWTYoLUZmbjYkUSsmbWludXM7NTQwRidGL0ZpbkZcb0Zeb0Zgb0Zjb0ZpbkZcb0Zeby1GVjYoRmFwRmFwLUZZNigtRmZuNiRRJTIxNjBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLyUmYWxpZ25HUSVheGlzRicvRmpuUSliYXNlbGluZUYnL0Zdb1EnY2VudGVyRicvRl9vUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNC8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmRyLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRl9zLyUmZnJhbWVHRl9zLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGNy8lLWVxdWFsY29sdW1uc0dGNy8lLWRpc3BsYXlzdHlsZUdGNy8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zccy1GLDYwUSJdRidGL0YyRjVGOEY6RjxGPkZAL0ZDUShwb3N0Zml4RidGRS9GSVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZKRk0=
H,U := HermiteForm[Z](A,output=['H','U']);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtaUdGJDYlUSJIRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2MFEiLEYnL0Y1USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMy8lKXN0cmV0Y2h5R0Y/LyUqc3ltbWV0cmljR0Y/LyUobGFyZ2VvcEdGPy8lLm1vdmFibGVsaW1pdHNHRj8vJSdhY2NlbnRHRj8vJSVmb3JtR1EmaW5maXhGJy8lJ2xzcGFjZUdRJDBlbUYnLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRicvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRi42JVEiVUYnRjFGNC1GODYwUSM6PUYnRjtGPS9GQUY/RkJGREZGRkhGSkZML0ZQUS90aGlja21hdGhzcGFjZUYnL0ZTRl1vRlVGWC1GIzYlLUYjNiUtRjg2MFEiW0YnRjsvRj5GM0Zbby9GQ0YzRkRGRkZIRkovRk1RJ3ByZWZpeEYnL0ZQUS50aGlubWF0aHNwYWNlRicvRlNGW3BGVUZYLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtSSNtbkdGJDYkUSIzRidGOy8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnEvJStncm91cGFsaWduR0ZecS8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcS1GZnA2KC1GaXA2JFEiMEYnRjtGXHFGX3FGYXFGY3FGZnEtRmZwNigtRmlwNiRRIzMwRidGO0ZccUZfcUZhcUZjcUZmcUZccUZfcUZhcS1GY3A2KEZocS1GZnA2KC1GaXA2JFEjMTJGJ0Y7RlxxRl9xRmFxRmNxRmZxRmhxRlxxRl9xRmFxLUZjcDYoRmhxRmhxLUZmcDYoLUZpcDYkUSM2MEYnRjtGXHFGX3FGYXFGY3FGZnFGXHFGX3FGYXEvJSZhbGlnbkdRJWF4aXNGJy9GXXFRKWJhc2VsaW5lRicvRmBxUSdjZW50ZXJGJy9GYnFRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YzLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGXXQvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGaHQvJSZmcmFtZUdGaHQvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y/LyUtZXF1YWxjb2x1bW5zR0Y/LyUtZGlzcGxheXN0eWxlR0Y/LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmV0LUY4NjBRIl1GJ0Y7RmZvRltvRmdvRkRGRkZIRkovRk1RKHBvc3RmaXhGJ0Zqby9GU1EydmVyeXRoaW5tYXRoc3BhY2VGJ0ZVRlhGNy1GIzYlRmNvLUYjNiMtRmBwNjctRmNwNigtRmZwNigtRmlwNiRRIzEzRidGO0ZccUZfcUZhcUZjcUZmcS1GZnA2KC1GaXA2JFEiOUYnRjtGXHFGX3FGYXFGY3FGZnEtRmZwNigtRmlwNiRRIjdGJ0Y7RlxxRl9xRmFxRmNxRmZxRlxxRl9xRmFxLUZjcDYoLUZmcDYoLUZpcDYkUSI2RidGO0ZccUZfcUZhcUZjcUZmcS1GZnA2KC1GaXA2JFEiNEYnRjtGXHFGX3FGYXFGY3FGZnFGZXBGXHFGX3FGYXEtRmNwNigtRmZwNigtRmlwNiRRIzIwRidGO0ZccUZfcUZhcUZjcUZmcS1GZnA2KC1GaXA2JFEjMTVGJ0Y7RlxxRl9xRmFxRmNxRmZxRmRyRlxxRl9xRmFxRmBzRmNzRmVzRmdzRmlzRlt0Rl50RmB0RmN0RmZ0Rml0Rlt1Rl11RmB1RmJ1RmR1RmZ1Rml1Rlt2
MatrixMatrixMultiply[Z](U,A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjNGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvLUZZNigtRmZuNiRRIjBGJ0YvRmluRlxvRl5vRmBvRmNvLUZZNigtRmZuNiRRIzMwRidGL0ZpbkZcb0Zeb0Zgb0Zjb0ZpbkZcb0Zeby1GVjYoRmVvLUZZNigtRmZuNiRRIzEyRidGL0ZpbkZcb0Zeb0Zgb0Zjb0Zlb0ZpbkZcb0Zeby1GVjYoRmVvRmVvLUZZNigtRmZuNiRRIzYwRidGL0ZpbkZcb0Zeb0Zgb0Zjb0ZpbkZcb0Zeby8lJmFsaWduR1ElYXhpc0YnL0ZqblEpYmFzZWxpbmVGJy9GXW9RJ2NlbnRlckYnL0Zfb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZqcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zlci8lJmZyYW1lR0Zlci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGYnItRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
S,U,V := SmithForm[Z](A,output=['S','U','V']);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNictSSNtaUdGJDYlUSJTRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2MFEiLEYnL0Y1USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMy8lKXN0cmV0Y2h5R0Y/LyUqc3ltbWV0cmljR0Y/LyUobGFyZ2VvcEdGPy8lLm1vdmFibGVsaW1pdHNHRj8vJSdhY2NlbnRHRj8vJSVmb3JtR1EmaW5maXhGJy8lJ2xzcGFjZUdRJDBlbUYnLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRicvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRi42JVEiVUYnRjFGNEY3LUYuNiVRIlZGJ0YxRjQtRjg2MFEjOj1GJ0Y7Rj0vRkFGP0ZCRkRGRkZIRkpGTC9GUFEvdGhpY2ttYXRoc3BhY2VGJy9GU0Zgb0ZVRlgtRiM2Jy1GIzYlLUY4NjBRIltGJ0Y7L0Y+RjNGXm8vRkNGM0ZERkZGSEZKL0ZNUSdwcmVmaXhGJy9GUFEudGhpbm1hdGhzcGFjZUYnL0ZTRl5wRlVGWC1GIzYjLUknbXRhYmxlR0YkNjctSSRtdHJHRiQ2KC1JJG10ZEdGJDYoLUkjbW5HRiQ2JFEiM0YnRjsvJSlyb3dhbGlnbkdRIUYnLyUsY29sdW1uYWxpZ25HRmFxLyUrZ3JvdXBhbGlnbkdGYXEvJShyb3dzcGFuR1EiMUYnLyUrY29sdW1uc3BhbkdGaHEtRmlwNigtRlxxNiRRIjBGJ0Y7Rl9xRmJxRmRxRmZxRmlxRltyRl9xRmJxRmRxLUZmcDYoRltyLUZpcDYoLUZccTYkUSMxMkYnRjtGX3FGYnFGZHFGZnFGaXFGW3JGX3FGYnFGZHEtRmZwNihGW3JGW3ItRmlwNigtRlxxNiRRIzYwRidGO0ZfcUZicUZkcUZmcUZpcUZfcUZicUZkcS8lJmFsaWduR1ElYXhpc0YnL0ZgcVEpYmFzZWxpbmVGJy9GY3FRJ2NlbnRlckYnL0ZlcVEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjMvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZbdC8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZmdC8lJmZyYW1lR0ZmdC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRj8vJS1lcXVhbGNvbHVtbnNHRj8vJS1kaXNwbGF5c3R5bGVHRj8vJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGY3QtRjg2MFEiXUYnRjtGaW9GXm9Gam9GREZGRkhGSi9GTVEocG9zdGZpeEYnRl1wL0ZTUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlVGWEY3LUYjNiVGZm8tRiM2Iy1GY3A2Ny1GZnA2KC1GaXA2KC1GXHE2JFEjMTNGJ0Y7Rl9xRmJxRmRxRmZxRmlxLUZpcDYoLUZccTYkUSI5RidGO0ZfcUZicUZkcUZmcUZpcS1GaXA2KC1GXHE2JFEiN0YnRjtGX3FGYnFGZHFGZnFGaXFGX3FGYnFGZHEtRmZwNigtRmlwNigtRlxxNiRRKiZtaW51czs0NkYnRjtGX3FGYnFGZHFGZnFGaXEtRmlwNigtRlxxNiRRKiZtaW51czszMkYnRjtGX3FGYnFGZHFGZnFGaXEtRmlwNigtRlxxNiRRKiZtaW51czsyNUYnRjtGX3FGYnFGZHFGZnFGaXFGX3FGYnFGZHEtRmZwNigtRmlwNigtRlxxNiRRKiZtaW51czsxMEYnRjtGX3FGYnFGZHFGZnFGaXEtRmlwNigtRlxxNiRRKSZtaW51czs1RidGO0ZfcUZicUZkcUZmcUZpcS1GaXA2KC1GXHE2JFEpJm1pbnVzOzNGJ0Y7Rl9xRmJxRmRxRmZxRmlxRl9xRmJxRmRxRl5zRmFzRmNzRmVzRmdzRmlzRlx0Rl50RmF0RmR0Rmd0Rml0Rlt1Rl51RmB1RmJ1RmR1Rmd1Rml1RjctRiM2JUZmby1GIzYjLUZjcDY3LUZmcDYoLUZpcDYoLUZccTYkUSkmbWludXM7OUYnRjtGX3FGYnFGZHFGZnFGaXFGanhGanhGX3FGYnFGZHEtRmZwNigtRmlwNigtRlxxNiRGV0Y7Rl9xRmJxRmRxRmZxRmlxRmh6RltyRl9xRmJxRmRxLUZmcDYoRmh6Rmh6Rmh6Rl9xRmJxRmRxRl5zRmFzRmNzRmVzRmdzRmlzRlx0Rl50RmF0RmR0Rmd0Rml0Rlt1Rl51RmB1RmJ1RmR1Rmd1Rml1
MatrixMatrixMultiply[Z](MatrixMatrixMultiply[Z](U,A),V);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjNGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvLUZZNigtRmZuNiRRIjBGJ0YvRmluRlxvRl5vRmBvRmNvRmVvRmluRlxvRl5vLUZWNihGZW8tRlk2KC1GZm42JFEjMTJGJ0YvRmluRlxvRl5vRmBvRmNvRmVvRmluRlxvRl5vLUZWNihGZW9GZW8tRlk2KC1GZm42JFEjNjBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLyUmYWxpZ25HUSVheGlzRicvRmpuUSliYXNlbGluZUYnL0Zdb1EnY2VudGVyRicvRl9vUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNC8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmVxLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmByLyUmZnJhbWVHRmByLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGNy8lLWVxdWFsY29sdW1uc0dGNy8lLWRpc3BsYXlzdHlsZUdGNy8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zdci1GLDYwUSJdRidGL0YyRjVGOEY6RjxGPkZAL0ZDUShwb3N0Zml4RidGRS9GSVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZKRk0=
Q := module()
export `0`,`1`,`+`,`-`,`*`,`=`,`/`;
`0` := 0:
`1` := 1:
`+` := :-`+`:
`-` := :-`-`:
`*` := :-`*`:
`=` := proc(a,b) evalb(a=b) end:
`/` := :-`/`;
end:
H := HessenbergForm[Q](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiSEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtSSNtbkdGJDYkUSI5RidGOS8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGX3AvJStncm91cGFsaWduR0ZfcC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZmcC1GZ282KC1Gam82JFEqJm1pbnVzOzYxRidGOUZdcEZgcEZicEZkcEZncC1GZ282KC1Gam82JFEjMzBGJ0Y5Rl1wRmBwRmJwRmRwRmdwRl1wRmBwRmJwLUZkbzYoLUZnbzYoLUZqbzYkUSombWludXM7MzZGJ0Y5Rl1wRmBwRmJwRmRwRmdwLUZnbzYoLUZqbzYkUSQzNDJGJ0Y5Rl1wRmBwRmJwRmRwRmdwLUZnbzYoLUZqbzYkUSsmbWludXM7MTgwRidGOUZdcEZgcEZicEZkcEZncEZdcEZgcEZicC1GZG82KC1GZ282KC1Gam82JFEiMEYnRjlGXXBGYHBGYnBGZHBGZ3AtRmdvNigtRmpvNiRRKiZtaW51czs0NUYnRjlGXXBGYHBGYnBGZHBGZ3BGXnFGXXBGYHBGYnAvJSZhbGlnbkdRJWF4aXNGJy9GXnBRKWJhc2VsaW5lRicvRmFwUSdjZW50ZXJGJy9GY3BRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGXXQvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGaHQvJSZmcmFtZUdGaHQvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmV0LUY2NjBRIl1GJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVQ==
CharacteristicPolynomial[Q](A) = CharacteristicPolynomial[Q](H);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtb0dGJDYwUSJbRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUpc3RyZXRjaHlHRjYvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJWZvcm1HUSdwcmVmaXhGJy8lJ2xzcGFjZUdRLnRoaW5tYXRoc3BhY2VGJy8lJ3JzcGFjZUdGSS8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYjLUknbXRhYmxlR0YkNjgtSSRtdHJHRiQ2Ji1JJG10ZEdGJDYoLUkjbW5HRiQ2JEZORjEvJSlyb3dhbGlnbkdRIUYnLyUsY29sdW1uYWxpZ25HRlxvLyUrZ3JvdXBhbGlnbkdGXG8vJShyb3dzcGFuR1EiMUYnLyUrY29sdW1uc3BhbkdGY29Gam5GXW9GX28tRlg2Ji1GZW42KC1GaG42JFErJm1pbnVzOzM4MUYnRjFGam5GXW9GX29GYW9GZG9Gam5GXW9GX28tRlg2Ji1GZW42KC1GaG42JFElMzMxMkYnRjFGam5GXW9GX29GYW9GZG9Gam5GXW9GX28tRlg2Ji1GZW42KC1GaG42JFEsJm1pbnVzOzIxNjBGJ0YxRmpuRl1vRl9vRmFvRmRvRmpuRl1vRl9vLyUmYWxpZ25HUSVheGlzRicvRltvUSliYXNlbGluZUYnL0Zeb1EnY2VudGVyRicvRmBvUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNi8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmhxLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmNyLyUmZnJhbWVHRmNyLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGOS8lLWVxdWFsY29sdW1uc0dGOS8lLWRpc3BsYXlzdHlsZUdGOS8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zgci1GLjYwUSJdRidGMUY0RjdGOkY8Rj5GQEZCL0ZFUShwb3N0Zml4RidGRy9GS1EydmVyeXRoaW5tYXRoc3BhY2VGJ0ZMRk8tRi42MFEiPUYnRjEvRjVGOUY3L0Y7RjlGPEY+RkBGQi9GRVEmaW5maXhGJy9GSFEvdGhpY2ttYXRoc3BhY2VGJy9GS0ZldEZMRk9GKw==
H,U:=HessenbergForm[Q](A,output=['H','U']);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtaUdGJDYlUSJIRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2MFEiLEYnL0Y1USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMy8lKXN0cmV0Y2h5R0Y/LyUqc3ltbWV0cmljR0Y/LyUobGFyZ2VvcEdGPy8lLm1vdmFibGVsaW1pdHNHRj8vJSdhY2NlbnRHRj8vJSVmb3JtR1EmaW5maXhGJy8lJ2xzcGFjZUdRJDBlbUYnLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRicvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRi42JVEiVUYnRjFGNC1GODYwUSM6PUYnRjtGPS9GQUY/RkJGREZGRkhGSkZML0ZQUS90aGlja21hdGhzcGFjZUYnL0ZTRl1vRlVGWC1GIzYlLUYjNiUtRjg2MFEiW0YnRjsvRj5GM0Zbby9GQ0YzRkRGRkZIRkovRk1RJ3ByZWZpeEYnL0ZQUS50aGlubWF0aHNwYWNlRicvRlNGW3BGVUZYLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtSSNtbkdGJDYkUSI5RidGOy8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnEvJStncm91cGFsaWduR0ZecS8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcS1GZnA2KC1GaXA2JFEqJm1pbnVzOzYxRidGO0ZccUZfcUZhcUZjcUZmcS1GZnA2KC1GaXA2JFEjMzBGJ0Y7RlxxRl9xRmFxRmNxRmZxRlxxRl9xRmFxLUZjcDYoLUZmcDYoLUZpcDYkUSombWludXM7MzZGJ0Y7RlxxRl9xRmFxRmNxRmZxLUZmcDYoLUZpcDYkUSQzNDJGJ0Y7RlxxRl9xRmFxRmNxRmZxLUZmcDYoLUZpcDYkUSsmbWludXM7MTgwRidGO0ZccUZfcUZhcUZjcUZmcUZccUZfcUZhcS1GY3A2KC1GZnA2KC1GaXA2JFEiMEYnRjtGXHFGX3FGYXFGY3FGZnEtRmZwNigtRmlwNiRRKiZtaW51czs0NUYnRjtGXHFGX3FGYXFGY3FGZnFGXXJGXHFGX3FGYXEvJSZhbGlnbkdRJWF4aXNGJy9GXXFRKWJhc2VsaW5lRicvRmBxUSdjZW50ZXJGJy9GYnFRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YzLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGXHUvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZ3UvJSZmcmFtZUdGZ3UvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y/LyUtZXF1YWxjb2x1bW5zR0Y/LyUtZGlzcGxheXN0eWxlR0Y/LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmR1LUY4NjBRIl1GJ0Y7RmZvRltvRmdvRkRGRkZIRkovRk1RKHBvc3RmaXhGJ0Zqby9GU1EydmVyeXRoaW5tYXRoc3BhY2VGJ0ZVRlhGNy1GIzYlRmNvLUYjNiMtRmBwNjctRmNwNigtRmZwNigtRmlwNiRGV0Y7RlxxRl9xRmFxRmNxRmZxRmVzRmVzRlxxRl9xRmFxLUZjcDYoRmVzRml3RmVzRlxxRl9xRmFxLUZjcDYoRmVzLUZmcDYoLUkmbWZyYWNHRiQ2KC1GaXA2JFEiNUYnRjstRmlwNiRRIjZGJ0Y7LyUubGluZXRoaWNrbmVzc0dGZXEvJStkZW5vbWFsaWduR0ZldC8lKW51bWFsaWduR0ZldC8lKWJldmVsbGVkR0Y/RlxxRl9xRmFxRmNxRmZxRml3RlxxRl9xRmFxRl90RmJ0RmR0RmZ0Rmh0Rmp0Rl11Rl91RmJ1RmV1Rmh1Rmp1Rlx2Rl92RmF2RmN2RmV2Rmh2Rmp2
Verify that U A U^(-1) = H
MatrixMatrixMultiply[Q](MatrixMatrixMultiply[Q](U,A),MatrixInverse[Q](U));
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjlGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvLUZZNigtRmZuNiRRKiZtaW51czs2MUYnRi9GaW5GXG9GXm9GYG9GY28tRlk2KC1GZm42JFEjMzBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLUZWNigtRlk2KC1GZm42JFEqJm1pbnVzOzM2RidGL0ZpbkZcb0Zeb0Zgb0Zjby1GWTYoLUZmbjYkUSQzNDJGJ0YvRmluRlxvRl5vRmBvRmNvLUZZNigtRmZuNiRRKyZtaW51czsxODBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLUZWNigtRlk2KC1GZm42JFEiMEYnRi9GaW5GXG9GXm9GYG9GY28tRlk2KC1GZm42JFEqJm1pbnVzOzQ1RidGL0ZpbkZcb0Zeb0Zgb0Zjb0Zqb0ZpbkZcb0Zeby8lJmFsaWduR1ElYXhpc0YnL0ZqblEpYmFzZWxpbmVGJy9GXW9RJ2NlbnRlckYnL0Zfb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0Zpci8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zkcy8lJmZyYW1lR0Zkcy8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGYXMtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
CharacteristicPolynomial[Q](A,method=HessenbergAlgorithm);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY4LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvRmhuRltvRl1vLUZWNiYtRlk2KC1GZm42JFErJm1pbnVzOzM4MUYnRi9GaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2Ji1GWTYoLUZmbjYkUSUzMzEyRidGL0ZobkZbb0Zdb0Zfb0Zib0ZobkZbb0Zdby1GVjYmLUZZNigtRmZuNiRRLCZtaW51czsyMTYwRidGL0ZobkZbb0Zdb0Zfb0Zib0ZobkZbb0Zdby8lJmFsaWduR1ElYXhpc0YnL0ZpblEpYmFzZWxpbmVGJy9GXG9RJ2NlbnRlckYnL0Zeb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZmcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zhci8lJmZyYW1lR0Zhci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGXnItRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
Determinant[Q](A,method=GaussianElimination);
IiVnQA==
GaussianElimination[Q](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvLUZZNigtRmZuNiRRKSZtaW51czs0RidGL0ZobkZbb0Zdb0Zfb0Ziby1GWTYoLUkmbWZyYWNHRiQ2KC1GZm42JFEjMTBGJ0YvLUZmbjYkUSIzRidGLy8lLmxpbmV0aGlja25lc3NHRmFvLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmhwLyUpYmV2ZWxsZWRHRjdGaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2KC1GWTYoLUZmbjYkUSIwRidGL0ZobkZbb0Zdb0Zfb0Zib0ZYLUZZNigtRlxwNigtRmZuNiRRKSZtaW51czs1RidGLy1GZm42JFEiNEYnRi9GZHBGZnBGaXBGW3FGaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2KEZfcUZfcUZYRmhuRltvRl1vLyUmYWxpZ25HUSVheGlzRicvRmluUSliYXNlbGluZUYnL0Zcb0ZocC9GXm9RJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGXHMvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZ3MvJSZmcmFtZUdGZ3MvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y3LyUtZXF1YWxjb2x1bW5zR0Y3LyUtZGlzcGxheXN0eWxlR0Y3LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmRzLUYsNjBRIl1GJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTQ==
B := MatrixInverse[Q](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtSSNtbkdGJDYkRlRGOS8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnAvJStncm91cGFsaWduR0ZecC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcC1GZ282KC1JJm1mcmFjR0YkNihGaW8tRmpvNiRRIjJGJ0Y5LyUubGluZXRoaWNrbmVzc0dGZXAvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGZHEvJSliZXZlbGxlZEdGPUZccEZfcEZhcEZjcEZmcC1GZ282KC1GW3E2KEZpby1Gam82JFEiM0YnRjlGYHFGYnFGZXFGZ3FGXHBGX3BGYXBGY3BGZnBGXHBGX3BGYXAtRmRvNihGaHBGaXEtRmdvNigtRltxNihGaW8tRmpvNiRRIjRGJ0Y5RmBxRmJxRmVxRmdxRlxwRl9wRmFwRmNwRmZwRlxwRl9wRmFwLUZkbzYoRmlxRmJyLUZnbzYoLUZbcTYoRmlvLUZqbzYkUSI1RidGOUZgcUZicUZlcUZncUZccEZfcEZhcEZjcEZmcEZccEZfcEZhcC8lJmFsaWduR1ElYXhpc0YnL0ZdcFEpYmFzZWxpbmVGJy9GYHBGZHEvRmJwUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGMS8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRl50LyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRml0LyUmZnJhbWVHRml0LyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGPS8lLWVxdWFsY29sdW1uc0dGPS8lLWRpc3BsYXlzdHlsZUdGPS8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0ZmdC1GNjYwUSJdRidGOUZnbkY+RmhuRkJGREZGRkgvRktRKHBvc3RmaXhGJ0Zbby9GUVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZSRlU=
MatrixMatrixMultiply[Q](A,B);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvLUZZNigtRmZuNiRRIjBGJ0YvRmhuRltvRl1vRl9vRmJvRmRvRmhuRltvRl1vLUZWNihGZG9GWEZkb0ZobkZbb0Zdby1GVjYoRmRvRmRvRlhGaG5GW29GXW8vJSZhbGlnbkdRJWF4aXNGJy9GaW5RKWJhc2VsaW5lRicvRlxvUSdjZW50ZXJGJy9GXm9RJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGanAvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZXEvJSZmcmFtZUdGZXEvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y3LyUtZXF1YWxjb2x1bW5zR0Y3LyUtZGlzcGxheXN0eWxlR0Y3LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmJxLUYsNjBRIl1GJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTQ==
b:=Vector([1,0,2]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiYkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYmLUkkbXRkR0YkNigtSSNtbkdGJDYkRlRGOS8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnAvJStncm91cGFsaWduR0ZecC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcEZccEZfcEZhcC1GZG82Ji1GZ282KC1Gam82JFEiMEYnRjlGXHBGX3BGYXBGY3BGZnBGXHBGX3BGYXAtRmRvNiYtRmdvNigtRmpvNiRRIjJGJ0Y5RlxwRl9wRmFwRmNwRmZwRlxwRl9wRmFwLyUmYWxpZ25HUSVheGlzRicvRl1wUSliYXNlbGluZUYnL0ZgcFEnY2VudGVyRicvRmJwUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGMS8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmNyLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRl5zLyUmZnJhbWVHRl5zLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGPS8lLWVxdWFsY29sdW1uc0dGPS8lLWRpc3BsYXlzdHlsZUdGPS8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zbcy1GNjYwUSJdRidGOUZnbkY+RmhuRkJGREZGRkgvRktRKHBvc3RmaXhGJ0Zbby9GUVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZSRlU=
S:=LinearSolve[Q](A,b);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiU0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUYjNiUtRjY2MFEiW0YnRjkvRjxGMUY+L0ZBRjFGQkZERkZGSC9GS1EncHJlZml4RicvRk5RLnRoaW5tYXRoc3BhY2VGJy9GUUZeb0ZSRlUtRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JJm1mcmFjR0YkNigtSSNtbkdGJDYkUSI1RidGOS1GX3A2JFEiM0YnRjkvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRmpwLyUpYmV2ZWxsZWRHRj0vJSlyb3dhbGlnbkdRIUYnLyUsY29sdW1uYWxpZ25HRmFxLyUrZ3JvdXBhbGlnbkdGYXEvJShyb3dzcGFuR0ZncC8lK2NvbHVtbnNwYW5HRmdwRl9xRmJxRmRxLUZmbzYmLUZpbzYoLUZfcDYkRlRGOUZfcUZicUZkcUZmcUZocUZfcUZicUZkcS1GZm82Ji1GaW82KC1GXHA2KC1GX3A2JFEjMTFGJ0Y5LUZfcDYkUSMxNUYnRjlGZXBGaHBGW3FGXXFGX3FGYnFGZHFGZnFGaHFGX3FGYnFGZHEvJSZhbGlnbkdRJWF4aXNGJy9GYHFRKWJhc2VsaW5lRicvRmNxRmpwL0ZlcVEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjEvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0Zocy8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZjdC8lJmZyYW1lR0ZjdC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRj0vJS1lcXVhbGNvbHVtbnNHRj0vJS1kaXNwbGF5c3R5bGVHRj0vJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGYHQtRjY2MFEiXUYnRjlGaW5GPkZqbkZCRkRGRkZIL0ZLUShwb3N0Zml4RidGXW8vRlFRMnZlcnl0aGlubWF0aHNwYWNlRidGUkZVLUY2NjBRIixGJ0Y5RjsvRj9GMUZARkJGREZGRkhGSi9GTlEkMGVtRicvRlFRM3Zlcnl0aGlja21hdGhzcGFjZUYnRlJGVS1GIzYlRmZuLUYjNiMtRiw2JUZhcUYvRjJGZnU=
MatrixVectorMultiply[Q](A,S[1])=b;
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtb0dGJDYwUSJbRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUpc3RyZXRjaHlHRjYvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJWZvcm1HUSdwcmVmaXhGJy8lJ2xzcGFjZUdRLnRoaW5tYXRoc3BhY2VGJy8lJ3JzcGFjZUdGSS8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYjLUknbXRhYmxlR0YkNjctSSRtdHJHRiQ2Ji1JJG10ZEdGJDYoLUkjbW5HRiQ2JEZORjEvJSlyb3dhbGlnbkdRIUYnLyUsY29sdW1uYWxpZ25HRlxvLyUrZ3JvdXBhbGlnbkdGXG8vJShyb3dzcGFuR1EiMUYnLyUrY29sdW1uc3BhbkdGY29Gam5GXW9GX28tRlg2Ji1GZW42KC1GaG42JFEiMEYnRjFGam5GXW9GX29GYW9GZG9Gam5GXW9GX28tRlg2Ji1GZW42KC1GaG42JFEiMkYnRjFGam5GXW9GX29GYW9GZG9Gam5GXW9GX28vJSZhbGlnbkdRJWF4aXNGJy9GW29RKWJhc2VsaW5lRicvRl5vUSdjZW50ZXJGJy9GYG9RJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y2LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGYXEvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGXHIvJSZmcmFtZUdGXHIvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y5LyUtZXF1YWxjb2x1bW5zR0Y5LyUtZGlzcGxheXN0eWxlR0Y5LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmlxLUYuNjBRIl1GJ0YxRjRGN0Y6RjxGPkZARkIvRkVRKHBvc3RmaXhGJ0ZHL0ZLUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkxGTy1GLjYwUSI9RidGMS9GNUY5RjcvRjtGOUY8Rj5GQEZCL0ZFUSZpbmZpeEYnL0ZIUS90aGlja21hdGhzcGFjZUYnL0ZLRl50RkxGT0Yr
A[2,1..3] := A[1,1..3]-2*A[3,1..3];
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYlLUkjbW5HRiQ2JFEiMkYnL0Y2USdub3JtYWxGJy1JI21vR0YkNjBRIixGJ0Y+LyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y0LyUpc3RyZXRjaHlHRkYvJSpzeW1tZXRyaWNHRkYvJShsYXJnZW9wR0ZGLyUubW92YWJsZWxpbWl0c0dGRi8lJ2FjY2VudEdGRi8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EkMGVtRicvJSdyc3BhY2VHUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGJy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY7NiRGaG5GPi1GQTYwUSMuLkYnRj5GRC9GSEZGRklGS0ZNRk9GUS9GVFEocG9zdGZpeEYnL0ZXUTBtZWRpdW1tYXRoc3BhY2VGJy9GWkZYRmZuRmluLUY7NiRRIjNGJ0Y+LyUvc3Vic2NyaXB0c2hpZnRHUSIwRictRkE2MFEjOj1GJ0Y+RkRGY29GSUZLRk1GT0ZRRlMvRldRL3RoaWNrbWF0aHNwYWNlRicvRlpGY3BGZm5GaW4tRiM2JS1GQTYwUSJbRidGPi9GRUY0RmNvL0ZKRjRGS0ZNRk9GUS9GVFEncHJlZml4RicvRldRLnRoaW5tYXRoc3BhY2VGJy9GWkZfcUZmbkZpbi1JJ210YWJsZUdGJDY1LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1GOzYkUSombWludXM7NTFGJ0Y+LyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zfci8lK2dyb3VwYWxpZ25HRl9yLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmZyLUZocTYoLUY7NiRRJDMyNEYnRj5GXXJGYHJGYnJGZHJGZ3ItRmhxNigtRjs2JFErJm1pbnVzOzMzMEYnRj5GXXJGYHJGYnJGZHJGZ3JGXXJGYHJGYnIvJSZhbGlnbkdRJWF4aXNGJy9GXnJRKWJhc2VsaW5lRicvRmFyUSdjZW50ZXJGJy9GY3JRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGYHQvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGW3UvJSZmcmFtZUdGW3UvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0ZGLyUtZXF1YWxjb2x1bW5zR0ZGLyUtZGlzcGxheXN0eWxlR0ZGLyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmh0LUZBNjBRIl1GJ0Y+RmpwRmNvRltxRktGTUZPRlFGZG9GXnEvRlpRMnZlcnl0aGlubWF0aHNwYWNlRidGZm5GaW4=
A;
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjlGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvLUZZNigtRmZuNiRRKiZtaW51czszNkYnRi9GaW5GXG9GXm9GYG9GY28tRlk2KC1GZm42JFEjMzBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLUZWNigtRlk2KC1GZm42JFEqJm1pbnVzOzUxRidGL0ZpbkZcb0Zeb0Zgb0Zjby1GWTYoLUZmbjYkUSQzMjRGJ0YvRmluRlxvRl5vRmBvRmNvLUZZNigtRmZuNiRRKyZtaW51czszMzBGJ0YvRmluRlxvRl5vRmBvRmNvRmluRlxvRl5vLUZWNihGam8tRlk2KC1GZm42JFErJm1pbnVzOzE4MEYnRi9GaW5GXG9GXm9GYG9GY28tRlk2KC1GZm42JFEkMTgwRidGL0ZpbkZcb0Zeb0Zgb0Zjb0ZpbkZcb0Zeby8lJmFsaWduR1ElYXhpc0YnL0ZqblEpYmFzZWxpbmVGJy9GXW9RJ2NlbnRlckYnL0Zfb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0Zpci8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zkcy8lJmZyYW1lR0Zkcy8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGYXMtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
B := NullSpace[Q](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRInxmckYnRjkvRjxGMUY+L0ZBRjFGQkZERkZGSC9GS1EncHJlZml4RicvRk5RLnRoaW5tYXRoc3BhY2VGJy9GUUZcb0ZSRlUtRiM2Iy1GIzYlLUY2NjBRIltGJ0Y5RmduRj5GaG5GQkZERkZGSEZpbkZbb0Zdb0ZSRlUtRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjJGJ0Y5LyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0ZmcC8lK2dyb3VwYWxpZ25HRmZwLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl1xRmRwRmdwRmlwLUZbcDYmLUZecDYoLUkmbWZyYWNHRiQ2KC1GYXA2JFEiNEYnRjktRmFwNiRRIjNGJ0Y5LyUubGluZXRoaWNrbmVzc0dGXXEvJStkZW5vbWFsaWduR1EnY2VudGVyRicvJSludW1hbGlnbkdGYXIvJSliZXZlbGxlZEdGPUZkcEZncEZpcEZbcUZecUZkcEZncEZpcC1GW3A2Ji1GXnA2KC1GYXA2JEZURjlGZHBGZ3BGaXBGW3FGXnFGZHBGZ3BGaXAvJSZhbGlnbkdRJWF4aXNGJy9GZXBRKWJhc2VsaW5lRicvRmhwRmFyL0ZqcFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjEvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0Zocy8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZjdC8lJmZyYW1lR0ZjdC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRj0vJS1lcXVhbGNvbHVtbnNHRj0vJS1kaXNwbGF5c3R5bGVHRj0vJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGYHQtRjY2MFEiXUYnRjlGZ25GPkZobkZCRkRGRkZIL0ZLUShwb3N0Zml4RidGW28vRlFRMnZlcnl0aGlubWF0aHNwYWNlRidGUkZVLUY2NjBRInxockYnRjlGZ25GPkZobkZCRkRGRkZIRml1RltvRlt2RlJGVQ==
MatrixVectorMultiply[Q](A,B[1]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JI21uR0YkNiRRIjBGJ0YvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zbby8lK2dyb3VwYWxpZ25HRltvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmJvRmluRlxvRl5vRlVGVS8lJmFsaWduR1ElYXhpc0YnL0ZqblEpYmFzZWxpbmVGJy9GXW9RJ2NlbnRlckYnL0Zfb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZicC8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZdcS8lJmZyYW1lR0ZdcS8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGanAtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
Zp[x] and Zp[x]/<m(x)>
R:=table():
For the examples, let's define the operations in a table instead.
First, consider the R = Zp[x], the univariate polynomials mod p as a commutative ring.
p:=11:
R[`0`]:=modp1(Zero(x),p):
R[`1`]:=modp1(One(x),p):
R[`+`]:=proc() modp1(Add(args),p) end:
R[`-`]:=proc() modp1(Subtract(args),p) end:
R[`*`]:=proc() modp1(Multiply(args),p) end:
R[`=`]:=proc(a,b) evalb(a=b) end:
r:=rand(0..1):
A:=LinearAlgebra:-RandomMatrix(5,generator=proc() if r()>0 then R[`0`] else modp1(Randpoly(4,x),p) fi end);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2OS1JJG10ckdGJDYqLUkkbXRkR0YkNigtRiM2JS1GIzYlLUY2NjBRIihGJ0Y5RmduRj5GaG5GQkZERkZGSEZpbkZbb0Zdb0ZSRlUtRiM2Ky1GIzYlLUkjbW5HRiQ2JFEiNkYnRjktRjY2MFExJkludmlzaWJsZVRpbWVzO0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUSQwZW1GJy9GUUZccUZSRlUtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GZXA2JFEiNEYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2NjBRIitGJ0Y5RjtGPkZARkJGREZGRkhGSi9GTlEwbWVkaXVtbWF0aHNwYWNlRicvRlFGXnJGUkZVLUYjNiUtRmVwNiRRIjlGJ0Y5RmhwLUZfcTYlRmFxLUZlcDYkUSIzRidGOUZncUZqcS1GIzYlLUZlcDYkUSI1RidGOUZocC1GX3E2JUZhcS1GZXA2JFEiMkYnRjlGZ3FGanEtRiM2I0ZhcUZqcS1GZXA2JFEjMTBGJ0Y5LUY2NjBRIilGJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVS1GNjYwUSZ+bW9kfkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EhRidGW3FGXXFGUkZVLUZlcDYkUSMxMUYnRjkvJSlyb3dhbGlnbkdGZHQvJSxjb2x1bW5hbGlnbkdGZHQvJStncm91cGFsaWduR0ZkdC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZgdS1GZ282KC1GIzYlLUZlcDYkUSIwRidGOUZgdEZldEZodEZqdEZcdUZedUZhdUZjdUZjdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2KS1GIzYlRmZzRmhwRl5xRmpxLUYjNiUtRmVwNiRRIjdGJ0Y5RmhwRl9zRmpxLUYjNiVGZHFGaHBGYXFGanFGYnJGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXVGaHRGanRGXHUtRmRvNiotRmdvNigtRiM2JS1GIzYlRl1wLUYjNistRiM2I0ZecUZqcS1GIzYjRmVyRmpxLUYjNiVGZ3JGaHBGX3NGanEtRiM2JUZmdkZocEZhcUZqcUZmc0Zpc0ZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2Ky1GIzYlLUZlcDYkUSI4RidGOUZocEZecUZqcUZgckZqcS1GIzYjRl9zRmpxLUYjNiVGZnNGaHBGYXFGanFGZnZGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXVGY3VGY3VGY3VGaHRGanRGXHUtRmRvNiotRmdvNigtRiM2JS1GIzYlRl1wLUYjNilGYnZGanFGanJGanEtRiM2JUZkcEZocEZhcUZqcUZkcEZpc0ZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2Ky1GIzYlRmFzRmhwRl5xRmpxLUYjNiVGZHFGaHBGZXJGanEtRiM2JUZhc0ZocEZfc0ZqcUZbeEZqcUZickZpc0ZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2KS1GIzYlRmJyRmhwRl5xRmpxRmZ6RmpxRml2RmpxRmRxRmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1RmN1RmN1Rmh0Rmp0Rlx1LUZkbzYqLUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYrRmV3RmpxLUYjNiVGZnZGaHBGZXJGanFGaXdGanFGZHNGanFGZ3hGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXUtRmdvNigtRiM2JS1GIzYlRl1wLUYjNitGZXhGanEtRiM2JUZkcEZocEZlckZqcUZpd0ZqcS1GIzYlRmFzRmhwRmFxRmpxRmJyRmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYrRmV4RmpxRmByRmpxLUYjNiVGZnNGaHBGX3NGanEtRiM2JUZnckZocEZhcUZqcUZneEZpc0ZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2KS1GIzYlRmZ2RmhwRl5xRmpxLUYjNiVGZ3hGaHBGZXJGanEtRiM2JUZickZocEZhcUZqcS1GZXA2JEZURjlGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXUtRmdvNigtRiM2JS1GIzYlRl1wLUYjNiktRiM2JUZnckZocEZecUZqcUZmXGxGanFGZHZGanFGXHNGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXVGaHRGanRGXHUtRmRvNipGY3UtRmdvNigtRiM2JS1GIzYlRl1wLUYjNitGYnBGanFGZ3dGanEtRiM2JUZneEZocEZfc0ZqcUZpdkZqcUZneEZpc0ZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2K0ZeX2xGanEtRiM2JUZhc0ZocEZlckZqcUZpd0ZqcS1GIzYlRlxzRmhwRmFxRmpxRmdyRmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1RmN1RmN1Rmh0Rmp0Rlx1LyUmYWxpZ25HUSVheGlzRicvRml0USliYXNlbGluZUYnL0ZbdVEnY2VudGVyRicvRl11USd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGMS8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmVhbC8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZgYmwvJSZmcmFtZUdGYGJsLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGPS8lLWVxdWFsY29sdW1uc0dGPS8lLWRpc3BsYXlzdHlsZUdGPS8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0ZdYmwtRjY2MFEiXUYnRjlGZ25GPkZobkZCRkRGRkZIRlx0RltvRl50RlJGVQ==
StronglyConnectedBlocks[R](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW5HRiQ2JFEiMEYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNjBRIixGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR1EldHJ1ZUYnLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EkMGVtRicvJSdyc3BhY2VHUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGJy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUYzNjBRIltGJ0YvL0Y3RjsvRjpGOC9GPUY7Rj5GQEZCRkQvRkdRJ3ByZWZpeEYnL0ZKUS50aGlubWF0aHNwYWNlRicvRk1Gam5GT0ZSLUYjNiUtRiM2JUZXLUYjNiMtSSdtdGFibGVHRiQ2OC1JJG10ckdGJDYpLUkkbXRkR0YkNigtRiM2JS1GIzYlLUYzNjBRIihGJ0YvRlpGZW5GZm5GPkZARkJGREZnbkZpbkZbb0ZPRlItRiM2Ky1GIzYlLUYsNiRRIjZGJ0YvLUYzNjBRMSZJbnZpc2libGVUaW1lcztGJ0YvRjZGZW5GPEY+RkBGQkZERkZGSS9GTUZLRk9GUi1JJW1zdXBHRiQ2JS1JI21pR0YkNiVRInhGJy8lJ2l0YWxpY0dGOy9GMFEnaXRhbGljRictRiw2JFEiNEYnRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYzNjBRIitGJ0YvRjZGZW5GPEY+RkBGQkZERkYvRkpRMG1lZGl1bW1hdGhzcGFjZUYnL0ZNRmJyRk9GUi1GIzYlLUYsNiRRIjlGJ0YvRmlwLUZecTYlRmBxLUYsNiRRIjNGJ0YvRltyRl5yLUYjNiUtRiw2JFEiNUYnRi9GaXAtRl5xNiVGYHEtRiw2JFEiMkYnRi9GW3JGXnItRiM2I0ZgcUZeci1GLDYkUSMxMEYnRi8tRjM2MFEiKUYnRi9GWkZlbkZmbkY+RkBGQkZEL0ZHUShwb3N0Zml4RidGaW4vRk1RMnZlcnl0aGlubWF0aHNwYWNlRidGT0ZSLUYzNjBRJn5tb2R+RidGL0Y2RmVuRjxGPkZARkJGRC9GR1EhRidGSUZccUZPRlItRiw2JFEjMTFGJ0YvLyUpcm93YWxpZ25HRmh0LyUsY29sdW1uYWxpZ25HRmh0LyUrZ3JvdXBhbGlnbkdGaHQvJShyb3dzcGFuR1EiMUYnLyUrY29sdW1uc3BhbkdGZHUtRmlvNigtRiM2JS1GIzYlRl9wLUYjNiktRiM2JUZqc0ZpcEZdcUZeci1GIzYlLUYsNiRRIjdGJ0YvRmlwRmNzRl5yLUYjNiVGaHFGaXBGYHFGXnJGZnJGXXRGZHRGaXRGXHVGXnVGYHVGYnVGZXUtRmlvNigtRiM2JUYrRmR0Rml0Rlx1Rl51RmB1RmJ1RmV1Rmh2Rlx1Rl51RmB1LUZmbzYpRmh2Rmh2LUZpbzYoLUYjNiUtRiM2JUZfcC1GIzYrRmRwRl5yLUYjNiNGaXJGXnItRiM2JS1GLDYkUSI4RidGL0ZpcEZjc0ZeckZmdkZeckZqd0ZddEZkdEZpdEZcdUZedUZgdUZidUZldS1GaW82KC1GIzYlLUYjNiVGX3AtRiM2Ky1GIzYlRltzRmlwRl1xRl5yLUYjNiVGZXNGaXBGaXJGXnItRiM2JUZbc0ZpcEZjc0Zeci1GIzYlRmBzRmlwRmBxRl5yRltzRl10RmR0Rml0Rlx1Rl51RmB1RmJ1RmV1Rlx1Rl51RmB1LUZmbzYpLUZpbzYoLUYjNiUtRiM2JUZfcC1GIzYrLUYjNiNGXXFGXnJGZndGXnJGaXhGXnItRiM2JUZjdkZpcEZgcUZeckZqc0ZddEZkdEZpdEZcdUZedUZgdUZidUZldUZodi1GaW82KC1GIzYlLUYjNiVGX3AtRiM2Ky1GIzYlRmp3RmlwRl1xRl5yRmRyRl5yLUYjNiNGY3NGXnItRiM2JUZqc0ZpcEZgcUZeckZjdkZddEZkdEZpdEZcdUZedUZgdUZidUZldUZodkZcdUZedUZgdS1GZm82KS1GaW82KC1GIzYlLUYjNiVGX3AtRiM2KUZfdkZeckZec0Zeci1GIzYlRmZwRmlwRmBxRl5yRmZwRl10RmR0Rml0Rlx1Rl51RmB1RmJ1RmV1Rmh2LUZpbzYoLUYjNiUtRiM2JUZfcC1GIzYrLUYjNiVGZXNGaXBGXXFGXnItRiM2JUZocUZpcEZpckZeci1GIzYlRmVzRmlwRmNzRl5yRml5Rl5yRmZyRl10RmR0Rml0Rlx1Rl51RmB1RmJ1RmV1LUZpbzYoLUYjNiUtRiM2JUZfcC1GIzYpLUYjNiVGZnJGaXBGXXFGXnJGYVxsRl5yRmZ2Rl5yRmhxRl10RmR0Rml0Rlx1Rl51RmB1RmJ1RmV1Rlx1Rl51RmB1LyUmYWxpZ25HUSVheGlzRicvRl11USliYXNlbGluZUYnL0ZfdVEnY2VudGVyRicvRmF1USd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGOy8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmpdbC8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZlXmwvJSZmcmFtZUdGZV5sLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGOC8lLWVxdWFsY29sdW1uc0dGOC8lLWRpc3BsYXlzdHlsZUdGOC8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0ZiXmwtRjM2MFEiXUYnRi9GWkZlbkZmbkY+RkBGQkZERmB0RmluRmJ0Rk9GUkYyLUYjNiVGVy1GIzYjLUZjbzY1LUZmbzYmLUZpbzYoLUYjNiUtRiM2JUZfcC1GIzYpLUYjNiVGY3ZGaXBGXXFGXnItRiM2JUZqd0ZpcEZpckZeci1GIzYlRmZyRmlwRmBxRl5yLUYsNiRGUUYvRl10RmR0Rml0Rlx1Rl51RmB1RmJ1RmV1Rlx1Rl51RmB1Rl1dbEZgXWxGYl1sRmRdbEZmXWxGaF1sRltebEZdXmxGYF5sRmNebEZmXmxGaF5sRmpebEZdX2xGX19sRmFfbEZjX2xGZl9sRmhfbEZoX2w=
CharacteristicPolynomial[R](A,method=BerkowitzAlgorithm);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY6LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JEZMRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZib0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zgby8lLGNvbHVtbmFsaWduR0Zgby8lK2dyb3VwYWxpZ25HRmBvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl9wRmdvRmlvRltwLUZWNiYtRlk2KC1GIzYlLUYjNiUtRiw2MFEiKEYnRi9GMkY1RjhGOkY8Rj5GQEZCRkVGSEZKRk0tRiM2KS1GIzYlLUZobjYkUSIzRidGLy1GLDYwUTEmSW52aXNpYmxlVGltZXM7RidGL0Zdb0Y1Rl5vRjpGPEY+RkAvRkNRJmluZml4RidGYW9GY29GSkZNLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR0Y0L0YwUSdpdGFsaWNGJy1GaG42JFEiNEYnRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYsNjBRIitGJ0YvRl1vRjVGXm9GOkY8Rj5GQEZncS9GRlEwbWVkaXVtbWF0aHNwYWNlRicvRklGXnNGSkZNLUYjNiUtRmhuNiRRIjdGJ0YvRmRxLUZqcTYlRlxyRmFxRmdyRmpyLUYjNiVGYXFGZHEtRmpxNiVGXHItRmhuNiRRIjJGJ0YvRmdyRmpyLUYjNiUtRmhuNiRRIjlGJ0YvRmRxRlxyLUYsNjBRIilGJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTUZqbkZkb0Znb0Zpb0ZbcEZdcEZgcEZnb0Zpb0ZbcC1GVjYmLUZZNigtRiM2JS1GIzYlRmpwLUYjNjMtRiM2JS1GaG42JFEiNUYnRi9GZHEtRmpxNiVGXHItRmhuNiRRIjhGJ0YvRmdyRmpyLUYjNiVGZHJGZHEtRmpxNiVGXHJGYnNGZ3JGanItRiM2JUZbdEZkcS1GanE2JUZcci1GaG42JFEiNkYnRi9GZ3JGanItRiM2JUZic0ZkcS1GanE2JUZcckZmdUZnckZqckZfcUZqci1GIzYlRlt2RmRxRmVzRmpyRmdzRmpyLUYjNiVGZnVGZHFGXHJGanJGZnVGY3RGam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AtRlY2Ji1GWTYoLUYjNiUtRiM2JUZqcC1GIzY5LUYjNiVGYXFGZHEtRmpxNiVGXHItRmhuNiRRIzEyRidGL0ZnckZqci1GIzYlRmZ2RmRxLUZqcTYlRlxyRmRvRmdyRmpyLUYjNiVGZnZGZHEtRmpxNiVGXHItRmhuNiRRIzEwRidGL0ZnckZqci1GIzYlRmFxRmRxLUZqcTYlRlxyRmB0RmdyRmpyRmR1RmpyLUYjNiVGYnNGZHFGZHZGanItRiM2JUZkckZkcUZbd0Zqci1GIzYlRmZ2RmRxRmlxRmpyLUYjNiVGZHJGZHFGZXNGanItRiM2JUZic0ZkcUZpc0Zqci1GIzYlRmRyRmRxRlxyRmpyRmB0RmN0RmpuRmRvRmdvRmlvRltwRl1wRmBwRmdvRmlvRltwLUZWNiYtRlk2KC1GIzYlLUYjNiVGanAtRiM2QS1GIzYlRmB0RmRxLUZqcTYlRlxyLUZobjYkUSMxNkYnRi9GZ3JGanItRiM2JUZic0ZkcS1GanE2JUZcci1GaG42JFEjMTVGJ0YvRmdyRmpyLUYjNiVGYXFGZHEtRmpxNiVGXHItRmhuNiRRIzE0RidGL0ZnckZqci1GIzYlRmFxRmRxLUZqcTYlRlxyLUZobjYkUSMxM0YnRi9GZ3JGanItRiM2JUZkckZkcUZdeEZqci1GIzYlRmFxRmRxRmR4RmpyLUYjNiVGanhGZHFGaHhGanItRiM2JUZic0ZkcUZfeUZqckZedkZqci1GIzYjRmR2RmpyLUYjNiVGW3RGZHFGW3dGanItRiM2I0ZpcUZqckZgc0Zqci1GIzYlRmp4RmRxRmlzRmpyLUYjNiNGXHJGanJGYnNGY3RGam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AtRlY2Ji1GWTYoLUYjNiUtRiM2JUZqcC1GIzZFLUYjNiVGYXFGZHEtRmpxNiVGXHItRmhuNiRRIzIwRidGL0ZnckZqci1GIzYlRlt0RmRxLUZqcTYlRlxyLUZobjYkUSMxOUYnRi9GZ3JGanItRiM2JUZhcUZkcS1GanE2JUZcci1GaG42JFEjMThGJ0YvRmdyRmpyLUYjNiVGW3RGZHEtRmpxNiVGXHItRmhuNiRRIzE3RidGL0ZnckZqci1GIzYlRlt0RmRxRml6RmpyLUYjNiVGanhGZHFGYFtsRmpyRmVbbEZqci1GIzYlRmRyRmRxRl5cbEZqci1GIzYlRlt2RmRxRl14RmpyLUYjNiVGW3RGZHFGZHhGanItRiM2JUZkckZkcUZpdUZqckZedkZqckZbXWxGanJGY3lGanItRiM2JUZgdEZkcUZpcUZqci1GIzYlRmZ1RmRxRmVzRmpyLUYjNiVGZnVGZHFGaXNGanJGX3dGY3RGam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AvJSZhbGlnbkdRJWF4aXNGJy9GaG9RKWJhc2VsaW5lRicvRmpvUSdjZW50ZXJGJy9GXHBRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGamFsLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmVibC8lJmZyYW1lR0ZlYmwvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y3LyUtZXF1YWxjb2x1bW5zR0Y3LyUtZGlzcGxheXN0eWxlR0Y3LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmJibC1GLDYwUSJdRidGL0YyRjVGOEY6RjxGPkZARmZ0RkVGaHRGSkZN
CharacteristicPolynomial[R](A,output=factored);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW5HRiQ2JFEiMEYnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy1JI21vR0YkNjBRIixGJ0YvLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR1EldHJ1ZUYnLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EkMGVtRicvJSdyc3BhY2VHUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGJy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUYzNjBRIltGJ0YvL0Y3RjsvRjpGOC9GPUY7Rj5GQEZCRkQvRkdRJ3ByZWZpeEYnL0ZKUS50aGlubWF0aHNwYWNlRicvRk1Gam5GT0ZSLUYjNiUtRiM2JUZXLUYjNiMtSSdtdGFibGVHRiQ2OS1JJG10ckdGJDYmLUkkbXRkR0YkNigtRiM2JS1GLDYkRlFGLy1GMzYwUSZ+bW9kfkYnRi9GNkZlbkY8Rj5GQEZCRkQvRkdRIUYnRkkvRk1GS0ZPRlItRiw2JFEjMTFGJ0YvLyUpcm93YWxpZ25HRmNwLyUsY29sdW1uYWxpZ25HRmNwLyUrZ3JvdXBhbGlnbkdGY3AvJShyb3dzcGFuR1EiMUYnLyUrY29sdW1uc3BhbkdGYHFGaHBGanBGXHEtRmZvNiYtRmlvNigtRiM2JS1GIzYlLUYzNjBRIihGJ0YvRlpGZW5GZm5GPkZARkJGREZnbkZpbkZbb0ZPRlItRiM2Ky1GIzYlLUYsNiRRIzEwRidGLy1GMzYwUTEmSW52aXNpYmxlVGltZXM7RidGL0Y2RmVuRjxGPkZARkJGREZGRklGZHBGT0ZSLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR0Y7L0YwUSdpdGFsaWNGJy1GLDYkUSI0RidGLy8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRjM2MFEiK0YnRi9GNkZlbkY8Rj5GQEZCRkRGRi9GSlEwbWVkaXVtbWF0aHNwYWNlRicvRk1GXXRGT0ZSLUYjNiVGY3NGZXItRmlyNiVGW3MtRiw2JFEiM0YnRi9GZnNGaXMtRiM2JUZjdEZlci1GaXI2JUZbcy1GLDYkUSIyRidGL0Zmc0Zpcy1GIzYlLUYsNiRRIjdGJ0YvRmVyRltzRmlzRl1wLUYzNjBRIilGJ0YvRlpGZW5GZm5GPkZARkJGRC9GR1EocG9zdGZpeEYnRmluL0ZNUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRk9GUkZfcEZlcEZocEZqcEZccUZecUZhcUZocEZqcEZccS1GZm82Ji1GaW82KC1GIzYlLUYjNiVGW3ItRiM2MS1GIzYlLUYsNiRRIjlGJ0YvRmVyLUZpcjYlRltzLUYsNiRRIjhGJ0YvRmZzRmlzLUYjNiVGanRGZXItRmlyNiVGW3NGX3VGZnNGaXMtRiM2JS1GLDYkUSI1RidGL0Zlci1GaXI2JUZbc0Zjd0Zmc0Zpcy1GIzYlRmp0RmVyRmhyRmlzLUYjNiVGY3RGZXJGYXRGaXNGZnRGaXMtRiM2JUZickZlckZbc0Zpcy1GLDYkUSI2RidGL0ZidUZfcEZlcEZocEZqcEZccUZecUZhcUZocEZqcEZccS1GZm82Ji1GaW82KC1GIzYlLUYjNiVGW3ItRiM2NS1GIzYlRmNzRmVyLUZpcjYlRltzRmVwRmZzRmlzLUYjNiVGZXZGZXItRmlyNiVGW3NGZXZGZnNGaXNGY3ZGaXMtRiM2JUZeeEZlckZfd0Zpcy1GIzYlRmV2RmVyLUZpcjYlRltzRl54RmZzRmlzLUYjNiVGY3RGZXJGaHJGaXMtRiM2JUZjd0ZlckZhdEZpcy1GIzYjRmh0RmlzLUYjNiVGanRGZXJGW3NGaXNGY3NGYnVGX3BGZXBGaHBGanBGXHFGXnFGYXFGaHBGanBGXHEtRmZvNiYtRmlvNigtRiM2JS1GIzYlRltyLUYjNj0tRiM2JUZldkZlci1GaXI2JUZbcy1GLDYkUSMxNkYnRi9GZnNGaXMtRiM2JUZqdEZlci1GaXI2JUZbcy1GLDYkUSMxNUYnRi9GZnNGaXMtRiM2JUZqdEZlci1GaXI2JUZbcy1GLDYkUSMxNEYnRi9GZnNGaXMtRiM2JUZickZlci1GaXI2JUZbcy1GLDYkUSMxMkYnRi9GZnNGaXMtRiM2JUZjc0Zlci1GaXI2JUZbc0ZickZmc0Zpcy1GIzYlRmNzRmVyRmF5RmlzLUYjNiVGX3VGZXJGaHZGaXMtRiM2JUZfdUZlckZfd0Zpcy1GIzYlRmp0RmVyRmd5RmlzLUYjNiVGX3VGZXJGZndGaXMtRiM2JUZjd0ZlckZockZpcy1GIzYlRmV2RmVyRmF0RmlzLUYjNiVGX3VGZXJGaHRGaXMtRiM2JUZeeEZlckZbc0ZidUZfcEZlcEZocEZqcEZccUZecUZhcUZocEZqcEZccS8lJmFsaWduR1ElYXhpc0YnL0ZpcFEpYmFzZWxpbmVGJy9GW3FRJ2NlbnRlckYnL0ZdcVEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjsvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZqXmwvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZV9sLyUmZnJhbWVHRmVfbC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjgvJS1lcXVhbGNvbHVtbnNHRjgvJS1kaXNwbGF5c3R5bGVHRjgvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGYl9sLUYzNjBRIl1GJ0YvRlpGZW5GZm5GPkZARkJGREZldUZpbkZndUZPRlJGMi1GIzYlRlctRiM2Iy1GY282NkZlby1GZm82Ji1GaW82KC1GIzYlLUYjNiVGW3ItRiM2KS1GIzYlRmNzRmVyRmhyRmlzRmp3RmlzRl96RmlzRmJyRmJ1Rl9wRmVwRmhwRmpwRlxxRl5xRmFxRmhwRmpwRlxxRl1ebEZgXmxGYl5sRmRebEZmXmxGaF5sRltfbEZdX2xGYF9sRmNfbEZmX2xGaF9sRmpfbEZdYGxGX2BsRmFgbEZjYGxGZmBsRmhgbEZoYGw=
Determinant[R](A,method=BerkowitzAlgorithm);
LSUmbW9kcDFHNiQtJSpDb252ZXJ0SW5HNiQsRiomIiIpIiIiKUkieEc2IiIjP0YrRisqJiIiKkYrKUYtIiM+RitGKyomRipGKylGLSIjPUYrRisqJkYxRispRi0iIzxGK0YrKiZGMUYrKUYtIiM7RitGKyokKUYtIiM6RitGKyomRipGKylGLSIjOUYrRisqJiIiKEYrKUYtIiM4RitGKyomIiIkRispRi0iIzdGK0YrKiZGMUYrKUYtIiM2RitGKyomRkRGKylGLUYqRitGKyomRkRGKylGLUZERitGKyomIiM1RispRi0iIidGK0YrKiZGREYrKUYtIiImRitGKyomIiIjRispRi0iIiVGK0YrKiZGVUYrKUYtRkhGK0YrKiZGVUYrKUYtRlpGK0YrKiZGVUYrRi1GK0YrRi1GTQ==
Determinant[R](A,method=MinorExpansion);
LSUmbW9kcDFHNiQtJSpDb252ZXJ0SW5HNiQsRiomIiIpIiIiKUkieEc2IiIjP0YrRisqJiIiKkYrKUYtIiM+RitGKyomRipGKylGLSIjPUYrRisqJkYxRispRi0iIzxGK0YrKiZGMUYrKUYtIiM7RitGKyokKUYtIiM6RitGKyomRipGKylGLSIjOUYrRisqJiIiKEYrKUYtIiM4RitGKyomIiIkRispRi0iIzdGK0YrKiZGMUYrKUYtIiM2RitGKyomRkRGKylGLUYqRitGKyomRkRGKylGLUZERitGKyomIiM1RispRi0iIidGK0YrKiZGREYrKUYtIiImRitGKyomIiIjRispRi0iIiVGK0YrKiZGVUYrKUYtRkhGK0YrKiZGVUYrKUYtRlpGK0YrKiZGVUYrRi1GK0YrRi1GTQ==
If we consider R as an integral domain, we need to define additional operations required by some linear algebra routines.
R[Divide]:=proc() modp1(Divide(args),p) end:
BareissAlgorithm[R](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUYjNiUtRiw2MFEiKEYnRi9GMkY1RjhGOkY8Rj5GQEZCRkVGSEZKRk0tRiM2Ky1GIzYlLUkjbW5HRiQ2JFEiNkYnRi8tRiw2MFExJkludmlzaWJsZVRpbWVzO0YnRi8vRjNGN0Y1L0Y5RjdGOkY8Rj5GQC9GQ1EmaW5maXhGJy9GRlEkMGVtRicvRklGXHBGSkZNLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR0Y0L0YwUSdpdGFsaWNGJy1GYW82JFEiNEYnRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYsNjBRIitGJ0YvRmdvRjVGaG9GOkY8Rj5GQEZpby9GRlEwbWVkaXVtbWF0aHNwYWNlRicvRklGY3FGSkZNLUYjNiUtRmFvNiRRIjlGJ0YvRmRvLUZfcDYlRmFwLUZhbzYkUSIzRidGL0ZccUZfcS1GIzYlLUZhbzYkUSI1RidGL0Zkby1GX3A2JUZhcC1GYW82JFEiMkYnRi9GXHFGX3EtRiM2I0ZhcEZfcS1GYW82JFEjMTBGJ0YvLUYsNjBRIilGJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTS1GLDYwUSZ+bW9kfkYnRi9GZ29GNUZob0Y6RjxGPkZAL0ZDUSFGJ0ZbcEZdcEZKRk0tRmFvNiRRIzExRidGLy8lKXJvd2FsaWduR0Zpcy8lLGNvbHVtbmFsaWduR0Zpcy8lK2dyb3VwYWxpZ25HRmlzLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmV0LUZZNigtRiM2JS1GYW82JFEiMEYnRi9GZXNGanNGXXRGX3RGYXRGY3RGZnRGaHRGaHQtRlk2KC1GIzYlLUYjNiVGaW4tRiM2KS1GIzYlRltzRmRvRl5wRl9xLUYjNiUtRmFvNiRRIjdGJ0YvRmRvRmRyRl9xLUYjNiVGaXBGZG9GYXBGX3FGZ3FGXnNGZXNGanNGXXRGX3RGYXRGY3RGZnRGXXRGX3RGYXQtRlY2KkZodC1GWTYoLUYjNiUtRiM2JUZpbi1GIzYxLUYjNiVGaXBGZG8tRl9wNiVGYXAtRmFvNiRRIjhGJ0YvRlxxRl9xLUYjNiVGYXJGZG8tRl9wNiVGYXBGW3ZGXHFGX3EtRiM2JUZgb0Zkby1GX3A2JUZhcEZgb0ZccUZfcS1GIzYjLUZfcDYlRmFwRmFyRlxxRl9xRl5vRl9xLUYjNiVGYG9GZG9GanFGX3EtRiM2JUZed0Zkb0ZhcEZfcUZpcEZec0Zlc0Zqc0ZddEZfdEZhdEZjdEZmdEZodEZodC1GWTYoLUYjNiUtRiM2JUZpbi1GIzYzLUYjNiNGXHdGX3EtRiM2I0Zjd0ZfcS1GIzYlRlt2RmRvRmd3Rl9xLUYjNiVGW3ZGZG9GW3hGX3EtRiM2JUZncUZkb0ZecEZfcS1GIzYlRlt2RmRvRmpxRl9xRml1Rl9xLUYjNiVGW3ZGZG9GYXBGX3FGZ3FGXnNGZXNGanNGXXRGX3RGYXRGY3RGZnRGXXRGX3RGYXQtRlY2KkZodEZodC1GWTYoLUYjNiUtRiM2JUZpbi1GIzY7LUYjNiVGXHJGZG8tRl9wNiVGYXAtRmFvNiRRIzEyRidGL0ZccUZfcS1GIzYjLUZfcDYlRmFwRmpzRlxxRl9xLUYjNiVGW3ZGZG8tRl9wNiVGYXBGW3NGXHFGX3EtRiM2JUZmckZkby1GX3A2JUZhcEZncUZccUZfcS1GIzYlRlxyRmRvRlx3Rl9xRlt5Rl9xRl15Rl9xLUYjNiVGZnJGZG9GW3hGX3EtRiM2JUZbdkZkb0ZecEZfcUZjeUZfcUZpdUZfcUZedkZfcUZhckZec0Zlc0Zqc0ZddEZfdEZhdEZjdEZmdEZodC1GWTYoLUYjNiUtRiM2JUZpbi1GIzY7LUYjNiNGY3pGX3EtRiM2JUZbdkZkb0ZqekZfcS1GIzYlRmdxRmRvRl5bbEZfcS1GIzYlRmBvRmRvRmJbbEZfcS1GIzYlRmZyRmRvRlx3Rl9xLUYjNiVGXHJGZG9GY3dGX3EtRiM2JUZncUZkb0Znd0ZfcS1GIzYlRmFyRmRvRlt4Rl9xLUYjNiVGYXJGZG9GXnBGX3FGY3lGX3EtRiM2JUZed0Zkb0ZkckZfcS1GIzYlRmdxRmRvRmFwRl9xRlxyRl5zRmVzRmpzRl10Rl90RmF0RmN0RmZ0Rl10Rl90RmF0LUZWNipGaHRGaHRGaHQtRlk2KC1GIzYlLUYjNiVGaW4tRiM2PS1GIzYlRltzRmRvLUZfcDYlRmFwLUZhbzYkUSMxNkYnRi9GXHFGX3EtRiM2JUZncUZkby1GX3A2JUZhcC1GYW82JFEjMTVGJ0YvRlxxRl9xLUYjNiVGZnJGZG8tRl9wNiVGYXAtRmFvNiRRIzE0RidGL0ZccUZfcS1GIzYlRmdxRmRvLUZfcDYlRmFwLUZhbzYkUSMxM0YnRi9GXHFGX3EtRiM2JUZhckZkb0ZjekZfcUZkXGxGX3EtRiM2JUZhckZkb0ZeW2xGX3EtRiM2JUZpcEZkb0Zjd0ZfcUZeXWxGX3EtRiM2JUZgb0Zkb0ZbeEZfcUZiXWxGX3EtRiM2JUZbc0Zkb0ZkckZfcS1GIzYlRmFyRmRvRmFwRl9xRmFyRl5zRmVzRmpzRl10Rl90RmF0RmN0RmZ0LUZZNigtRiM2JS1GIzYlRmluLUYjNj8tRiM2I0ZkXmxGX3EtRiM2JUZed0Zkb0ZbX2xGX3FGYF9sRl9xLUYjNiVGXndGZG9GaV9sRl9xLUYjNiVGZnJGZG9GY3pGX3EtRiM2JUZhckZkb0ZqekZfcS1GIzYlRltzRmRvRmJbbEZfcS1GIzYlRlt2RmRvRlx3Rl9xLUYjNiVGaXBGZG9GZ3dGX3FGaXdGX3FGaFtsRl9xLUYjNiVGXHJGZG9GanFGX3EtRiM2JUZncUZkb0ZkckZfcUZpckZfcUZpcEZec0Zlc0Zqc0ZddEZfdEZhdEZjdEZmdEZddEZfdEZhdC1GVjYqRmh0Rmh0Rmh0Rmh0LUZZNigtRiM2JS1GIzYlRmluLUYjNkUtRiM2JUZed0Zkby1GX3A2JUZhcC1GYW82JFEjMjBGJ0YvRlxxRl9xLUYjNiVGZ3FGZG8tRl9wNiVGYXAtRmFvNiRRIzE5RidGL0ZccUZfcS1GIzYlRl53RmRvLUZfcDYlRmFwLUZhbzYkUSMxOEYnRi9GXHFGX3EtRiM2JUZncUZkby1GX3A2JUZhcC1GYW82JFEjMTdGJ0YvRlxxRl9xLUYjNiVGZ3FGZG9GZF5sRl9xLUYjNiNGW19sRl9xLUYjNiVGXndGZG9GYl9sRl9xLUYjNiVGW3ZGZG9GaV9sRl9xRmF6Rl9xLUYjNiVGZ3FGZG9GanpGX3FGXmJsRl9xLUYjNiVGW3ZGZG9GY3dGX3EtRiM2JUZbc0Zkb0Znd0ZfcUZfeUZfcS1GIzYlRmZyRmRvRl5wRl9xRl14Rl9xLUYjNiVGYG9GZG9GZHJGX3EtRiM2JUZgb0Zkb0ZhcEZec0Zlc0Zqc0ZddEZfdEZhdEZjdEZmdEZddEZfdEZhdC8lJmFsaWduR1ElYXhpc0YnL0ZedFEpYmFzZWxpbmVGJy9GYHRRJ2NlbnRlckYnL0ZidFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZdZ2wvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGaGdsLyUmZnJhbWVHRmhnbC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGZWdsLUYsNjBRIl1GJ0YvRjJGNUY4RjpGPEY+RkBGYXNGRUZjc0ZKRk0=
Now, we consider R as an Euclidean domain, we need to define the Euclidean norm, quotients, remainders, gcd, unit parts
R[EuclideanNorm]:=proc() modp1(Degree(args),p) end:
R[Quo]:=proc() modp1(Quo(args),p) end:
R[Rem]:=proc() modp1(Rem(args),p) end:
R[Gcdex]:=proc() modp1(Gcdex(args),p) end:
R[UnitPart]:=proc(a) if modp1(IsZero(a),p) then modp1(One(x),p)
else modp1(Constant(Lcoeff(a),x),p) fi end:
H, U := HermiteForm[R](A,output=['H','U']):
zip( R[`-`], MatrixMatrixMultiply[R](U,A), H );
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JFEiMEYnRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZjb0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zhby8lLGNvbHVtbmFsaWduR0Zhby8lK2dyb3VwYWxpZ25HRmFvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmBwRlhGWEZYRlhGaG9Gam9GXHBGVUZVRlVGVS8lJmFsaWduR1ElYXhpc0YnL0Zpb1EpYmFzZWxpbmVGJy9GW3BRJ2NlbnRlckYnL0ZdcFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZgcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zbci8lJmZyYW1lR0Zbci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGaHEtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
S, U, V := SmithForm[R](A,output=['S','U','V']):
S;
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JEZMRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZib0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zgby8lLGNvbHVtbmFsaWduR0Zgby8lK2dyb3VwYWxpZ25HRmBvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl9wLUZZNigtRiM2JS1GaG42JFEiMEYnRi9Gam5GZG9GZ29GaW9GW3BGXXBGYHBGYnBGYnBGYnBGZ29GaW9GW3AtRlY2KkZicEZYRmJwRmJwRmJwRmdvRmlvRltwLUZWNipGYnBGYnBGWEZicEZicEZnb0Zpb0ZbcC1GVjYqRmJwRmJwRmJwRlhGYnBGZ29GaW9GW3AtRlY2KkZicEZicEZicEZicC1GWTYoLUYjNiUtRiM2JS1GLDYwUSIoRidGL0YyRjVGOEY6RjxGPkZARkJGRUZIRkpGTS1GIzZFLUYjNiMtSSVtc3VwR0YkNiUtSSNtaUdGJDYlUSJ4RicvJSdpdGFsaWNHRjQvRjBRJ2l0YWxpY0YnLUZobjYkUSMyMEYnRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYsNjBRIitGJ0YvRl1vRjVGXm9GOkY8Rj5GQC9GQ1EmaW5maXhGJy9GRlEwbWVkaXVtbWF0aHNwYWNlRicvRklGZXNGSkZNLUYjNiUtRmhuNiRRIjhGJ0YvLUYsNjBRMSZJbnZpc2libGVUaW1lcztGJ0YvRl1vRjVGXm9GOkY8Rj5GQEZic0Zhb0Zjb0ZKRk0tRl9yNiVGYXItRmhuNiRRIzE5RidGL0Zcc0Zfcy1GIzYjLUZfcjYlRmFyLUZobjYkUSMxOEYnRi9GXHNGX3MtRiM2JUZpc0ZcdC1GX3I2JUZhci1GaG42JFEjMTdGJ0YvRlxzRl9zLUYjNiVGaXNGXHQtRl9yNiVGYXItRmhuNiRRIzE2RidGL0Zcc0Zfcy1GIzYlLUZobjYkUSI3RidGL0ZcdC1GX3I2JUZhci1GaG42JFEjMTVGJ0YvRlxzRl9zLUYjNiMtRl9yNiVGYXItRmhuNiRRIzE0RidGL0Zcc0Zfcy1GIzYlLUZobjYkUSI1RidGL0ZcdC1GX3I2JUZhci1GaG42JFEjMTNGJ0YvRlxzRl9zLUYjNiUtRmhuNiRRIzEwRidGL0ZcdC1GX3I2JUZhci1GaG42JFEjMTJGJ0YvRlxzRl9zLUYjNiVGaXNGXHQtRl9yNiVGYXJGZG9GXHNGX3MtRiM2JUZcd0ZcdC1GX3I2JUZhckZpc0Zcc0Zfcy1GIzYlRlx3Rlx0LUZfcjYlRmFyRlt2RlxzRl9zLUYjNiUtRmhuNiRRIjRGJ0YvRlx0LUZfcjYlRmFyLUZobjYkUSI2RidGL0Zcc0Zfcy1GIzYlRlx3Rlx0LUZfcjYlRmFyRlx3RlxzRl9zLUYjNiUtRmhuNiRRIjNGJ0YvRlx0LUZfcjYlRmFyRlx5RlxzRl9zLUYjNiUtRmhuNiRRIjlGJ0YvRlx0LUZfcjYlRmFyRmp5RlxzRl9zLUYjNiVGYXpGXHQtRl9yNiVGYXItRmhuNiRRIjJGJ0YvRlxzRl9zLUYjNiVGYXpGXHRGYXItRiw2MFEiKUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZNRmpuRmRvRmdvRmlvRltwRl1wRmBwRmdvRmlvRltwLyUmYWxpZ25HUSVheGlzRicvRmhvUSliYXNlbGluZUYnL0Zqb1EnY2VudGVyRicvRlxwUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNC8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmNcbC8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZeXWwvJSZmcmFtZUdGXl1sLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGNy8lLWVxdWFsY29sdW1uc0dGNy8lLWRpc3BsYXlzdHlsZUdGNy8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0ZbXWwtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQEZiW2xGRUZkW2xGSkZN
Check U A V = S
zip( R[`-`], S, MatrixMatrixMultiply[R](MatrixMatrixMultiply[R](U,A),V) );
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JFEiMEYnRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZjb0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zhby8lLGNvbHVtbmFsaWduR0Zhby8lK2dyb3VwYWxpZ25HRmFvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmBwRlhGWEZYRlhGaG9Gam9GXHBGVUZVRlVGVS8lJmFsaWduR1ElYXhpc0YnL0Zpb1EpYmFzZWxpbmVGJy9GW3BRJ2NlbnRlckYnL0ZdcFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZgcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zbci8lJmZyYW1lR0Zbci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGaHEtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
Now, we consider F as a field. We need to define division/inverses by considering F = Zp[x]/<m(x)>, where m(x) is a irreducible polynomial in Zp[x]
Examples:
p:=11:
M := modp1(ConvertIn(10*x^5+3*x^4+6*x^3+7*x^2+4*x+2,x),p):
F[`0`]:=modp1(Zero(x),p):
F[`1`]:=modp1(One(x),p):
F[`+`]:=proc() modp1(Rem(Add(args),M),p) end:
F[`-`]:=proc() modp1(Rem(Subtract(args),M),p) end:
F[`*`]:=proc() modp1(Rem(Multiply(args),M),p) end:
F[`=`]:=proc(a,b) evalb(a=b) end:
F[`/`]:=proc(a,b) local s; modp1(Gcdex(b,M,'s'),p); modp1(Rem(Multiply(a,s),M),p) end:
F[Divide]:=proc(a,b,q) if nargs=3 then q:=F[`/`](a,b) fi; true end:
H:=HessenbergForm[F](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiSEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2OS1JJG10ckdGJDYqLUkkbXRkR0YkNigtRiM2JS1GIzYlLUY2NjBRIihGJ0Y5RmduRj5GaG5GQkZERkZGSEZpbkZbb0Zdb0ZSRlUtRiM2Ky1GIzYlLUkjbW5HRiQ2JFEiNkYnRjktRjY2MFExJkludmlzaWJsZVRpbWVzO0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUSQwZW1GJy9GUUZccUZSRlUtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GZXA2JFEiNEYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2NjBRIitGJ0Y5RjtGPkZARkJGREZGRkhGSi9GTlEwbWVkaXVtbWF0aHNwYWNlRicvRlFGXnJGUkZVLUYjNiUtRmVwNiRRIjlGJ0Y5RmhwLUZfcTYlRmFxLUZlcDYkUSIzRidGOUZncUZqcS1GIzYlLUZlcDYkUSI1RidGOUZocC1GX3E2JUZhcS1GZXA2JFEiMkYnRjlGZ3FGanEtRiM2I0ZhcUZqcS1GZXA2JFEjMTBGJ0Y5LUY2NjBRIilGJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVS1GNjYwUSZ+bW9kfkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EhRidGW3FGXXFGUkZVLUZlcDYkUSMxMUYnRjkvJSlyb3dhbGlnbkdGZHQvJSxjb2x1bW5hbGlnbkdGZHQvJStncm91cGFsaWduR0ZkdC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZgdS1GZ282KC1GIzYlLUZlcDYkUSIwRidGOUZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2KS1GIzYjRl5xRmpxLUYjNiNGZXJGanEtRiM2JUZkcEZocEZfc0ZqcS1GIzYlLUZlcDYkUSI4RidGOUZocEZhcUZpc0ZgdEZldEZodEZqdEZcdUZedUZhdS1GZ282KC1GIzYlLUYjNiVGXXAtRiM2Ky1GIzYlRmFzRmhwRl5xRmpxLUYjNiVGZHFGaHBGZXJGanEtRiM2I0Zfc0ZqcS1GIzYlRmJyRmhwRmFxRmpxRmRwRmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYpLUYjNiVGZnNGaHBGXnFGanEtRiM2JS1GZXA2JFEiN0YnRjlGaHBGX3NGanEtRiM2JUZkcUZocEZhcUZqcUZickZpc0ZgdEZldEZodEZqdEZcdUZedUZhdUZodEZqdEZcdS1GZG82Ki1GZ282KC1GIzYlLUYjNiVGXXAtRiM2K0ZidkZqcUZkdkZqcS1GIzYlRmdyRmhwRl9zRmpxLUYjNiVGaXhGaHBGYXFGanFGZnNGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXUtRmdvNigtRiM2JS1GIzYlRl1wLUYjNistRiM2JUZqdkZocEZecUZqcUZgckZqcUZpd0ZqcS1GIzYlRmZzRmhwRmFxRmpxRml4RmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1RmN1RmN1RmN1Rmh0Rmp0Rlx1LUZkbzYqRmN1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYpLUYjNiVGYnJGaHBGXnFGanEtRiM2JUZpeEZocEZlckZqcS1GIzYlRmFzRmhwRl9zRmpxRmZ6RmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYpRmJbbEZqcUZmW2xGanFGXHlGanFGZHFGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXVGY3VGY3VGaHRGanRGXHUtRmRvNipGY3VGY3UtRmdvNigtRiM2JS1GIzYlRl1wLUYjNilGYltsRmpxRmByRmpxRmd4RmpxRmZ6RmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYrLUYjNiVGZ3JGaHBGXnFGanEtRiM2JUZnckZocEZlckZqcUZpd0ZqcS1GIzYlRmFzRmhwRmFxRmpxRlxzRmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYpRmJdbEZqcS1GIzYlRmRwRmhwRmVyRmpxRmd4RmpxRlxzRmlzRmB0RmV0Rmh0Rmp0Rlx1Rl51RmF1Rmh0Rmp0Rlx1LUZkbzYqRmN1RmN1RmN1LUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYpRmJwRmpxLUYjNiVGZHFGaHBGX3NGanFGZHNGanFGXHNGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXUtRmdvNigtRiM2JS1GIzYlRl1wLUYjNistRiM2JUZkcUZocEZecUZqcS1GIzYlRlxzRmhwRmVyRmpxLUYjNiVGZnNGaHBGX3NGanFGanlGanFGaXhGaXNGYHRGZXRGaHRGanRGXHVGXnVGYXVGaHRGanRGXHUvJSZhbGlnbkdRJWF4aXNGJy9GaXRRKWJhc2VsaW5lRicvRlt1USdjZW50ZXJGJy9GXXVRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGaWBsLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmRhbC8lJmZyYW1lR0ZkYWwvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmFhbC1GNjYwUSJdRidGOUZnbkY+RmhuRkJGREZGRkhGXHRGW29GXnRGUkZV
H,U := HessenbergForm[F](A,output=['H','U']):
V := MatrixInverse[F](U):
Check H = U A U^(-1) by computing H - U A U^(-1)
zip( F[`-`], H, MatrixMatrixMultiply[F](MatrixMatrixMultiply[F](U,A),V) );
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JFEiMEYnRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZjb0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zhby8lLGNvbHVtbmFsaWduR0Zhby8lK2dyb3VwYWxpZ25HRmFvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmBwRlhGWEZYRlhGaG9Gam9GXHBGVUZVRlVGVS8lJmFsaWduR1ElYXhpc0YnL0Zpb1EpYmFzZWxpbmVGJy9GW3BRJ2NlbnRlckYnL0ZdcFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZgcS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zbci8lJmZyYW1lR0Zbci8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGaHEtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
CharacteristicPolynomial[F](A,method=HessenbergAlgorithm);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY6LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JEZMRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZib0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zgby8lLGNvbHVtbmFsaWduR0Zgby8lK2dyb3VwYWxpZ25HRmBvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl9wRmdvRmlvRltwLUZWNiYtRlk2KC1GIzYlLUYjNiUtRiw2MFEiKEYnRi9GMkY1RjhGOkY8Rj5GQEZCRkVGSEZKRk0tRiM2KS1GIzYlLUZobjYkUSIzRidGLy1GLDYwUTEmSW52aXNpYmxlVGltZXM7RidGL0Zdb0Y1Rl5vRjpGPEY+RkAvRkNRJmluZml4RidGYW9GY29GSkZNLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR0Y0L0YwUSdpdGFsaWNGJy1GaG42JFEiNEYnRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYsNjBRIitGJ0YvRl1vRjVGXm9GOkY8Rj5GQEZncS9GRlEwbWVkaXVtbWF0aHNwYWNlRicvRklGXnNGSkZNLUYjNiUtRmhuNiRRIjdGJ0YvRmRxLUZqcTYlRlxyRmFxRmdyRmpyLUYjNiVGYXFGZHEtRmpxNiVGXHItRmhuNiRRIjJGJ0YvRmdyRmpyLUYjNiUtRmhuNiRRIjlGJ0YvRmRxRlxyLUYsNjBRIilGJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTUZqbkZkb0Znb0Zpb0ZbcEZdcEZgcEZnb0Zpb0ZbcC1GVjYmLUZZNigtRiM2JS1GIzYlRmpwLUYjNistRiM2I0ZpcUZqci1GIzYlLUZobjYkUSMxMEYnRi9GZHFGZXNGanJGZ3NGanItRiM2JS1GaG42JFEiNUYnRi9GZHFGXHJGanJGZHJGY3RGam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AtRlY2Ji1GWTYoLUYjNiUtRiM2JUZqcC1GIzYrLUYjNiVGZHJGZHFGaXFGanItRiM2JUZkckZkcUZlc0Zqci1GIzYlRmh1RmRxRmlzRmpyLUYjNiVGYnNGZHFGXHJGanJGYnNGY3RGam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AtRlY2Ji1GWTYoLUYjNiUtRiM2JUZqcC1GIzYpLUYjNiVGYnNGZHFGaXFGanItRiM2JUZddkZkcUZpc0Zqci1GIzYlRmh1RmRxRlxyRmpyLUZobjYkUSI2RidGL0ZjdEZqbkZkb0Znb0Zpb0ZbcEZdcEZgcEZnb0Zpb0ZbcC1GVjYmLUZZNigtRiM2JS1GIzYlRmpwLUYjNistRiM2JUZieEZkcUZpcUZqckZmdUZqci1GIzYlRmB0RmRxRmlzRmpyLUYjNiVGW3RGZHFGXHJGanJGYnNGY3RGam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AvJSZhbGlnbkdRJWF4aXNGJy9GaG9RKWJhc2VsaW5lRicvRmpvUSdjZW50ZXJGJy9GXHBRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGYnovJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGXVtsLyUmZnJhbWVHRl1bbC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGanotRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQEZmdEZFRmh0RkpGTQ==
Determinant[F](A,method=GaussianElimination);
LSUmbW9kcDFHNiQtJSpDb252ZXJ0SW5HNiQsLComIiImIiIiKUkieEc2IiIiJUYrRisqJClGLSIiJEYrRisqJiIiI0YrKUYtRjRGK0YrKiYiIipGK0YtRitGK0YvRitGLSIjNg==
Determinant[F](A,method=BareissAlgorithm);
LSUmbW9kcDFHNiQtJSpDb252ZXJ0SW5HNiQsLComIiImIiIiKUkieEc2IiIiJUYrRisqJClGLSIiJEYrRisqJiIiI0YrKUYtRjRGK0YrKiYiIipGK0YtRitGK0YvRitGLSIjNg==
GaussianElimination[F](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JEZMRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZib0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zgby8lLGNvbHVtbmFsaWduR0Zgby8lK2dyb3VwYWxpZ25HRmBvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl9wLUZZNigtRiM2JS1GaG42JFEiMEYnRi9Gam5GZG9GZ29GaW9GW3BGXXBGYHBGYnBGYnAtRlk2KC1GIzYlLUYjNiUtRiw2MFEiKEYnRi9GMkY1RjhGOkY8Rj5GQEZCRkVGSEZKRk0tRiM2Ky1GIzYlLUZobjYkUSIyRidGLy1GLDYwUTEmSW52aXNpYmxlVGltZXM7RidGL0Zdb0Y1Rl5vRjpGPEY+RkAvRkNRJmluZml4RidGYW9GY29GSkZNLUklbXN1cEdGJDYlLUkjbWlHRiQ2JVEieEYnLyUnaXRhbGljR0Y0L0YwUSdpdGFsaWNGJy1GaG42JFEiNEYnRi8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUYsNjBRIitGJ0YvRl1vRjVGXm9GOkY8Rj5GQEZcci9GRlEwbWVkaXVtbWF0aHNwYWNlRicvRklGY3NGSkZNLUYjNiUtRmhuNiRRIjdGJ0YvRmlxLUZfcjYlRmFyLUZobjYkUSIzRidGL0Zcc0Zfcy1GIzYlLUZobjYkUSI5RidGL0ZpcS1GX3I2JUZhckZmcUZcc0Zfcy1GIzYlRmZxRmlxRmFyRl9zLUZobjYkUSI1RidGLy1GLDYwUSIpRidGL0YyRjVGOEY6RjxGPkZAL0ZDUShwb3N0Zml4RidGRS9GSVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZKRk1Gam5GZG9GZ29GaW9GW3BGXXBGYHBGZ29GaW9GW3AtRlY2KkZicEZYRmJwRmJwLUZZNigtRiM2JS1GIzYlRl9xLUYjNistRiM2JUZnc0ZpcUZeckZfcy1GIzYlRlx0RmlxRmpzRl9zLUYjNiNGZHRGX3MtRiM2JUZhdEZpcUZhckZfc0ZodEZbdUZqbkZkb0Znb0Zpb0ZbcEZdcEZgcEZnb0Zpb0ZbcC1GVjYqRmJwRmJwRlhGYnAtRlk2KC1GIzYlLUYjNiVGX3EtRiM2KS1GIzYlRmF0RmlxRl5yRl9zRl90Rl9zRmZ0Rl9zRlx0Rlt1RmpuRmRvRmdvRmlvRltwRl1wRmBwRmdvRmlvRltwLUZWNipGYnBGYnBGYnBGWC1GWTYoLUYjNiUtRiM2JUZfcS1GIzYrRmRxRl9zLUYjNiVGYXRGaXFGanNGX3MtRiM2JUZodEZpcUZkdEZfcy1GIzYlRmlyRmlxRmFyRl9zRmlyRlt1RmpuRmRvRmdvRmlvRltwRl1wRmBwRmdvRmlvRltwLUZWNipGYnBGYnBGYnBGYnBGWEZnb0Zpb0ZbcC8lJmFsaWduR1ElYXhpc0YnL0Zob1EpYmFzZWxpbmVGJy9Gam9RJ2NlbnRlckYnL0ZccFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZfeS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0ZqeS8lJmZyYW1lR0ZqeS8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGZ3ktRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQEZedUZFRmB1RkpGTQ==
B := MatrixInverse[F](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2OS1JJG10ckdGJDYqLUkkbXRkR0YkNigtRiM2JS1JI21uR0YkNiRRIjBGJ0Y5LUY2NjBRJn5tb2R+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSFGJy9GTlEkMGVtRicvRlFGZXBGUkZVLUZccDYkUSMxMUYnRjkvJSlyb3dhbGlnbkdGY3AvJSxjb2x1bW5hbGlnbkdGY3AvJStncm91cGFsaWduR0ZjcC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZicS1GZ282KC1GIzYlLUYjNiUtRjY2MFEiKEYnRjlGZ25GPkZobkZCRkRGRkZIRmluRltvRl1vRlJGVS1GIzYrLUYjNiUtRlxwNiRRIjdGJ0Y5LUY2NjBRMSZJbnZpc2libGVUaW1lcztGJ0Y5RjtGPkZARkJGREZGRkhGSkZkcEZmcEZSRlUtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GXHA2JFEiNEYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2NjBRIitGJ0Y5RjtGPkZARkJGREZGRkhGSi9GTlEwbWVkaXVtbWF0aHNwYWNlRicvRlFGaHNGUkZVLUYjNiUtRlxwNiRRIzEwRidGOUZlci1GaXI2JUZbcy1GXHA2JFEiM0YnRjlGYXNGZHMtRiM2JUZhdEZlci1GaXI2JUZbcy1GXHA2JFEiMkYnRjlGYXNGZHMtRiM2JS1GXHA2JFEiOUYnRjlGZXJGW3NGZHNGXHQtRjY2MFEiKUYnRjlGZ25GPkZobkZCRkRGRkZIL0ZLUShwb3N0Zml4RidGW28vRlFRMnZlcnl0aGlubWF0aHNwYWNlRidGUkZVRl9wRmdwRmpwRlxxRl5xRmBxRmNxLUZnbzYoLUYjNiUtRiM2JUZbci1GIzYpLUYjNiVGYXRGZXJGX3RGZHMtRiM2JUZcdEZlckZmdEZkcy1GIzYlRmh0RmVyRltzRmRzLUZccDYkUSI1RidGOUZgdUZfcEZncEZqcEZccUZecUZgcUZjcUZmby1GZ282KC1GIzYlLUYjNiVGW3ItRiM2Ky1GIzYlRl11RmVyRmhyRmRzLUYjNiUtRlxwNiRRIjZGJ0Y5RmVyRl90RmRzLUYjNiVGZHdGZXJGZnRGZHMtRiM2JUZcdEZlckZbc0Zkc0Zec0ZgdUZfcEZncEZqcEZccUZecUZgcUZjcUZqcEZccUZecS1GZG82KkZmby1GZ282KC1GIzYlLUYjNiVGW3ItRiM2K0ZgckZkcy1GIzYlRl11RmVyRl90RmRzLUYjNiVGYnJGZXJGZnRGZHMtRiM2I0Zbc0Zkc0ZddUZgdUZfcEZncEZqcEZccUZecUZgcUZjcS1GZ282KC1GIzYlLUYjNiVGW3ItRiM2K0Zgd0Zkcy1GIzYlLUZccDYkUSI4RidGOUZlckZfdEZkc0ZneEZkc0ZpeEZkc0ZleUZgdUZfcEZncEZqcEZccUZecUZgcUZjcUZmby1GZ282KC1GIzYlLUYjNiVGW3ItRiM2Ky1GIzYjRmhyRmRzRl92RmRzLUYjNiVGZXZGZXJGZnRGZHMtRiM2JUZkd0ZlckZbc0Zkc0Zkd0ZgdUZfcEZncEZqcEZccUZecUZgcUZjcUZqcEZccUZecS1GZG82KkZmby1GZ282KC1GIzYlLUYjNiVGW3ItRiM2Ky1GIzYlRmV2RmVyRmhyRmRzLUYjNiVGaHRGZXJGX3RGZHMtRiM2JUZleUZlckZmdEZkc0ZkekZkc0ZhdEZgdUZfcEZncEZqcEZccUZecUZgcUZjcS1GZ282KC1GIzYlLUYjNiVGW3ItRiM2Ky1GIzYlRlx0RmVyRmhyRmRzRmJbbEZkcy1GIzYlRmh0RmVyRmZ0RmRzLUYjNiVGXnNGZXJGW3NGZHNGXHRGYHVGX3BGZ3BGanBGXHFGXnFGYHFGY3FGZm8tRmdvNigtRiM2JS1GIzYlRltyLUYjNistRiM2JUZec0ZlckZockZkcy1GIzYlRmJyRmVyRl90RmRzLUYjNiNGZnRGZHNGZHpGZHNGYnJGYHVGX3BGZ3BGanBGXHFGXnFGYHFGY3FGanBGXHFGXnEtRmRvNiotRmdvNigtRiM2JS1GIzYlRltyLUYjNilGX3ZGZHNGZ3dGZHMtRiM2JUZhdEZlckZbc0Zkc0ZddUZgdUZfcEZncEZqcEZccUZecUZgcUZjcS1GZ282KC1GIzYlLUYjNiVGW3ItRiM2KUZgW2xGZHMtRiM2I0ZfdEZkc0ZhdkZkc0ZiXGxGYHVGX3BGZ3BGanBGXHFGXnFGYHFGY3EtRmdvNigtRiM2JS1GIzYlRltyLUYjNiVGZXhGZHNGY3ZGYHVGX3BGZ3BGanBGXHFGXnFGYHFGY3EtRmdvNigtRiM2JS1GIzYlRltyLUYjNiktRiM2JUZleUZlckZockZkc0Zid0Zkc0ZcXmxGZHNGaHRGYHVGX3BGZ3BGanBGXHFGXnFGYHFGY3EtRmdvNigtRiM2JS1GIzYlRltyLUYjNidGaF9sRmRzRmJ6RmRzRl5zRmB1Rl9wRmdwRmpwRlxxRl5xRmBxRmNxRmpwRlxxRl5xLUZkbzYqLUZnbzYoLUYjNiUtRiM2JUZbci1GIzYrRmB3RmRzLUYjNiVGZXZGZXJGX3RGZHNGZFtsRmRzRmR6RmRzRmF0RmB1Rl9wRmdwRmpwRlxxRl5xRmBxRmNxLUZnbzYoLUYjNiUtRiM2JUZbci1GIzYrRmhfbEZkc0ZcYWxGZHNGYXZGZHMtRiM2JUZickZlckZbc0Zkc0Zec0ZgdUZfcEZncEZqcEZccUZecUZgcUZjcS1GZ282KC1GIzYlLUYjNiVGW3ItRiM2Ky1GIzYlRmR3RmVyRmhyRmRzRmJbbEZkc0ZneEZkc0ZpeEZkc0ZodEZgdUZfcEZncEZqcEZccUZecUZgcUZjcUZmby1GZ282KC1GIzYlLUYjNiVGW3ItRiM2KS1GIzYlRmh0RmVyRmhyRmRzRmpzRmRzRmR0RmRzLUYjNiVGZXZGZXJGW3NGYHVGX3BGZ3BGanBGXHFGXnFGYHFGY3FGanBGXHFGXnEvJSZhbGlnbkdRJWF4aXNGJy9GW3FRKWJhc2VsaW5lRicvRl1xUSdjZW50ZXJGJy9GX3FRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGW2RsLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmZkbC8lJmZyYW1lR0ZmZGwvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmNkbC1GNjYwUSJdRidGOUZnbkY+RmhuRkJGREZGRkhGY3VGW29GZXVGUkZV
MatrixMatrixMultiply[F](B,A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiotSSRtdGRHRiQ2KC1GIzYlLUkjbW5HRiQ2JEZMRi8tRiw2MFEmfm1vZH5GJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkAvRkNRIUYnL0ZGUSQwZW1GJy9GSUZib0ZKRk0tRmhuNiRRIzExRidGLy8lKXJvd2FsaWduR0Zgby8lLGNvbHVtbmFsaWduR0Zgby8lK2dyb3VwYWxpZ25HRmBvLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl9wLUZZNigtRiM2JS1GaG42JFEiMEYnRi9Gam5GZG9GZ29GaW9GW3BGXXBGYHBGYnBGYnBGYnBGZ29GaW9GW3AtRlY2KkZicEZYRmJwRmJwRmJwRmdvRmlvRltwLUZWNipGYnBGYnBGWEZicEZicEZnb0Zpb0ZbcC1GVjYqRmJwRmJwRmJwRlhGYnBGZ29GaW9GW3AtRlY2KkZicEZicEZicEZicEZYRmdvRmlvRltwLyUmYWxpZ25HUSVheGlzRicvRmhvUSliYXNlbGluZUYnL0Zqb1EnY2VudGVyRicvRlxwUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNC8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRl5yLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmlyLyUmZnJhbWVHRmlyLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGNy8lLWVxdWFsY29sdW1uc0dGNy8lLWRpc3BsYXlzdHlsZUdGNy8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zmci1GLDYwUSJdRidGL0YyRjVGOEY6RjxGPkZAL0ZDUShwb3N0Zml4RidGRS9GSVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZKRk0=
b:=LinearAlgebra:-RandomVector(5,generator=proc() modp1(Randpoly(4,x),p)end);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiYkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2OS1JJG10ckdGJDYmLUkkbXRkR0YkNigtRiM2JS1GIzYlLUY2NjBRIihGJ0Y5RmduRj5GaG5GQkZERkZGSEZpbkZbb0Zdb0ZSRlUtRiM2Ky1GIzYlLUkjbW5HRiQ2JFEiN0YnRjktRjY2MFExJkludmlzaWJsZVRpbWVzO0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUSQwZW1GJy9GUUZccUZSRlUtSSVtc3VwR0YkNiUtRiw2JVEieEYnRi9GMi1GZXA2JFEiNEYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnLUY2NjBRIitGJ0Y5RjtGPkZARkJGREZGRkhGSi9GTlEwbWVkaXVtbWF0aHNwYWNlRicvRlFGXnJGUkZVLUYjNiMtRl9xNiVGYXEtRmVwNiRRIjNGJ0Y5RmdxRmpxLUYjNiUtRmVwNiRRIjZGJ0Y5RmhwLUZfcTYlRmFxLUZlcDYkUSIyRidGOUZncUZqcS1GIzYjRmFxRmpxLUZlcDYkUSMxMEYnRjktRjY2MFEiKUYnRjlGZ25GPkZobkZCRkRGRkZIL0ZLUShwb3N0Zml4RidGW28vRlFRMnZlcnl0aGlubWF0aHNwYWNlRidGUkZVLUY2NjBRJn5tb2R+RidGOUY7Rj5GQEZCRkRGRkZIL0ZLUSFGJ0ZbcUZdcUZSRlUtRmVwNiRRIzExRidGOS8lKXJvd2FsaWduR0ZhdC8lLGNvbHVtbmFsaWduR0ZhdC8lK2dyb3VwYWxpZ25HRmF0LyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRl11RmV0Rmd0Rml0LUZkbzYmLUZnbzYoLUYjNiUtRiM2JUZdcC1GIzYrLUYjNiVGZHFGaHBGXnFGanEtRiM2JUZjc0ZocEZickZqcS1GIzYlRl5zRmhwRlxzRmpxLUYjNiVGZHFGaHBGYXFGanFGaXJGZnNGXXRGYnRGZXRGZ3RGaXRGW3VGXnVGZXRGZ3RGaXQtRmRvNiYtRmdvNigtRiM2JS1GIzYlRl1wLUYjNistRiM2JUZjc0ZocEZecUZqcUZcdkZqcS1GIzYlRmRxRmhwRlxzRmpxLUYjNiVGY3NGaHBGYXFGanFGZHJGZnNGXXRGYnRGZXRGZ3RGaXRGW3VGXnVGZXRGZ3RGaXQtRmRvNiYtRmdvNigtRiM2JS1GIzYlRl1wLUYjNitGXHdGanEtRiM2JS1GZXA2JFEiNUYnRjlGaHBGYnJGanEtRiM2JUZkcEZocEZcc0ZqcS1GIzYlLUZlcDYkUSI5RidGOUZocEZhcUZqcS1GZXA2JEZURjlGZnNGXXRGYnRGZXRGZ3RGaXRGW3VGXnVGZXRGZ3RGaXQtRmRvNiYtRmdvNigtRiM2JS1GIzYlRl1wLUYjNitGXHdGanFGXHZGanEtRiM2JUZeeEZocEZcc0ZqcS1GIzYlRmRwRmhwRmFxRmpxRmRyRmZzRl10RmJ0RmV0Rmd0Rml0Rlt1Rl51RmV0Rmd0Rml0LyUmYWxpZ25HUSVheGlzRicvRmZ0USliYXNlbGluZUYnL0ZodFEnY2VudGVyRicvRmp0USd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGMS8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmV6LyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmBbbC8lJmZyYW1lR0ZgW2wvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRl1bbC1GNjYwUSJdRidGOUZnbkY+RmhuRkJGREZGRkhGaXNGW29GW3RGUkZV
S:=LinearSolve[F](A,b);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiU0YnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUYjNiUtRjY2MFEiW0YnRjkvRjxGMUY+L0ZBRjFGQkZERkZGSC9GS1EncHJlZml4RicvRk5RLnRoaW5tYXRoc3BhY2VGJy9GUUZeb0ZSRlUtRiM2Iy1JJ210YWJsZUdGJDY5LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1GIzYlLUYjNiUtRjY2MFEiKEYnRjlGaW5GPkZqbkZCRkRGRkZIRltvRl1vRl9vRlJGVS1GIzYpLUYjNiUtSSNtbkdGJDYkUSIzRidGOS1GNjYwUTEmSW52aXNpYmxlVGltZXM7RidGOUY7Rj5GQEZCRkRGRkZIRkovRk5RJDBlbUYnL0ZRRl5xRlJGVS1JJW1zdXBHRiQ2JS1GLDYlUSJ4RidGL0YyLUZncDYkUSI0RidGOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRjY2MFEiK0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUTBtZWRpdW1tYXRoc3BhY2VGJy9GUUZgckZSRlUtRiM2JS1GZ3A2JFEjMTBGJ0Y5RmpwLUZhcTYlRmNxRmZwRmlxRlxyLUYjNiVGZHJGanAtRmFxNiVGY3EtRmdwNiRRIjJGJ0Y5RmlxRlxyLUYjNiUtRmdwNiRRIjdGJ0Y5RmpwRmNxLUY2NjBRIilGJ0Y5RmluRj5Gam5GQkZERkZGSC9GS1EocG9zdGZpeEYnRl1vL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVS1GNjYwUSZ+bW9kfkYnRjlGO0Y+RkBGQkZERkZGSC9GS1EhRidGXXFGX3FGUkZVLUZncDYkUSMxMUYnRjkvJSlyb3dhbGlnbkdGYHQvJSxjb2x1bW5hbGlnbkdGYHQvJStncm91cGFsaWduR0ZgdC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZcdUZkdEZmdEZodC1GZm82Ji1GaW82KC1GIzYlLUYjNiVGX3AtRiM2KS1GIzYlLUZncDYkUSI1RidGOUZqcEZgcUZcci1GIzYlRmZxRmpwRmdyRlxyLUYjNiVGYnNGanBGW3NGXHItRiM2I0ZjcUZlc0ZcdEZhdEZkdEZmdEZodEZqdEZddUZkdEZmdEZodC1GZm82Ji1GaW82KC1GIzYlLUYjNiVGX3AtRiM2K0ZkcEZcci1GIzYlRmZwRmpwRmdyRlxyLUYjNiNGW3NGXHItRiM2JS1GZ3A2JFEiOEYnRjlGanBGY3FGXHItRmdwNiRGVEY5RmVzRlx0RmF0RmR0RmZ0Rmh0Rmp0Rl11RmR0RmZ0Rmh0LUZmbzYmLUZpbzYoLUYjNiUtRiM2JUZfcC1GIzYrLUYjNiVGZHJGanBGYHFGXHItRiM2JUZkd0ZqcEZnckZcckZgd0Zcci1GIzYlRlt2RmpwRmNxRlxyLUZncDYkUSI2RidGOUZlc0ZcdEZhdEZkdEZmdEZodEZqdEZddUZkdEZmdEZodC1GZm82Ji1GaW82KC1GIzYlLUYjNiVGX3AtRiM2Ky1GIzYlRmZxRmpwRmBxRlxyLUYjNiVGaXhGanBGZ3JGXHItRiM2JS1GZ3A2JFEiOUYnRjlGanBGW3NGXHItRiM2JUZdc0ZqcEZjcUZcckZdc0Zlc0ZcdEZhdEZkdEZmdEZodEZqdEZddUZkdEZmdEZodC8lJmFsaWduR1ElYXhpc0YnL0ZldFEpYmFzZWxpbmVGJy9GZ3RRJ2NlbnRlckYnL0ZpdFEnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjEvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZeW2wvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGaVtsLyUmZnJhbWVHRmlbbC8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRj0vJS1lcXVhbGNvbHVtbnNHRj0vJS1kaXNwbGF5c3R5bGVHRj0vJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGZltsLUY2NjBRIl1GJ0Y5RmluRj5Gam5GQkZERkZGSEZoc0Zdb0Zqc0ZSRlUtRjY2MFEiLEYnRjlGOy9GP0YxRkBGQkZERkZGSEZKRl1xL0ZRUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGJ0ZSRlUtRiM2JUZmbi1GIzYjLUYsNiVGYHRGL0YyRlxdbA==
MatrixVectorMultiply[F](A,S[1])=b;
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtb0dGJDYwUSJbRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUpc3RyZXRjaHlHRjYvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJWZvcm1HUSdwcmVmaXhGJy8lJ2xzcGFjZUdRLnRoaW5tYXRoc3BhY2VGJy8lJ3JzcGFjZUdGSS8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYjLUknbXRhYmxlR0YkNjktSSRtdHJHRiQ2Ji1JJG10ZEdGJDYoLUYjNiUtRiM2JS1GLjYwUSIoRidGMUY0RjdGOkY8Rj5GQEZCRkRGR0ZKRkxGTy1GIzYrLUYjNiUtSSNtbkdGJDYkUSI3RidGMS1GLjYwUTEmSW52aXNpYmxlVGltZXM7RidGMS9GNUY5RjcvRjtGOUY8Rj5GQEZCL0ZFUSZpbmZpeEYnL0ZIUSQwZW1GJy9GS0ZecEZMRk8tSSVtc3VwR0YkNiUtSSNtaUdGJDYlUSJ4RicvJSdpdGFsaWNHRjYvRjJRJ2l0YWxpY0YnLUZjbzYkUSI0RidGMS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRictRi42MFEiK0YnRjFGaW9GN0Zqb0Y8Rj5GQEZCRltwL0ZIUTBtZWRpdW1tYXRoc3BhY2VGJy9GS0ZlcUZMRk8tRiM2Iy1GYXA2JUZjcC1GY282JFEiM0YnRjFGXnFGYXEtRiM2JS1GY282JFEiNkYnRjFGZm8tRmFwNiVGY3AtRmNvNiRRIjJGJ0YxRl5xRmFxLUYjNiNGY3BGYXEtRmNvNiRRIzEwRidGMS1GLjYwUSIpRidGMUY0RjdGOkY8Rj5GQEZCL0ZFUShwb3N0Zml4RidGRy9GS1EydmVyeXRoaW5tYXRoc3BhY2VGJ0ZMRk8tRi42MFEmfm1vZH5GJ0YxRmlvRjdGam9GPEY+RkBGQi9GRVEhRidGXXBGX3BGTEZPLUZjbzYkUSMxMUYnRjEvJSlyb3dhbGlnbkdGaHMvJSxjb2x1bW5hbGlnbkdGaHMvJStncm91cGFsaWduR0Zocy8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZkdEZcdEZedEZgdC1GWDYmLUZlbjYoLUYjNiUtRiM2JUZbby1GIzYrLUYjNiVGW3FGZm9GYHBGYXEtRiM2JUZqckZmb0ZpcUZhcS1GIzYlRmVyRmZvRmNyRmFxLUYjNiVGW3FGZm9GY3BGYXFGYHJGXXNGZHNGaXNGXHRGXnRGYHRGYnRGZXRGXHRGXnRGYHQtRlg2Ji1GZW42KC1GIzYlLUYjNiVGW28tRiM2Ky1GIzYlRmpyRmZvRmBwRmFxRmN1RmFxLUYjNiVGW3FGZm9GY3JGYXEtRiM2JUZqckZmb0ZjcEZhcUZbckZdc0Zkc0Zpc0ZcdEZedEZgdEZidEZldEZcdEZedEZgdC1GWDYmLUZlbjYoLUYjNiUtRiM2JUZbby1GIzYrRmN2RmFxLUYjNiUtRmNvNiRRIjVGJ0YxRmZvRmlxRmFxLUYjNiVGYm9GZm9GY3JGYXEtRiM2JS1GY282JFEiOUYnRjFGZm9GY3BGYXEtRmNvNiRGTkYxRl1zRmRzRmlzRlx0Rl50RmB0RmJ0RmV0Rlx0Rl50RmB0LUZYNiYtRmVuNigtRiM2JS1GIzYlRltvLUYjNitGY3ZGYXFGY3VGYXEtRiM2JUZld0Zmb0ZjckZhcS1GIzYlRmJvRmZvRmNwRmFxRltyRl1zRmRzRmlzRlx0Rl50RmB0RmJ0RmV0Rlx0Rl50RmB0LyUmYWxpZ25HUSVheGlzRicvRl10USliYXNlbGluZUYnL0ZfdFEnY2VudGVyRicvRmF0USd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNi8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRlx6LyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmd6LyUmZnJhbWVHRmd6LyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGOS8lLWVxdWFsY29sdW1uc0dGOS8lLWRpc3BsYXlzdHlsZUdGOS8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zkei1GLjYwUSJdRidGMUY0RjdGOkY8Rj5GQEZCRmBzRkdGYnNGTEZPLUYuNjBRIj1GJ0YxRmlvRjdGam9GPEY+RkBGQkZbcC9GSFEvdGhpY2ttYXRoc3BhY2VGJy9GS0ZhXGxGTEZPRis=
A Quotient Field example using Groebner bases and the normal form algorithm.
G is a Groebner basis for a zero dimensional ideal
G := [y^2+2,z^3-3];
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPkkiR0dGJjckLCYqJClJInlHRiYiIiMiIiJGMkYxRjIsJiokKUkiekdGJiIiJEYyRjJGNyEiIjcjRiw=
with monomial basis B.
B := [1,y,z,z^2,z*y,z^2*y];
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPkkiQkdGJjcoIiIiSSJ5R0YmSSJ6R0YmKiQpRi8iIiNGLSomRi9GLUYuRi0qJkYxRi1GLkYtNyNGLA==
Here are routines for arithmetic in the quotient ring Q[y,z] modulo the ideal generated by G. Multiplication is done by computing the normal form of the product and division is done by computing the inverse using linear algebra.
NormalForm := PolynomialIdeals:-NormalForm;
LV9JLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IkksbXByaW50c2xhc2hHRiY2JDcjPkkrTm9ybWFsRm9ybUdGJkkrTm9ybWFsRm9ybUc2JCUqcHJvdGVjdGVkRy9JK21vZHVsZW5hbWVHRiZJMVBvbHlub21pYWxJZGVhbHNHNiRGLkYlNyNGLA==
P := table():
P[`0`] := 0:
P[`1`] := 1:
P[`+`] := `+`:
P[`-`] := `-`:
P[`*`] := proc(a,b) NormalForm(a*b,G,plex(y,z)) end:
P[`/`] := proc(a,b) local A,B,E,S,j,c;
B := [1,y,z,z^2,z*y,z^2*y];
A := add( c[j]*B[j],j=1..6 ); # the inverse with unknown coefficients c[j]
E := NormalForm( A*b-1, G, plex(y,z) ); # A b = 1
E := {coeffs(E,{y,z})};
S := solve( E, {seq(c[i],i=1..6)} );
if S=NULL then error "no inverse" fi;
NormalForm( a*subs(S,A), G, plex(y,z) );
end:
P[Divide] := proc(a,b,q) if nargs=3 then q:=P[`/`](a,b) fi; true end:
P[`=`] := `=`:
A := Matrix([[y,z,1],[y^2,z+y,-2],[y+z*y,z^2,2-z*y]]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtRiw2JVEieUYnRi9GMi8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnAvJStncm91cGFsaWduR0ZecC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcC1GZ282KC1GLDYlUSJ6RidGL0YyRlxwRl9wRmFwRmNwRmZwLUZnbzYoLUkjbW5HRiQ2JEZURjlGXHBGX3BGYXBGY3BGZnBGXHBGX3BGYXAtRmRvNigtRmdvNigtRiM2Iy1JJW1zdXBHRiQ2JUZpby1GYHE2JFEiMkYnRjkvJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYnRlxwRl9wRmFwRmNwRmZwLUZnbzYoLUYjNiVGanAtRjY2MFEiK0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUTBtZWRpdW1tYXRoc3BhY2VGJy9GUUZpckZSRlVGaW9GXHBGX3BGYXBGY3BGZnAtRmdvNigtRmBxNiRRKSZtaW51czsyRidGOUZccEZfcEZhcEZjcEZmcEZccEZfcEZhcC1GZG82KC1GZ282KC1GIzYlRmlvRmVyLUYjNiVGanAtRjY2MFExJkludmlzaWJsZVRpbWVzO0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUSQwZW1GJy9GUUZcdEZSRlVGaW9GXHBGX3BGYXBGY3BGZnAtRmdvNigtRiM2Iy1GaXE2JUZqcEZbckZeckZccEZfcEZhcEZjcEZmcC1GZ282KC1GIzYlRltyLUY2NjBRKCZtaW51cztGJ0Y5RjtGPkZARkJGREZGRkhGSkZockZqckZSRlVGZnNGXHBGX3BGYXBGY3BGZnBGXHBGX3BGYXAvJSZhbGlnbkdRJWF4aXNGJy9GXXBRKWJhc2VsaW5lRicvRmBwUSdjZW50ZXJGJy9GYnBRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGaHUvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGY3YvJSZmcmFtZUdGY3YvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmB2LUY2NjBRIl1GJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVQ==
CharacteristicPolynomial[P](A,method=BerkowitzAlgorithm);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY4LUkkbXRyR0YkNiYtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvRmhuRltvRl1vLUZWNiYtRlk2KC1GIzYqLUYsNjBRKiZ1bWludXMwO0YnRi8vRjNGN0Y1L0Y5RjdGOkY8Rj5GQEZCL0ZGUSQwZW1GJy9GSUZgcEZKRk0tRmZuNiRRIjJGJ0YvLUYsNjBRIitGJ0YvRl1wRjVGXnBGOkY8Rj5GQC9GQ1EmaW5maXhGJy9GRlEwbWVkaXVtbWF0aHNwYWNlRicvRklGW3FGSkZNLUYjNiUtSSNtaUdGJDYlUSJ6RicvJSdpdGFsaWNHRjQvRjBRJ2l0YWxpY0YnLUYsNjBRMSZJbnZpc2libGVUaW1lcztGJ0YvRl1wRjVGXnBGOkY8Rj5GQEZocEZfcEZhcEZKRk0tRmBxNiVRInlGJ0ZjcUZlcS1GLDYwUSgmbWludXM7RidGL0ZdcEY1Rl5wRjpGPEY+RkBGaHBGanBGXHFGSkZNRl9xRl1yLUYjNiVGYnBGZ3FGanFGaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2Ji1GWTYoLUYjNistRiM2JS1GZm42JFEiM0YnRi9GZ3FGanFGZXAtRiM2JUZicEZncS1JJW1zdXBHRiQ2JUZfcUZicC8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGZXAtRiM2JS1GZm42JFEiOEYnRi9GZ3FGX3FGXXItRiM2JUZfc0ZncUZqcUZdckZicEZobkZbb0Zdb0Zfb0Zib0ZobkZbb0Zdby1GVjYmLUZZNigtRiM2KkZqb0ZdcUZlcC1GIzYnRmpyRmdxRl9zRmdxRmpxRl1yLUYjNiUtRmZuNiRRIjZGJ0YvRmdxRl9xRmVwRmJwRmhuRltvRl1vRl9vRmJvRmhuRltvRl1vLyUmYWxpZ25HUSVheGlzRicvRmluUSliYXNlbGluZUYnL0Zcb1EnY2VudGVyRicvRl5vUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNC8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmZ1LyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmF2LyUmZnJhbWVHRmF2LyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGNy8lLWVxdWFsY29sdW1uc0dGNy8lLWRpc3BsYXlzdHlsZUdGNy8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zedi1GLDYwUSJdRidGL0YyRjVGOEY6RjxGPkZAL0ZDUShwb3N0Zml4RidGRS9GSVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZKRk0=
MinorExpansion[P](A);
LCoqJkkiekc2IiIiIkkieUdGJUYmRiYqKCIiJEYmKUYkIiIjRiZGJ0YmISIiKiYiIidGJkYkRiZGJkYrRiw=
BareissAlgorithm[P](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21pR0YkNiVRInlGJy8lJ2l0YWxpY0dGNC9GMFEnaXRhbGljRicvJSlyb3dhbGlnbkdRIUYnLyUsY29sdW1uYWxpZ25HRl9vLyUrZ3JvdXBhbGlnbkdGX28vJShyb3dzcGFuR1EiMUYnLyUrY29sdW1uc3BhbkdGZm8tRlk2KC1GZm42JVEiekYnRmluRltvRl1vRmBvRmJvRmRvRmdvLUZZNigtSSNtbkdGJDYkRkxGL0Zdb0Zgb0Zib0Zkb0Znb0Zdb0Zgb0Ziby1GVjYoLUZZNigtRmFwNiRRIjBGJ0YvRl1vRmBvRmJvRmRvRmdvLUZZNigtRiM2Jy1GIzYlLUZhcDYkUSIyRidGLy1GLDYwUTEmSW52aXNpYmxlVGltZXM7RidGLy9GM0Y3RjUvRjlGN0Y6RjxGPkZAL0ZDUSZpbmZpeEYnL0ZGUSQwZW1GJy9GSUZbckZKRk1GW3AtRiw2MFEiK0YnRi9GZnFGNUZncUY6RjxGPkZARmhxL0ZGUTBtZWRpdW1tYXRoc3BhY2VGJy9GSUZhckZKRk0tRiM2JUZbcEZjcUZlbi1GLDYwUSgmbWludXM7RidGL0ZmcUY1RmdxRjpGPEY+RkBGaHFGYHJGYnJGSkZNRmBxRl1vRmBvRmJvRmRvRmdvLUZZNigtRiM2Ji1GLDYwUSomdW1pbnVzMDtGJ0YvRmZxRjVGZ3FGOkY8Rj5GQEZCRmpxRlxyRkpGTS1GIzYlRmBxRmNxRmVuRl1yRmBxRl1vRmBvRmJvRmRvRmdvRl1vRmBvRmJvLUZWNihGZXBGZXAtRlk2KC1GIzYpRmNyRmVyLUYjNictRmFwNiRRIjNGJ0YvRmNxLUklbXN1cEdGJDYlRltwRmBxLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0ZjcUZlbkZdci1GIzYlLUZhcDYkUSI2RidGL0ZjcUZbcEZlckZgcUZdb0Zgb0Zib0Zkb0Znb0Zdb0Zgb0Ziby8lJmFsaWduR1ElYXhpc0YnL0Zeb1EpYmFzZWxpbmVGJy9GYW9RJ2NlbnRlckYnL0Zjb1EnfGZybGVmdHxockYnLyUvYWxpZ25tZW50c2NvcGVHRjQvJSxjb2x1bW53aWR0aEdRJWF1dG9GJy8lJndpZHRoR0ZkdS8lK3Jvd3NwYWNpbmdHUSYxLjBleEYnLyUuY29sdW1uc3BhY2luZ0dRJjAuOGVtRicvJSlyb3dsaW5lc0dRJW5vbmVGJy8lLGNvbHVtbmxpbmVzR0Zfdi8lJmZyYW1lR0Zfdi8lLWZyYW1lc3BhY2luZ0dRLDAuNGVtfjAuNWV4RicvJSplcXVhbHJvd3NHRjcvJS1lcXVhbGNvbHVtbnNHRjcvJS1kaXNwbGF5c3R5bGVHRjcvJSVzaWRlR1EmcmlnaHRGJy8lMG1pbmxhYmVsc3BhY2luZ0dGXHYtRiw2MFEiXUYnRi9GMkY1RjhGOkY8Rj5GQC9GQ1EocG9zdGZpeEYnRkUvRklRMnZlcnl0aGlubWF0aHNwYWNlRidGSkZN
GaussianElimination[P](A,'r','d');
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvLUZZNigtRiM2JC1GLDYwUSomdW1pbnVzMDtGJ0YvL0YzRjdGNS9GOUY3RjpGPEY+RkBGQi9GRlEkMGVtRicvRklGXnBGSkZNLUYjNiUtSSZtZnJhY0dGJDYoRmVuLUZmbjYkUSIyRidGLy8lLmxpbmV0aGlja25lc3NHRmFvLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRlxxLyUpYmV2ZWxsZWRHRjctRiw2MFExJkludmlzaWJsZVRpbWVzO0YnRi9GW3BGNUZccEY6RjxGPkZAL0ZDUSZpbmZpeEYnRl1wRl9wRkpGTS1GIzYlLUkjbWlHRiQ2JVEiekYnLyUnaXRhbGljR0Y0L0YwUSdpdGFsaWNGJ0ZhcS1GaXE2JVEieUYnRlxyRl5yRmhuRltvRl1vRl9vRmJvLUZZNigtRiM2JEZoby1GIzYlRmJwRmFxLUYjNiNGYHJGaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2KC1GWTYoLUZmbjYkUSIwRidGL0ZobkZbb0Zdb0Zfb0Zib0ZYLUZZNigtRiM2LkZoby1GY3A2KC1GZm42JFEjMTZGJ0YvLUZmbjYkUSM1NUYnRi9GaHBGanBGXXFGX3EtRiw2MFEoJm1pbnVzO0YnRi9GW3BGNUZccEY6RjxGPkZARmRxL0ZGUTBtZWRpdW1tYXRoc3BhY2VGJy9GSUZidEZKRk0tRiM2JS1GY3A2KEZlcEZbdEZocEZqcEZdcUZfcUZhcUZpckZedC1GIzYlLUZjcDYoLUZmbjYkUSMxNEYnRi9GW3RGaHBGanBGXXFGX3FGYXEtRiM2I0ZocUZedC1GIzYlLUZjcDYoRmVwLUZmbjYkUSMxMUYnRi9GaHBGanBGXXFGX3FGYXFGZnFGXnQtRiM2JS1GY3A2KC1GZm42JFEiNEYnRi9GW3RGaHBGanBGXXFGX3FGYXEtRiM2Iy1JJW1zdXBHRiQ2JUZocUZlcC8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGXnQtRiM2JS1GY3A2KC1GZm42JFEjMTdGJ0YvRlt0RmhwRmpwRl1xRl9xRmFxLUYjNiVGYXZGYXFGYHJGaG5GW29GXW9GX29GYm9GaG5GW29GXW8tRlY2KEZdc0Zdc0ZYRmhuRltvRl1vLyUmYWxpZ25HUSVheGlzRicvRmluUSliYXNlbGluZUYnL0Zcb0ZccS9GXm9RJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGXngvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGaXgvJSZmcmFtZUdGaXgvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y3LyUtZXF1YWxjb2x1bW5zR0Y3LyUtZGlzcGxheXN0eWxlR0Y3LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmZ4LUYsNjBRIl1GJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTQ==
d;
LCoqJkkiekc2IiIiIkkieUdGJUYmRiYqKCIiJEYmKUYkIiIjRiZGJ0YmISIiKiYiIidGJkYkRiZGJkYrRiw=
B := MatrixInverse[P](A);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiQkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYoLUkkbXRkR0YkNigtRiM2LS1GIzYlLUkmbWZyYWNHRiQ2KC1JI21uR0YkNiRRJDEwOUYnRjktRmFwNiRRJDY4MEYnRjkvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRlxxLyUpYmV2ZWxsZWRHRj0tRjY2MFExJkludmlzaWJsZVRpbWVzO0YnRjlGO0Y+RkBGQkZERkZGSEZKL0ZOUSQwZW1GJy9GUUZlcUZSRlUtRiM2Iy1GLDYlUSJ5RidGL0YyLUY2NjBRIitGJ0Y5RjtGPkZARkJGREZGRkhGSi9GTlEwbWVkaXVtbWF0aHNwYWNlRicvRlFGYHJGUkZVLUYjNiUtRl5wNigtRmFwNiRRJDE0MUYnRjlGZHBGZ3BGanBGXXFGX3FGYXEtRiM2JS1JJW1zdXBHRiQ2JS1GLDYlUSJ6RidGL0YyLUZhcDYkUSIyRidGOS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRidGYXFGaXEtRjY2MFEoJm1pbnVzO0YnRjlGO0Y+RkBGQkZERkZGSEZKRl9yRmFyRlJGVS1GIzYlLUZecDYoLUZhcDYkUSMzM0YnRjlGZHBGZ3BGanBGXXFGX3FGYXEtRiM2JUZec0ZhcUZpcUZcci1GIzYlLUZecDYoLUZhcDYkUSMzN0YnRjktRmFwNiRRJDI3MkYnRjlGZ3BGanBGXXFGX3FGYXEtRiM2I0Zbc0Zcci1GIzYlLUZecDYoLUZhcDYkUSM1NUYnRjlGanRGZ3BGanBGXXFGX3FGYXEtRiM2I0Zec0Zcci1GXnA2KC1GYXA2JFEjNDVGJ0Y5Rmp0RmdwRmpwRl1xRl9xLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zfdi8lK2dyb3VwYWxpZ25HRl92LyUocm93c3BhbkdGaXAvJStjb2x1bW5zcGFuR0ZpcC1GZ282KC1GIzYuLUY2NjBRKiZ1bWludXMwO0YnRjlGO0Y+RkBGQkZERkZGSEZpbkZkcUZmcUZSRlUtRl5wNigtRmFwNiRRIzM2RidGOS1GYXA2JFEjODVGJ0Y5RmdwRmpwRl1xRl9xRlxyLUYjNiUtRl5wNigtRmFwNiRRJDEyOUYnRjktRmFwNiRRJTI3MjBGJ0Y5RmdwRmpwRl1xRl9xRmFxRmlyRmdzLUYjNiUtRl5wNigtRmFwNiRRJDExN0YnRjlGXnhGZ3BGanBGXXFGX3FGYXFGYXRGXHItRiM2JS1GXnA2KC1GYXA2JFEkMjAxRidGOUZeeEZncEZqcEZdcUZfcUZhcUZncUZcci1GIzYlLUZecDYoLUZhcDYkRlRGOUZkd0ZncEZqcEZdcUZfcUZhcUZddUZcci1GIzYlLUZecDYoLUZhcDYkUSI3RidGOUZkd0ZncEZqcEZdcUZfcUZhcUZmdUZddkZgdkZidkZkdkZmdi1GZ282KC1GIzYuRlx3LUZecDYoRlt4RmRwRmdwRmpwRl1xRl9xRmdzLUYjNiUtRl5wNigtRmFwNiRRJDI4N0YnRjlGXnhGZ3BGanBGXXFGX3FGYXFGaXJGZ3MtRiM2JS1GXnA2KC1GYXA2JFEkMzA5RidGOUZeeEZncEZqcEZdcUZfcUZhcUZhdEZcci1GIzYlLUZecDYoLUZhcDYkUSQyMTdGJ0Y5Rl54RmdwRmpwRl1xRl9xRmFxRmdxRlxyLUYjNiUtRl5wNigtRmFwNiRRIzM5RidGOUZkcEZncEZqcEZdcUZfcUZhcUZddUZncy1GIzYlLUZecDYoLUZhcDYkUSM2N0YnRjlGZHBGZ3BGanBGXXFGX3FGYXFGZnVGXXZGYHZGYnZGZHZGZnZGXXZGYHZGYnYtRmRvNigtRmdvNigtRiM2LkZcdy1GIzYlLUZecDYoLUZhcDYkUSM0OUYnRjktRmFwNiRRJDE3MEYnRjlGZ3BGanBGXXFGX3FGYXFGZ3FGZ3MtRiM2JS1GXnA2KEZpeUZiXWxGZ3BGanBGXXFGX3FGYXFGYXRGZ3MtRiM2JS1GXnA2KEZjeUZiXWxGZ3BGanBGXXFGX3FGYXFGaXJGXHItRiM2JS1GXnA2KC1GYXA2JFEkMTgxRidGOUZkcEZncEZqcEZdcUZfcUZhcUZddUZcci1GIzYlLUZecDYoLUZhcDYkUSQyNDdGJ0Y5RmRwRmdwRmpwRl1xRl9xRmFxRmZ1RlxyLUZecDYoLUZhcDYkUSMyOUYnRjlGZHBGZ3BGanBGXXFGX3FGXXZGYHZGYnZGZHZGZnYtRmdvNigtRiM2LS1GXnA2KC1GYXA2JFEiM0YnRjktRmFwNiRRJDM0MEYnRjlGZ3BGanBGXXFGX3FGZ3MtRiM2JS1GXnA2KC1GYXA2JFEkMTc5RidGOS1GYXA2JFElMTM2MEYnRjlGZ3BGanBGXXFGX3FGYXFGZ3FGXHItRiM2JS1GXnA2KEZfXWxGaV9sRmdwRmpwRl1xRl9xRmFxRmZ1RlxyLUYjNiUtRl5wNihGaXlGaV9sRmdwRmpwRl1xRl9xRmFxRl11RlxyLUYjNiUtRl5wNigtRmFwNiRRIzIzRidGOUZjYGxGZ3BGanBGXXFGX3FGYXFGYXRGXHItRiM2JS1GXnA2KC1GYXA2JFEkMTQ5RidGOUZjYGxGZ3BGanBGXXFGX3FGYXFGaXJGXXZGYHZGYnZGZHZGZnYtRmdvNigtRiM2LkZcd0ZdXWxGXHItRiM2JS1GXnA2KC1GYXA2JFEjMjVGJ0Y5Rmp0RmdwRmpwRl1xRl9xRmFxRmlyRmdzLUYjNiUtRl5wNihGXV9sRmp0RmdwRmpwRl1xRl9xRmFxRmF0RlxyLUYjNiUtRl5wNihGY3lGanRGZ3BGanBGXXFGX3FGYXFGZ3FGZ3MtRiM2JUZbXmxGYXFGXXVGZ3MtRiM2JUZnXWxGYXFGZnVGXXZGYHZGYnZGZHZGZnZGXXZGYHZGYnYtRmRvNigtRmdvNigtRiM2LkZcdy1GIzYlLUZecDYoRlt4RmNgbEZncEZqcEZdcUZfcUZhcUZpckZcci1GIzYlLUZecDYoRmV4RmNgbEZncEZqcEZdcUZfcUZhcUZhdEZncy1GIzYlLUZecDYoRlx5RmNgbEZncEZqcEZdcUZfcUZhcUZncUZcci1GIzYlLUZecDYoRml5LUZhcDYkUSQxMzZGJ0Y5RmdwRmpwRl1xRl9xRmFxRl11RmdzLUYjNiUtRl5wNigtRmFwNiRRIzE5RidGOUZpZGxGZ3BGanBGXXFGX3FGYXFGZnVGXHItRl5wNigtRmFwNiRRIzcxRidGOUZpZGxGZ3BGanBGXXFGX3FGXXZGYHZGYnZGZHZGZnYtRmdvNigtRiM2LkZcdy1GIzYlLUZecDYoRltcbEZjYGxGZ3BGanBGXXFGX3FGYXFGaXJGXHItRiM2JS1GXnA2KEZiXGxGY2BsRmdwRmpwRl1xRl9xRmFxRmF0RlxyLUYjNiVGW2RsRmFxRmdxRmdzLUYjNiVGYmZsRmFxRl11RmdzLUYjNiVGW2RsRmFxRmZ1RlxyRl9kbEZddkZgdkZidkZkdkZmdi1GZ282KC1GIzYtLUYjNiVGYmZsRmFxRmlyRlxyLUYjNiVGW2RsRmFxRmF0RmdzLUYjNiVGX2RsRmFxRmdxRmdzLUYjNiUtRl5wNigtRmFwNiRRJDIzMUYnRjlGY2BsRmdwRmpwRl1xRl9xRmFxRl11RlxyLUYjNiUtRl5wNigtRmFwNiRRIzgzRidGOUZjYGxGZ3BGanBGXXFGX3FGYXFGZnVGXHItRl5wNigtRmFwNiRRJDI0MUYnRjlGY2BsRmdwRmpwRl1xRl9xRl12RmB2RmJ2RmR2RmZ2Rl12RmB2RmJ2LyUmYWxpZ25HUSVheGlzRicvRl52USliYXNlbGluZUYnL0ZhdkZccS9GY3ZRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGY2lsLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRl5qbC8lJmZyYW1lR0ZeamwvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRltqbC1GNjYwUSJdRidGOUZnbkY+RmhuRkJGREZGRkgvRktRKHBvc3RmaXhGJ0Zbby9GUVEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZSRlU=
MatrixMatrixMultiply[P](A,B);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2MFEiW0YnLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lJmZlbmNlR1EldHJ1ZUYnLyUqc2VwYXJhdG9yR1EmZmFsc2VGJy8lKXN0cmV0Y2h5R0Y0LyUqc3ltbWV0cmljR0Y3LyUobGFyZ2VvcEdGNy8lLm1vdmFibGVsaW1pdHNHRjcvJSdhY2NlbnRHRjcvJSVmb3JtR1EncHJlZml4RicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRkcvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRiM2Iy1JJ210YWJsZUdGJDY3LUkkbXRyR0YkNigtSSRtdGRHRiQ2KC1JI21uR0YkNiRGTEYvLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zqbi8lK2dyb3VwYWxpZ25HRmpuLyUocm93c3BhbkdRIjFGJy8lK2NvbHVtbnNwYW5HRmFvLUZZNigtRmZuNiRRIjBGJ0YvRmhuRltvRl1vRl9vRmJvRmRvRmhuRltvRl1vLUZWNihGZG9GWEZkb0ZobkZbb0Zdby1GVjYoRmRvRmRvRlhGaG5GW29GXW8vJSZhbGlnbkdRJWF4aXNGJy9GaW5RKWJhc2VsaW5lRicvRlxvUSdjZW50ZXJGJy9GXm9RJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0Y0LyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGanAvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGZXEvJSZmcmFtZUdGZXEvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y3LyUtZXF1YWxjb2x1bW5zR0Y3LyUtZGlzcGxheXN0eWxlR0Y3LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmJxLUYsNjBRIl1GJ0YvRjJGNUY4RjpGPEY+RkAvRkNRKHBvc3RmaXhGJ0ZFL0ZJUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRkpGTQ==
b:=Vector([y,z,1]);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2JVEiYkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1JI21vR0YkNjBRIzo9RicvRjNRJ25vcm1hbEYnLyUmZmVuY2VHUSZmYWxzZUYnLyUqc2VwYXJhdG9yR0Y9LyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lJWZvcm1HUSZpbmZpeEYnLyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGTy8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYlLUY2NjBRIltGJ0Y5L0Y8RjFGPi9GQUYxRkJGREZGRkgvRktRJ3ByZWZpeEYnL0ZOUS50aGlubWF0aHNwYWNlRicvRlFGXG9GUkZVLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYmLUkkbXRkR0YkNigtRiw2JVEieUYnRi9GMi8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGXnAvJStncm91cGFsaWduR0ZecC8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0ZlcEZccEZfcEZhcC1GZG82Ji1GZ282KC1GLDYlUSJ6RidGL0YyRlxwRl9wRmFwRmNwRmZwRlxwRl9wRmFwLUZkbzYmLUZnbzYoLUkjbW5HRiQ2JEZURjlGXHBGX3BGYXBGY3BGZnBGXHBGX3BGYXAvJSZhbGlnbkdRJWF4aXNGJy9GXXBRKWJhc2VsaW5lRicvRmBwUSdjZW50ZXJGJy9GYnBRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YxLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGY3IvJStyb3dzcGFjaW5nR1EmMS4wZXhGJy8lLmNvbHVtbnNwYWNpbmdHUSYwLjhlbUYnLyUpcm93bGluZXNHUSVub25lRicvJSxjb2x1bW5saW5lc0dGXnMvJSZmcmFtZUdGXnMvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y9LyUtZXF1YWxjb2x1bW5zR0Y9LyUtZGlzcGxheXN0eWxlR0Y9LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRltzLUY2NjBRIl1GJ0Y5RmduRj5GaG5GQkZERkZGSC9GS1EocG9zdGZpeEYnRltvL0ZRUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRlJGVQ==
u,W := LinearSolve[P](A,b);
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtaUdGJDYlUSJ1RicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLUkjbW9HRiQ2MFEiLEYnL0Y1USdub3JtYWxGJy8lJmZlbmNlR1EmZmFsc2VGJy8lKnNlcGFyYXRvckdGMy8lKXN0cmV0Y2h5R0Y/LyUqc3ltbWV0cmljR0Y/LyUobGFyZ2VvcEdGPy8lLm1vdmFibGVsaW1pdHNHRj8vJSdhY2NlbnRHRj8vJSVmb3JtR1EmaW5maXhGJy8lJ2xzcGFjZUdRJDBlbUYnLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRicvJShtaW5zaXplR1EiMUYnLyUobWF4c2l6ZUdRKWluZmluaXR5RictRi42JVEiV0YnRjFGNC1GODYwUSM6PUYnRjtGPS9GQUY/RkJGREZGRkhGSkZML0ZQUS90aGlja21hdGhzcGFjZUYnL0ZTRl1vRlVGWC1GIzYlLUYjNiUtRjg2MFEiW0YnRjsvRj5GM0Zbby9GQ0YzRkRGRkZIRkovRk1RJ3ByZWZpeEYnL0ZQUS50aGlubWF0aHNwYWNlRicvRlNGW3BGVUZYLUYjNiMtSSdtdGFibGVHRiQ2Ny1JJG10ckdGJDYmLUkkbXRkR0YkNigtRiM2Li1GODYwUSomdW1pbnVzMDtGJ0Y7Rj1GW29GQkZERkZGSEZKRmhvRk8vRlNGUUZVRlgtSSZtZnJhY0dGJDYoLUkjbW5HRiQ2JFEjMTlGJ0Y7LUZicTYkUSM0MEYnRjsvJS5saW5ldGhpY2tuZXNzR1EiMUYnLyUrZGVub21hbGlnbkdRJ2NlbnRlckYnLyUpbnVtYWxpZ25HRl1yLyUpYmV2ZWxsZWRHRj8tRjg2MFEoJm1pbnVzO0YnRjtGPUZbb0ZCRkRGRkZIRkpGTC9GUFEwbWVkaXVtbWF0aHNwYWNlRicvRlNGZnJGVUZYLUYjNiUtRl9xNigtRmJxNiRGV0Y7LUZicTYkUSM4MEYnRjtGaHFGW3JGXnJGYHItRjg2MFExJkludmlzaWJsZVRpbWVzO0YnRjtGPUZbb0ZCRkRGRkZIRkpGTEZPRl1xRlVGWC1GIzYlLUklbXN1cEdGJDYlLUYuNiVRInpGJ0YxRjQtRmJxNiRRIjJGJ0Y7LyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGJ0Zhcy1GLjYlUSJ5RidGMUY0LUY4NjBRIitGJ0Y7Rj1GW29GQkZERkZGSEZKRkxGZXJGZ3JGVUZYLUYjNiUtRl9xNigtRmJxNiRRIzEzRidGO0Zec0ZocUZbckZeckZgckZhcy1GIzYlRmlzRmFzRmJ0RmV0LUYjNiUtRl9xNigtRmJxNiRRIzMxRidGO0Zec0ZocUZbckZeckZgckZhcy1GIzYjRmJ0RmJyLUYjNiUtRl9xNigtRmJxNiRRIzE3RidGO0ZlcUZocUZbckZeckZgckZhcy1GIzYjRmlzRmJyLUYjNiUtRl9xNigtRmJxNiRRIzExRidGO0ZlcUZocUZbckZeckZgckZhcy1GIzYjRmZzLyUpcm93YWxpZ25HUSFGJy8lLGNvbHVtbmFsaWduR0Zedy8lK2dyb3VwYWxpZ25HRl53LyUocm93c3BhbkdGanEvJStjb2x1bW5zcGFuR0ZqcUZcd0Zfd0Zhdy1GY3A2Ji1GZnA2KC1GIzYtLUYjNiUtRl9xNigtRmJxNiRRIjNGJ0Y7LUZicTYkUSI4RidGO0ZocUZbckZeckZgckZhc0Zkc0ZldC1GIzYlRl94RmFzRmh1RmV0LUYjNiUtRl9xNihGYXgtRmJxNiRRIzIwRidGO0ZocUZbckZeckZgckZhc0ZqdkZldC1GIzYlLUZfcTYoRlxzRl15RmhxRltyRl5yRmByRmFzRmF2RmV0LUZfcTYoLUZicTYkUSI3RidGO0ZdeUZocUZbckZeckZgckZldC1GIzYlLUZfcTYoRlxzRmR4RmhxRltyRl5yRmByRmFzRl91Rlx3Rl93RmF3RmN3RmV3Rlx3Rl93RmF3LUZjcDYmLUZmcDYoLUYjNi0tRiM2JUZbeUZhc0Zkc0ZldC1GIzYlRmJ5RmFzRl91RmV0LUYjNiVGZHlGYXNGaHVGYnItRiM2JS1GX3E2KEZheEZlcUZocUZbckZeckZgckZhc0ZqdkZici1GIzYlLUZfcTYoRlxzRmVxRmhxRltyRl5yRmByRmFzRmF2RmV0LUZfcTYoRlx1RmVxRmhxRltyRl5yRmByRlx3Rl93RmF3RmN3RmV3Rlx3Rl93RmF3LyUmYWxpZ25HUSVheGlzRicvRl13USliYXNlbGluZUYnL0Zgd0Zdci9GYndRJ3xmcmxlZnR8aHJGJy8lL2FsaWdubWVudHNjb3BlR0YzLyUsY29sdW1ud2lkdGhHUSVhdXRvRicvJSZ3aWR0aEdGX1xsLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmpcbC8lJmZyYW1lR0ZqXGwvJS1mcmFtZXNwYWNpbmdHUSwwLjRlbX4wLjVleEYnLyUqZXF1YWxyb3dzR0Y/LyUtZXF1YWxjb2x1bW5zR0Y/LyUtZGlzcGxheXN0eWxlR0Y/LyUlc2lkZUdRJnJpZ2h0RicvJTBtaW5sYWJlbHNwYWNpbmdHRmdcbC1GODYwUSJdRidGO0Zmb0Zbb0Znb0ZERkZGSEZKL0ZNUShwb3N0Zml4RidGam8vRlNRMnZlcnl0aGlubWF0aHNwYWNlRidGVUZYRjctRiM2JUZjby1GIzYjLUYuNiVGXndGMUY0Rl1ebA==
MatrixVectorMultiply[P](A,u) = b;
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtb0dGJDYwUSJbRicvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUpc3RyZXRjaHlHRjYvJSpzeW1tZXRyaWNHRjkvJShsYXJnZW9wR0Y5LyUubW92YWJsZWxpbWl0c0dGOS8lJ2FjY2VudEdGOS8lJWZvcm1HUSdwcmVmaXhGJy8lJ2xzcGFjZUdRLnRoaW5tYXRoc3BhY2VGJy8lJ3JzcGFjZUdGSS8lKG1pbnNpemVHUSIxRicvJShtYXhzaXplR1EpaW5maW5pdHlGJy1GIzYjLUknbXRhYmxlR0YkNjctSSRtdHJHRiQ2Ji1JJG10ZEdGJDYoLUkjbWlHRiQ2JVEieUYnLyUnaXRhbGljR0Y2L0YyUSdpdGFsaWNGJy8lKXJvd2FsaWduR1EhRicvJSxjb2x1bW5hbGlnbkdGYW8vJStncm91cGFsaWduR0Zhby8lKHJvd3NwYW5HUSIxRicvJStjb2x1bW5zcGFuR0Zob0Zfb0Zib0Zkby1GWDYmLUZlbjYoLUZobjYlUSJ6RidGW29GXW9GX29GYm9GZG9GZm9GaW9GX29GYm9GZG8tRlg2Ji1GZW42KC1JI21uR0YkNiRGTkYxRl9vRmJvRmRvRmZvRmlvRl9vRmJvRmRvLyUmYWxpZ25HUSVheGlzRicvRmBvUSliYXNlbGluZUYnL0Zjb1EnY2VudGVyRicvRmVvUSd8ZnJsZWZ0fGhyRicvJS9hbGlnbm1lbnRzY29wZUdGNi8lLGNvbHVtbndpZHRoR1ElYXV0b0YnLyUmd2lkdGhHRmZxLyUrcm93c3BhY2luZ0dRJjEuMGV4RicvJS5jb2x1bW5zcGFjaW5nR1EmMC44ZW1GJy8lKXJvd2xpbmVzR1Elbm9uZUYnLyUsY29sdW1ubGluZXNHRmFyLyUmZnJhbWVHRmFyLyUtZnJhbWVzcGFjaW5nR1EsMC40ZW1+MC41ZXhGJy8lKmVxdWFscm93c0dGOS8lLWVxdWFsY29sdW1uc0dGOS8lLWRpc3BsYXlzdHlsZUdGOS8lJXNpZGVHUSZyaWdodEYnLyUwbWlubGFiZWxzcGFjaW5nR0Zeci1GLjYwUSJdRidGMUY0RjdGOkY8Rj5GQEZCL0ZFUShwb3N0Zml4RidGRy9GS1EydmVyeXRoaW5tYXRoc3BhY2VGJ0ZMRk8tRi42MFEiPUYnRjEvRjVGOUY3L0Y7RjlGPEY+RkBGQi9GRVEmaW5maXhGJy9GSFEvdGhpY2ttYXRoc3BhY2VGJy9GS0ZjdEZMRk9GKw==