Determinant of dense matrix over Z or sparse matrix over Zp.
#include <iostream>
using namespace std;
template<class MatRep> void handleDet( istream & matData, long p = 0);
int main (int argc, char **argv)
{
commentator().
setMaxDetailLevel (-1);
commentator().
setMaxDepth (-1);
commentator().
setReportStream (std::cerr);
if (argc <= 1 || argc > 3) {
cerr << "Usage: det <matrix-file-in-supported-format> [<p>]" << endl;
return -1;
}
ifstream matData (argv[1]);
if (!matData) {
cerr << "Error opening matrix file " << argv[1] << endl;
return -1;
}
if (argc == 2 )
handleDet< DenseMatrix< Givaro::ZRing< Integer > > >
(matData);
if (argc == 3 )
handleDet< SparseMatrix< Givaro::Modular< double > > >
(matData, atoi(argv[2]));
}
template<class MatRep>
void handleDet(istream & matData, long p) {
typedef typename MatRep::Field Ring;
Ring R(p);
MatRep A(R);
A.read(matData);
cout << "Matrix is " << A.rowdim() << " by " << A.coldim() << endl;
typename Ring::Element det_A;
cout << "Determinant is ";
R.write(cout, det_A) << endl;
}
Blackbox::Field::Element & det(typename Blackbox::Field::Element &d, const Blackbox &A, const DomainCategory &tag, const DetMethod &Meth)
Compute the determinant of A.