My Project  debian-1:4.1.1-p2+ds-4build2
nforder.h
Go to the documentation of this file.
1 //////////////////////////////////////////
2 //////////////////////////////////////////
3 //// Einfache Ordnungs-Klasse ////
4 //////////////////////////////////////////
5 // Kira Kraft, Jan Albert, Marco Sieben //
6 /////// Praktikum bei Herrn Fieker ///////
7 //////////////////////////////////////////
8 //////////////////////////////////////////
9 /*
10  * - Einer Ordnung liegt entweder eine Multiplikationstabelle zu Grunde, oder sie wird durch eine O-Basis erzeugt, wobei O eine andere Ordnung ist
11  * - Ordnungselemente werden als Koeffizientenvektoren (Klasse matrix, Zeilenvektoren!) dargestellt und können addiert/subtrahiert/multipliziert werden
12  * - Die Diskriminante kann von selbst berechnet werden
13 */
14 #ifndef NFORDER_HPP
15 #define NFORDER_HPP
16 
18  one_is_one, //if 1 is the first basis element
21 };
22 
23 class nforder
24 {
25 private:
26  ////////////////////////////////////
27  ////////// Membervariablen /////////
28  ////////////////////////////////////
29  int rc;
30  number discriminant;
31  int dimension;
33  bigintmat **multtable; // Multiplikationstabelle als Array von Matrizen ...
34  nforder *baseorder; // ... oder zu Grunde liegende Ordnung
35  bigintmat *basis; // Lin.Komb. der Basiselemente von baseorder zu Basiselementen der Ordnung (Eine Zeile ^= ein Basiselement)
36  number divisor; // Hauptnenner der Linearkombination der Basiselemente
37  // Entweder multtable oder baseorder zeigt auf NULL - je nachdem, wie die Ordnung konstruiert wurde
38  bigintmat *inv_basis; // (inv_basis/inv_divisor) = (basis/divisor)^-1
39  number inv_divisor; //
40  int flags;
41 
42  ////////////////////////////////////
43  /////// -1 Memberfunktionen ////////
44  ////////////////////////////////////
45  // Genauere Beschreibung aller Funktionen in der Funktionen.odt
46 
47  void init(); //basic initialisation
48 public:
49  void calcdisc(); // Berechnet Diskriminante
50  inline int ref_count_incref(){return rc++;};
51  inline int ref_count_decref(){return rc--;};
52  inline int ref_count(){return rc;};
53 
54 
55  ////////////////////////////////////
56  /// 0 Konstruktoren/Destruktoren ///
57  ////////////////////////////////////
58  //Lädt entweder Multiplikationstabelle von location, oder legt Ordnung o zu Grunde (mit Basis base und Hauptnenner div)
59  nforder(int dim, bigintmat **m, const coeffs q); // (keine Übergabe von const char *, sondern von bigintmat *, diese wird kopiert und als multtable verwendet)
60  nforder(nforder *o, bigintmat *base, number div, const coeffs q);
61  nforder(nforder *o, int);
62 
63  ~nforder();
64  void Write();
65  char* String();
66  void Print();
67  nforder *simplify(); //collapses a tower: multipy all bases together
68 
69  ////////////////////////////////////
70  // +1 Zugriff auf Membervariablen //
71  ////////////////////////////////////
72 
73  number getDisc();
74  inline number viewDisc(){return discriminant;};
75  int getDim();
76  inline coeffs basecoeffs() const { return m_coeffs; }
77  number getDiv();
78  // Liefert Zeiger auf Kopier der Objekte zurück
79  bool getMult(bigintmat **m);
80  nforder *getBase();
83 
84  inline bool oneIsOne() {return (flags & (1<<one_is_one)) != 0;}
85  inline void setOneIsOne() {flags |= (1<<one_is_one);}
86 
87  inline bool isMaximalKnown() {return (flags & (1<<is_maximal_known)) != 0;};
88  inline bool isMaximal() {return isMaximalKnown() && (flags & (1<<is_maximal_known));};
89  inline void setIsMaximal(bool is) {flags = (flags & (~((1<<is_maximal_known) + (1<<is_maximal)))) | (1<<is_maximal_known) | (is*(1<<is_maximal));};
90 
91 
92 
93  ////////////////////////////////////
94  ////// +2 Elementoperationen ///////
95  ////////////////////////////////////
96  // Addiert/Subtrahiert/Multipliziert zu a das Element b hinzu
97  void elAdd(bigintmat *a, bigintmat *b);
98  void elSub(bigintmat *a, bigintmat *b);
99  void elMult(bigintmat *a, bigintmat *b);
100  number elTrace(bigintmat *a);
101  number elNorm(bigintmat *a);
103 
104  ////////////////////////////////////
105  //// +3 Funktionen für Round 2 /////
106  ////////////////////////////////////
107  // long long int getsmallestsqprime();
108  /* Liefert kleinste Primzahl >= p, die die Diskriminante quadratisch teilt */
109  void multmap(bigintmat *a, bigintmat *m);
111 
112  void createmulttable(bigintmat **a);
113 
114 };
115 
116 ////////////////////////////////////
117 ////// 1 Komfortfunktionen /////////
118 ////////////////////////////////////
119 /* Setzt Vektor m auf (0,...,0,1,0,...,0) (i-ten Basisvektor) */
120 void basis_elt(bigintmat *m, int i);
121 
122 ////////////////////////////////////
123 //////////// 2 Round 2 /////////////
124 ////////////////////////////////////
125 /* Liefert bzgl. Primzahl p um eines größere Ordnung von o zurück */
126 nforder *onestep(nforder *o, number p, coeffs c);
127 /* Macht liefert p-maximale Ordnung von o zurück */
128 nforder *pmaximal(nforder *o, number p);
129 /* Liefert Maximalordnung, ausgehend von o, zurück */
130 nforder *round2(nforder *o); // Benötigt Faktorisierung der Diskriminanten
131 /* Liefert Basis von I_p(O)/pI_p(O) */
132 bigintmat *radicalmodpbase(nforder *o, number p, coeffs c);
133 /* Berechnet die Basis mit Hilfe der langen Matrix */
134 number multring(bigintmat* nbase, nforder *o, number p);
135 void nforder_delete(nforder *o);
136 
137 #endif
dim
int dim(ideal I, ring r)
Definition: tropicalStrategy.cc:23
nforder::ref_count
int ref_count()
Definition: nforder.h:52
nforder::elRepMat
bigintmat * elRepMat(bigintmat *a)
Definition: nforder.cpp:395
nforder::oneIsOne
bool oneIsOne()
Definition: nforder.h:84
is_maximal
@ is_maximal
Definition: nforder.h:20
pmaximal
nforder * pmaximal(nforder *o, number p)
Definition: nforder.cpp:632
onestep
nforder * onestep(nforder *o, number p, coeffs c)
Definition: nforder.cpp:608
nforder::inv_divisor
number inv_divisor
Definition: nforder.h:39
nforder::divisor
number divisor
Definition: nforder.h:36
bigintmat
Definition: bigintmat.h:51
nforder::rc
int rc
Definition: nforder.h:29
nforder::Print
void Print()
Definition: nforder.cpp:126
CxxTest::base
char N base
Definition: ValueTraits.h:144
nforder::flags
int flags
Definition: nforder.h:40
nforder::setOneIsOne
void setOneIsOne()
Definition: nforder.h:85
nforder::elTrace
number elTrace(bigintmat *a)
Definition: nforder.cpp:379
nforder::traceMatrix
bigintmat * traceMatrix()
Definition: nforder.cpp:196
nforder::nforder
nforder(int dim, bigintmat **m, const coeffs q)
0 Konstruktoren/Destruktoren ///
Definition: nforder.cpp:30
nforder::elAdd
void elAdd(bigintmat *a, bigintmat *b)
Definition: nforder.cpp:301
b
CanonicalForm b
Definition: cfModGcd.cc:4044
nforder::basecoeffs
coeffs basecoeffs() const
Definition: nforder.h:76
nforder::multmap
void multmap(bigintmat *a, bigintmat *m)
Definition: nforder.cpp:404
nforder::elNorm
number elNorm(bigintmat *a)
Definition: nforder.cpp:387
nforder::init
void init()
Definition: nforder.cpp:16
nforder::basis
bigintmat * basis
Definition: nforder.h:35
nforder
Definition: nforder.h:23
i
int i
Definition: cfEzgcd.cc:125
nforder::createmulttable
void createmulttable(bigintmat **a)
Definition: nforder.cpp:677
nforder::discriminant
number discriminant
Definition: nforder.h:30
one_is_one
@ one_is_one
Definition: nforder.h:18
nforder::getMult
bool getMult(bigintmat **m)
Definition: nforder.cpp:251
coeffs
nforder::viewBasis
bigintmat * viewBasis()
Definition: nforder.cpp:246
nforder::calcdisc
void calcdisc()
Definition: nforder.cpp:162
nforder::isMaximal
bool isMaximal()
Definition: nforder.h:88
nforder::String
char * String()
Definition: nforder.cpp:121
nforder::m_coeffs
coeffs m_coeffs
Definition: nforder.h:32
multring
number multring(bigintmat *nbase, nforder *o, number p)
Definition: nforder.cpp:553
round2
nforder * round2(nforder *o)
nforder::getDim
int getDim()
Definition: nforder.cpp:235
nforder::multtable
bigintmat ** multtable
Definition: nforder.h:33
order_flags_log
order_flags_log
Definition: nforder.h:17
nforder::Write
void Write()
Definition: nforder.cpp:87
nforder::dimension
int dimension
Definition: nforder.h:31
div
CF_NO_INLINE CanonicalForm div(const CanonicalForm &, const CanonicalForm &)
CF_INLINE CanonicalForm div, mod ( const CanonicalForm & lhs, const CanonicalForm & rhs )
Definition: cf_inline.cc:553
is_maximal_known
@ is_maximal_known
Definition: nforder.h:19
nforder::ref_count_decref
int ref_count_decref()
Definition: nforder.h:51
nforder::baseorder
nforder * baseorder
Definition: nforder.h:34
nforder::getBase
nforder * getBase()
Definition: nforder.cpp:268
nforder::elMult
void elMult(bigintmat *a, bigintmat *b)
Definition: nforder.cpp:321
nforder::simplify
nforder * simplify()
Definition: nforder.cpp:275
basis_elt
void basis_elt(bigintmat *m, int i)
Definition: nforder.cpp:422
nforder::getBasis
bigintmat * getBasis()
Definition: nforder.cpp:239
nforder_delete
void nforder_delete(nforder *o)
Definition: nforder.cpp:132
radicalmodpbase
bigintmat * radicalmodpbase(nforder *o, number p, coeffs c)
Definition: nforder.cpp:446
nforder::isMaximalKnown
bool isMaximalKnown()
Definition: nforder.h:87
m
int m
Definition: cfEzgcd.cc:121
nforder::ref_count_incref
int ref_count_incref()
Definition: nforder.h:50
nforder::getDisc
number getDisc()
Definition: nforder.cpp:227
nforder::viewDisc
number viewDisc()
Definition: nforder.h:74
nforder::setIsMaximal
void setIsMaximal(bool is)
Definition: nforder.h:89
p
int p
Definition: cfModGcd.cc:4019
nforder::getDiv
number getDiv()
Definition: nforder.cpp:264
nforder::elSub
void elSub(bigintmat *a, bigintmat *b)
Definition: nforder.cpp:311
nforder::inv_basis
bigintmat * inv_basis
Definition: nforder.h:38
nforder::~nforder
~nforder()
Definition: nforder.cpp:139