linbox
1
|
mod m Smith form by elmination More...
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include "linbox/field/modular-int32.h"
#include "linbox/blackbox/sparse.h"
#include "linbox/algorithms/smith-form-sparseelim-local.h"
#include "linbox/util/timer.h"
#include "linbox/field/unparametric.h"
#include "linbox/field/local2_32.h"
#include "linbox/field/ntl-ZZ.h"
#include "linbox/algorithms/smith-form-local.h"
#include "linbox/algorithms/smith-form-local2.h"
#include <linbox/algorithms/smith-form-iliopoulos.h>
#include "linbox/algorithms/smith-form-adaptive.h"
#include "linbox/blackbox/dense.h"
#include "linbox/field/PIR-modular-int32.h"
Functions | |
template<class PIR > | |
void | Mat (DenseMatrix< PIR > &M, PIR &R, int n, string src, string file, string format) |
mod m Smith form by elmination
Various Smith form algorithms may be used for matrices over the integers or over Z_m. If the modulus is greater than 2^32, the "-DBIG" compilation option must be used. Several types of example matrices may be constructed or matrix read from file. Run the program with no arguments for a synopsis of the command line parameters.
For the "adaptive" method, the matrix must be over the NTL_ZZ representation of the integers.
For the "2local" method, the computation is done mod 2^32.
For the "local" method, the modulus must be a prime power.
For the "ilio" method, the modulus may be arbitrary composite.
This example was used during the design process of the adaptive algorithm.
void Mat | ( | DenseMatrix< PIR > & | M, |
PIR & | R, | ||
int | n, | ||
string | src, | ||
string | file, | ||
string | format | ||
) |
Output matrix is determined by src which may be: "random-rough" This mat will have s, near sqrt(n), distinct invariant factors, each repeated twice), involving the s primes 101, 103, ... "random" This mat will have the same nontrivial invariant factors as diag(1,2,3,5,8, ... 999, 0, 1, 2, ...). "fib" This mat will have the same nontrivial invariant factors as diag(1,2,3,5,8, ... fib(k)), where k is about sqrt(n). The basic matrix is block diagonal with i-th block of order i and being a tridiagonal {-1,0,1} matrix whose snf = diag(i-1 1's, fib(i)), where fib(1) = 1, fib(2) = 2. But note that, depending on n, the last block may be truncated, thus repeating an earlier fibonacci number. "file" (or any other string) mat read from named file with format "sparse" or "dense". Also "tref" and file with format "kdense"