NullSpace of sparse matrix over GFq.
NullSpace of sparse matrix over GFq.nullspace is allocated rank \times n.
#include <givaro/gfq.h>
#include <iostream>
int main (
int argc,
char **argv)
{
if ( argc < 2 || argc > 4) {
std::cerr << "Usage to get a random null space basis over GF(p,k): <matrix-file-in-SMS-format> p [k]" << std::endl;
return -1;
}
std::ifstream input (argv[1]);
if (!input) {
std::cerr << "Error opening matrix file " << argv[1] << std::endl;
return -1;
}
int pVal = atoi(argv[2]);
typedef Givaro::GFqDom<int64_t> Field;
Field F(pVal, argc>3?atoi(argv[3]):1);
SparseMatrix<Field, SparseMatrixFormat::SparseSeq > A (F);
A.read (input);
std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl;
typename Field::Element Det;
size_t Rank;
size_t Ni(A.rowdim()),Nj(A.coldim());
Permutation<Field> P(F,(int)Nj);
for(size_t i=0; i< Ni; ++i) {
if (A[i].size() == 0) {
size_t j(i);
if (nextnonzero(j,Ni,A)) {
A[i] = A[j];
A[j].resize(0);
}
else {
break;
}
}
}
size_t nullity = A.coldim()-Rank;
NullSpace.
write( std::cerr <<
"X:=", Tag::FileFormat::Maple ) <<
';' << std::endl;
std::cerr <<
"NullsSpace dimensions:" << NullSpace.
rowdim() <<
'x' << NullSpace.
coldim() << std::endl;
return 0;
}
size_t rowdim() const
Get the number of rows in the matrix.
Definition blas-matrix.inl:502
size_t coldim() const
Get the number of columns in the matrix.
Definition blas-matrix.inl:508
std::ostream & write(std::ostream &os) const
Write the matrix in MatrixMarket format.
Definition blas-matrix.h:562
Repository of functions for rank by elimination on sparse matrices.
Definition gauss.h:69
Block & nullspacebasis(Block &x, size_t rank, const _Matrix &U, const Perm &P) const
Sparse in place Gaussian elimination with reordering to reduce fill-in.
Definition gauss-nullspace.inl:45
size_t & InPlaceLinearPivoting(size_t &rank, Element &determinant, _Matrix &A, size_t Ni, size_t Nj) const
Sparse in place Gaussian elimination with reordering to reduce fill-in.
Definition gauss.inl:490
int main()
no command line args
Definition ex-fields-archetype.C:70
Gauss elimination and applications for sparse matrices.
Namespace in which all linbox code resides.
Definition alt-blackbox-block-container.h:4