Changeset 1912

Show
Ignore:
Timestamp:
04/27/05 11:02:45 (4 years ago)
Author:
pernet
Message:

add Symmetric rank

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/linbox/linbox/solutions/rank.h

    r1854 r1912  
    9191                return res; 
    9292        } 
     93        template <class Blackbox> 
     94        unsigned long &symmetricRank (unsigned long                   &res, 
     95                                      const Blackbox                  &A, 
     96                                      const MethodTrait::Wiedemann    &M)  
     97        { 
     98            typedef typename Blackbox::Field Field; 
     99            const Field F = A.field(); 
     100            typename Field::RandIter iter (F); 
     101             
     102            commentator.start ("Symmetric Rank", "rank"); 
     103                 
     104 
     105            std::vector<typename Field::Element> d1, d2; 
     106            size_t i; 
     107 
     108            VectorWrapper::ensureDim (d1, A.coldim ()); 
     109 
     110            for (i = 0; i < A.coldim (); i++) 
     111                    do iter.random (d1[i]); while (F.isZero (d1[i])); 
     112 
     113 
     114            Diagonal<Field> D1 (F, d1); 
     115 
     116             
     117            Compose<Diagonal<Field>,Blackbox > B1 (&D1, &A); 
     118            typedef Compose<Compose<Diagonal<Field>,Blackbox >, Diagonal<Field> > BlackBox1; 
     119            BlackBox1 B (&B1, &D1); 
     120 
     121            BlackboxContainerSymmetric<Field, BlackBox1> TF (&B, F, iter); 
     122            MasseyDomain<Field, BlackboxContainerSymmetric<Field, BlackBox1> > WD (&TF, M.earlyTermThreshold ()); 
     123 
     124            WD.pseudo_rank (res); 
     125 
     126            commentator.stop ("done", NULL, "rank"); 
     127 
     128            return res; 
     129        } 
    93130 
    94131        template <class Matrix>