Changeset 55

Show
Ignore:
Timestamp:
02/20/08 14:38:40 (9 months ago)
Author:
pernet
Message:

fix several bugs

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • include/fflas-ffpack/ffpack.h

    r54 r55  
    192192                *info =0; 
    193193                if (Side == FflasLeft) { // Left looking solve A X = B 
    194  
     194                         
    195195                        solveLB2 (F, FflasLeft, M, N, R, A, lda, Q, B, ldb); 
    196196 
     
    286286 
    287287                if (Side == FflasLeft) { // Left looking solve A X = B 
    288                          
     288 
    289289                        // Initializing X to 0 (to be optimized) 
    290290                        for (size_t i = 0; i <N; ++i) 
     
    300300                                solveLB2 (F, FflasLeft, M, NRHS, R, A, lda, Q, W, ldw); 
    301301                                 
    302                                 applyP (F, FflasLeft, FflasNoTrans, N, 0, R, W, ldw, Q); 
     302                                applyP (F, FflasLeft, FflasNoTrans, NRHS, 0, R, W, ldw, Q); 
    303303 
    304304                                bool consistent = true; 
     
    310310                                        std::cerr<<"System is inconsistent"<<std::endl; 
    311311                                        *info = 1; 
     312                                        delete[] W; 
    312313                                        return X; 
    313314                                } 
     
    326327                                for (size_t i=0; i < M; ++i) 
    327328                                        fcopy (F, NRHS, X + i*ldx, 1, B + i*ldb, 1); 
    328                                 
     329                                 
    329330                                solveLB2 (F, FflasLeft, M, NRHS, R, A, lda, Q, X, ldx); 
    330331                                 
    331                                 applyP (F, FflasLeft, FflasNoTrans, N, 0, R, X, ldx, Q); 
     332                                applyP (F, FflasLeft, FflasNoTrans, NRHS, 0, R, X, ldx, Q); 
    332333 
    333334                                bool consistent = true; 
     
    348349                                applyP (F, FflasLeft, FflasTrans, NRHS, 0, R, X, ldx, P); 
    349350                        } 
    350  
    351351                        return X; 
    352352                         
     
    379379                                        std::cerr<<"System is inconsistent"<<std::endl; 
    380380                                        *info = 1; 
     381                                        delete[] W; 
    381382                                        return X; 
    382383                                } 
     
    384385                                for (size_t i=0; i < NRHS; ++i) 
    385386                                        fcopy (F, R, X + i*ldx, 1, W + i*ldb, 1); 
    386  
     387                                delete[] W; 
    387388                                applyP (F, FflasRight, FflasNoTrans, NRHS, 0, R, X, ldx, Q); 
    388389 
     
    583584                size_t * P = new size_t[M]; 
    584585                size_t * Q = new size_t[M]; 
    585                 nullity = M - ReducedColumnEchelonForm (F, M, M, A, lda, P, Q); 
    586                 applyP (F, FflasLeft, FflasTrans, M, 0, M, A, lda, P);  
    587  
    588                 delete[] P; 
    589                 delete[] Q; 
    590                  
    591                 if (nullity > 0) 
    592                         return NULL; 
    593                 else 
    594                         return A; 
     586                size_t R =  ReducedColumnEchelonForm (F, M, M, A, lda, P, Q); 
     587                nullity = M - R; 
     588                applyP (F, FflasLeft, FflasTrans, M, 0, R, A, lda, P);  
     589                delete [] P; 
     590                delete [] Q; 
     591                return A; 
    595592        } 
    596593 
     
    10981095        CharPoly( const Field& F, std::list<Polynomial>& charp, const size_t N, 
    10991096                  typename Field::Element * A, const size_t lda, 
    1100                   const FFPACK_CHARPOLY_TAG CharpTag= FfpackLUK); 
     1097                  const FFPACK_CHARPOLY_TAG CharpTag= FfpackArithProg); 
    11011098         
    11021099        /** 
     
    13471344        KGFast ( const Field& F, std::list<Polynomial>& charp, const size_t N, 
    13481345                 typename Field::Element * A, const size_t lda,  
    1349                  size_t * kg_mc, size_t* kg_mc, size_t* kg_j ); 
     1346                 size_t * kg_mc, size_t* kg_mb, size_t* kg_j ); 
    13501347 
    13511348        template <class Field, class Polynomial>