Characteristic polynomial of matrix over Z or Zp.
Characteristic polynomial of matrix over Z or Zp.
#define __LB_CRA_TIMING__ 1
#include <iostream>
#include <iomanip>
#include <givaro/zring.h>
template <class Field, class Polynomial>
{
for (int i = (int)(v.size () - 1); i >= 0; i--) {
F.write (out, v[(size_t)i]);
if (i > 0)
out << " X^" << i << " + ";
}
return out;
}
template <class Field, class Polynomial>
{
F.write(out, v[0]);
}
else {
if (v[
n] != 1) F.write(out, v[
n]) <<
'*';
out << 'X';
if (
n > 1) out <<
'^' <<
n;
for (
int i = (
int)
n - 1; i > 0; i--) {
if (v[(size_t)i] != 0) {
if (v[(size_t)i] >0) out << " + ";
if (v[(size_t)i] != 1) F.write (out, v[(size_t)i]) << '*';
out << 'X';
if (i > 1) out << '^' << i;
}
}
if (v[0] != 0) {
if (v[0] >0) out << " + ";
F.write(out, v[0]);
}
}
}
return out;
}
template <class Field, class Factors, class Exponents>
{
typename Factors::const_iterator itf = f.begin();
typename Exponents::const_iterator ite = exp.begin();
for ( ; itf != f.end(); ++itf, ++ite) {
if (*ite > 1) out << '^' << *ite;
out << endl;
}
return out;
}
typedef Givaro::ZRing<Givaro::Integer>
IntDom;
int main (
int argc,
char **argv)
{
cout<<setprecision(8);
cerr<<setprecision(8);
if (argc < 2 || argc > 3) {
cerr << "Usage: charpoly <matrix-file-in-SMS-format> [<p>]" << endl;
return -1;
}
ifstream input (argv[1]);
if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; }
if (argc == 2) {
A.read (input);
Timer tim; tim.clear();tim.start();
tim.stop();
clog << "Characteristic Polynomial is ";
cout << tim << endl;
#ifdef __LINBOX_HAVE_NTL
clog << "Do you want a factorization (y/n) ? ";
char tmp;
cin >> tmp;
if (tmp == 'y' || tmp == 'Y') {
commentator().start(
"Integer Polynomial factorization by NTL",
"NTLfac");
vector<DensePolynomial<IntDom> > intFactors;
vector<uint64_t> exp;
tim.start();
IPD.factor (intFactors, exp, c_A);
tim.stop();
printFactorization(clog << intFactors.size() <<
" integer polynomial factors:" << endl, ZZ, intFactors, exp) << endl;
cout << tim << endl;
}
#endif
}
if (argc == 3) {
typedef Givaro::Modular<double>
Field;
double q = atof(argv[2]);
B.read (input);
clog << "B is " << B.rowdim() << " by " << B.coldim() << endl;
Timer tim; tim.clear();tim.start();
tim.stop();
clog << "Characteristic Polynomial is ";
cout << tim << endl;
}
return 0;
}
std::ostream & printFactorization(std::ostream &out, const Field &F, const Factors &f, const Exponents &exp)
Definition charpoly.C:85
std::ostream & printPolynomial(std::ostream &out, const Field &F, const Polynomial &v)
Definition charpoly.C:47
std::ostream & prettyprintIntegerPolynomial(std::ostream &out, const Field &F, const Polynomial &v)
Definition charpoly.C:57
Givaro::ZRing< Givaro::Integer > IntDom
Definition charpoly.C:97
Dense Polynomial representation using Givaro.
Definition dense-polynomial.h:50
Givaro::Modular< uint32_t > Field
Definition dot-product.C:49
linbox base configuration file
A Givaro::Modular ring is a representations of Z/mZ.
Namespace in which all linbox code resides.
Definition alt-blackbox-block-container.h:4
Givaro::Timer Timer
Definition timer.h:55
Polynomial & charpoly(Polynomial &P, const Blackbox &A, const DomainCategory &tag, const MyMethod &M)
BlasMatrix< _Field > DenseMatrix
Definition dense-matrix.h:46
A SparseMatrix<_Field, _Storage> ....
int n
Definition t-rdisolve.C:74
Commentator & commentator()
Definition commentator.h:998
PolynomialRing::Element Polynomial
Definition test-toeplitz.C:15
NTL_zz_pX PolynomialRing
Definition test-toeplitz.C:14
int main()
Definition test-tutorial.C:54
LinBox timer is Givaro's.