35 for (
int i=0;
i<
dim;
i++) {
161 /*_______________-1_______________ */
324 Werror(
"Error in elMult");
382 number t = rep_mat->
trace();
390 number
n = rep_mat->
det();
406 Werror(
"Error in multmap");
423 if (((m->
rows() == 1) && (i <= m->cols())) || ((m->
cols() == 1) && (i <= m->rows()))) {
426 for (
int j=0; ((
j<m->
rows()) || (j<m->cols()));
j++) {
436 Werror(
"Error in basis_elt. Not a vector.");
481 for (
int i=1;
i<=
n;
i++) {
505 int kdim =
kernbase(m, kbase, p, c);
510 for (
int i=1;
i<=
n;
i++) {
515 for (
int i=1;
i<=kdim;
i++) {
525 for (
int i=1;
i<=
n;
i++) {
527 nbase->setcol(i, tmp);
568 for (
int i=1;
i<=
n;
i++) {
572 mm->
copy(nochnetemp);
615 number divisor =
multring(basis, o, p);
void concatcol(bigintmat *a, bigintmat *b)
void skaldiv(number b)
Macht Ganzzahldivision aller Matrixeinträge mit b.
number view(int i, int j) const
view an entry an entry. NOTE: starts at [1,1]
static FORCE_INLINE BOOLEAN n_Greater(number a, number b, const coeffs r)
ordered fields: TRUE iff 'a' is larger than 'b'; in Z/pZ: TRUE iff la > lb, where la and lb are the l...
const CanonicalForm int s
number det()
det (via LaPlace in general, hnf for euc. rings)
void elAdd(bigintmat *a, bigintmat *b)
bigintmat * traceMatrix()
void simplifyContentDen(number *den)
ensures that Gcd(den, content)=1 < enden hier wieder
static FORCE_INLINE void n_InpMult(number &a, number b, const coeffs r)
multiplication of 'a' and 'b'; replacement of 'a' by the product a*b
static FORCE_INLINE BOOLEAN n_IsOne(number n, const coeffs r)
TRUE iff 'n' represents the one element.
void inpTranspose()
transpose in place
void setcol(int j, bigintmat *m)
Setzt j-te Spalte gleich übergebenem Vektor (Matrix) m.
bool sub(bigintmat *b)
Subtrahiert ...
int isOne()
is matrix is identity
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
const CanonicalForm CFMap CFMap int &both_non_zero int n
void getColRange(int j, int no, bigintmat *a)
copies the no-columns staring by j (so j...j+no-1) into the pre-allocated a
nforder * pmaximal(nforder *o, number p)
void set(int i, int j, number n, const coeffs C=NULL)
replace an entry with a copy (delete old + copy new!). NOTE: starts at [1,1]
void Write()
IO: writes the matrix into the current internal string buffer which must be started/ allocated before...
int kernbase(bigintmat *a, bigintmat *c, number p, coeffs q)
a basis for the nullspace of a mod p: only used internally in Round2. Don't use it.
bigintmat * elRepMat(bigintmat *a)
void rowhnf(bigintmat *b)
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
nforder * onestep(nforder *o, number p, coeffs c)
number multring(bigintmat *nbase, nforder *o, number p)
Coefficient rings, fields and other domains suitable for Singular polynomials.
bigintmat * bimMult(bigintmat *a, bigintmat *b)
The main handler for Singular numbers which are suitable for Singular polynomials.
static FORCE_INLINE number n_Add(number a, number b, const coeffs r)
return the sum of 'a' and 'b', i.e., a+b
void nforder_delete(nforder *o)
void StringSetS(const char *st)
void StringAppendS(const char *st)
bool skalmult(number b, coeffs c)
Multipliziert zur Matrix den Skalar b hinzu.
static FORCE_INLINE void n_Write(number &n, const coeffs r, const BOOLEAN bShortOut=TRUE)
number elNorm(bigintmat *a)
void hnf()
transforms INPLACE to HNF
void PrintS(const char *s)
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
bigintmat * radicalmodpbase(nforder *o, number p, coeffs c)
number elTrace(bigintmat *a)
void elMult(bigintmat *a, bigintmat *b)
void getcol(int j, bigintmat *a)
copies the j-th column into the matrix a - which needs to be pre-allocated with the correct size...
void multmap(bigintmat *a, bigintmat *m)
bigintmat * modhnf(number p, coeffs c)
computes HNF(this | p*I)
coeffs basecoeffs() const
number trace()
the trace ....
nforder(int dim, bigintmat **m, const coeffs q)
0 Konstruktoren/Destruktoren ///
void createmulttable(bigintmat **a)
static FORCE_INLINE number n_Copy(number n, const coeffs r)
return a copy of 'n'
static FORCE_INLINE number n_Div(number a, number b, const coeffs r)
return the quotient of 'a' and 'b', i.e., a/b; raises an error if 'b' is not invertible in r exceptio...
coeffs basecoeffs() const
bool copy(bigintmat *b)
Kopiert Einträge von b auf Bigintmat.
void basis_elt(bigintmat *m, int i)
void elSub(bigintmat *a, bigintmat *b)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
number pseudoinv(bigintmat *a)
Speichert in Matrix a die Pseudoinverse, liefert den Nenner zurück.
bool getMult(bigintmat **m)
bool add(bigintmat *b)
Addiert zur Matrix die Matrix b dazu. Return false => an error occured.
void Werror(const char *fmt,...)
number get(int i, int j) const
get a copy of an entry. NOTE: starts at [1,1]