Compute the integer characteristic polynomial of symetric matrices with (0,1) coefficients.Example for Pr G. Royle.
#include <iostream>
#include <linbox/blackbox/zero-one.h>
#include <givaro/zring.h>
#include <linbox/solutions/charpoly.h>
#include <linbox/solutions/methods.h>
template <class Field, class Polynomial>
{
int n= (int) P.size()-1;
if (n==1){
cout<<"X";
if ( P[0] != 0)
F.write(cout<<((P[0]>0)?"+":""),P[0]);
}
else{
cout<<"X^"<<n;
for ( int i=n-1; i>1; --i)
if (!F.isZero(P[(size_t)i]))
F.write(cout<<((P[(size_t)i]>0)?"+":""),P[(size_t)i])<<"*X^"<<i;
if ( P[1] != 0)
F.write(cout<<((P[1]>0)?"+":""),P[1])<<"*X";
if ( P[0] != 0)
F.write(cout<<((P[0]>0)?"+":""),P[0]);
}
}
int main (int argc, char **argv)
{
commentator().
getMessageClass (BRIEF_REPORT).setMaxDepth (2);
commentator().getMessageClass (BRIEF_REPORT).setMaxDetailLevel (Commentator::LEVEL_UNIMPORTANT);
if (argc != 2) {
cerr << "Usage: graph-charpoly <0/1-symmetric-matrix-file-in-SMS-format>" <<endl;
return -1;
}
ifstream input (argv[1]);
if (!input) {
cerr << "Error opening matrix file " << argv[1] << endl;
return -1;
}
typedef Givaro::ZRing<Integer> IRing_t;
IRing_t ZZ;
commentator().
report(1, BRIEF_REPORT)<<
"A is " << A.
rowdim() <<
" by " << A.
coldim() << endl;
charpoly (c_A, A, Method::Blackbox(Method::Wiedemann(Shape::Symmetric)));
cout<< "Characteristic Polynomial is ", c_A) << std::endl;
return 0;
}