Macaulay2 » Documentation
Packages » SVDComplexes :: pseudoInverse
next | previous | forward | backward | up | index | toc

pseudoInverse -- compute the pseudoInverse of a chain complex

Description

In case the field is RR we use the SVD normal form to compute the pseudo inverse. In case of QQ we compute the pseudo inverse directly over QQ.

i1 : needsPackage "RandomComplexes"

o1 = RandomComplexes

o1 : Package
i2 : setRandomSeed "a pretty good example";
 -- setting random seed to 1187585617994339702977441899450513636117846
i3 : h={2,3,1}

o3 = {2, 3, 1}

o3 : List
i4 : r={2,3}

o4 = {2, 3}

o4 : List
i5 : C=randomChainComplex(h,r,Height=>11,ZeroMean=>true)

       4       8       4
o5 = ZZ  <-- ZZ  <-- ZZ
                      
     0       1       2

o5 : Complex
i6 : C.dd

           4                                          8
o6 = 0 : ZZ  <------------------------------------- ZZ  : 1
                | -4 -18 -6 -14 -10 -18 -16 -28 |
                | 8  16  22 -12 -20 -14 -8  6   |
                | 6  15  15 -3  -9  -3  0   12  |
                | 2  7   4  3   1   4   4   9   |

           8                            4
     1 : ZZ  <----------------------- ZZ  : 2
                | -5  22  19  -41 |
                | -54 26  55  -66 |
                | 31  -26 -29 25  |
                | 33  50  -23 36  |
                | -20 -16 24  -47 |
                | 2   -22 -1  -10 |
                | -12 -6  3   9   |
                | 25  -16 -30 43  |

o6 : ComplexMap
i7 : CQ=C**QQ

       4       8       4
o7 = QQ  <-- QQ  <-- QQ
                      
     0       1       2

o7 : Complex
i8 : CR=C**RR_53

         4         8         4
o8 = RR    <-- RR    <-- RR
       53        53        53
                          
     0         1         2

o8 : Complex
i9 : CRplus = pseudoInverse CR

         4         8         4
o9 = RR    <-- RR    <-- RR
       53        53        53
                          
     -2        -1        0

o9 : Complex
i10 : CQplus = pseudoInverse CQ

        4       8       4
o10 = QQ  <-- QQ  <-- QQ
                       
      -2      -1      0

o10 : Complex
i11 : CRplus.dd

               4                                                                                                        8
o11 = -2 : RR    <------------------------------------------------------------------------------------------------- RR    : -1
             53     | .0130658   -.00710013 .00910891  .00617097   .00616535  .00510154  -.0108838  -.00160172  |     53
                    | .00363228  .00323956  -.00408194 .0104004    -.00386761 -.00421635 -.00125529 -.00211786  |
                    | -.00265724 .00380405  -.00358933 -.0016806   -.00115101 -.00166389 .00291106  -.000639162 |
                    | -.0129721  .00195488  -.00650979 -.000997146 -.00888455 -.0055727  .0094004   .00387383   |

               8                                                          4
      -1 : RR    <--------------------------------------------------- RR    : 0
             53     | -.00131432 .00348016  .0024824   .000742313 |     53
                    | -.00687747 .00658955  .00601697  .0027222   |
                    | -.00148997 .00975584  .0063005   .00142258  |
                    | -.00652617 -.0059618  -.00161923 .00136167  |
                    | -.00521185 -.00944196 -.00410162 .000619358 |
                    | -.008322   -.00701722 -.00171373 .00179488  |
                    | -.00718333 -.00422171 -.00037803 .00173283  |
                    | -.0116078  .00168319  .00449225  .00365066  |

o11 : ComplexMap
i12 : CQplus.dd

             4                                                                                                                                                                                              8
o12 = -2 : QQ  <----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- QQ  : -1
                  | 22455062/1718617773  -305060062/42965444325 391368268/42965444325  88379471/14321814775  264897193/42965444325  219189842/42965444325  -467627593/42965444325 -2219954/1385982075 |
                  | 2080832/572872591    46396386/14321814775   -58460804/14321814775  148952386/14321814775 -55391154/14321814775  -60385726/14321814775  -17977996/14321814775  -978438/461994025   |
                  | -1522260/572872591   54480883/14321814775   -51405662/14321814775  -24069267/14321814775 -16484537/14321814775  -23829853/14321814775  41691712/14321814775   -295289/461994025   |
                  | -22294079/1718617773 83992087/42965444325   -279696193/42965444325 -14280946/14321814775 -381728443/42965444325 -239433617/42965444325 403892368/42965444325  5369054/1385982075  |

             8                                                                     4
      -1 : QQ  <---------------------------------------------------------------- QQ  : 0
                  | -6884/5237683  18228/5237683  1182/476153  3888/5237683  |
                  | -36022/5237683 34514/5237683  2865/476153  14258/5237683 |
                  | -7804/5237683  51098/5237683  3000/476153  7451/5237683  |
                  | -34182/5237683 -31226/5237683 -771/476153  7132/5237683  |
                  | -27298/5237683 -49454/5237683 -1953/476153 3244/5237683  |
                  | -2564/308099   -2162/308099   -48/28009    553/308099    |
                  | -37624/5237683 -22112/5237683 -180/476153  9076/5237683  |
                  | -60798/5237683 8816/5237683   2139/476153  19121/5237683 |

o12 : ComplexMap
i13 : (CQplus**RR_53).dd

               4                                                                                                        8
o13 = -2 : RR    <------------------------------------------------------------------------------------------------- RR    : -1
             53     | .0130658   -.00710013 .00910891  .00617097   .00616535  .00510154  -.0108838  -.00160172  |     53
                    | .00363228  .00323956  -.00408194 .0104004    -.00386761 -.00421635 -.00125529 -.00211786  |
                    | -.00265724 .00380405  -.00358933 -.0016806   -.00115101 -.00166389 .00291106  -.000639162 |
                    | -.0129721  .00195488  -.00650979 -.000997146 -.00888455 -.0055727  .0094004   .00387383   |

               8                                                          4
      -1 : RR    <--------------------------------------------------- RR    : 0
             53     | -.00131432 .00348016  .0024824   .000742313 |     53
                    | -.00687747 .00658955  .00601697  .0027222   |
                    | -.00148997 .00975584  .0063005   .00142258  |
                    | -.00652617 -.0059618  -.00161923 .00136167  |
                    | -.00521185 -.00944196 -.00410162 .000619358 |
                    | -.008322   -.00701722 -.00171373 .00179488  |
                    | -.00718333 -.00422171 -.00037803 .00173283  |
                    | -.0116078  .00168319  .00449225  .00365066  |

o13 : ComplexMap
i14 : CRplus.dd^2

               4                                                                 4
o14 = -2 : RR    <---------------------------------------------------------- RR    : 0
             53     | -1.15196e-19 -1.35525e-20 2.03288e-20 2.5411e-20   |     53
                    | -4.23516e-21 1.86347e-20  8.47033e-21 4.23516e-21  |
                    | 2.32934e-20  6.77626e-21  -2.5411e-21 -4.65868e-21 |
                    | 8.80914e-20  2.71051e-20  0           -1.69407e-20 |

o14 : ComplexMap
i15 : CQplus.dd^2

o15 = 0

o15 : ComplexMap

Pseudo inverses frequently exist also over finite fields.

i16 : Fp=ZZ/nextPrime 10^3

o16 = Fp

o16 : QuotientRing
i17 : Cp=C**Fp

        4       8       4
o17 = Fp  <-- Fp  <-- Fp
                       
      0       1       2

o17 : Complex
i18 : Cpplus=pseudoInverse Cp

        4       8       4
o18 = Fp  <-- Fp  <-- Fp
                       
      -2      -1      0

o18 : Complex
i19 : Cpplus.dd

             4                                                   8
o19 = -2 : Fp  <---------------------------------------------- Fp  : -1
                  | -503 196  106  -420 -383 278  -1  308  |
                  | -447 -399 -485 370  -440 -273 157 266  |
                  | -56  -279 92   145  65   351  358 -70  |
                  | 166  39   -496 -313 -356 126  276 -330 |

             8                                4
      -1 : Fp  <--------------------------- Fp  : 0
                  | -33  -170 -193 -108 |
                  | 384  -230 -455 -340 |
                  | 441  -18  -244 -235 |
                  | 445  475  -353 -86  |
                  | 478  -364 -160 22   |
                  | 426  68   -87  -121 |
                  | -76  390  55   -140 |
                  | -161 -357 -65  -391 |

o19 : ComplexMap
i20 : Cpplus.dd^2

o20 = 0

o20 : ComplexMap
i21 : arePseudoInverses(Cp,Cpplus)

o21 = true

Caveat

Over finite fields the algorithm can fail.

See also

Ways to use pseudoInverse:

  • pseudoInverse(Complex)

For the programmer

The object pseudoInverse is a method function with options.


The source of this document is in /build/reproducible-path/macaulay2-1.26.05+ds/M2/Macaulay2/packages/SVDComplexes.m2:1296:0.