1 | #ifndef MATPOL_H |
---|
2 | #define MATPOL_H |
---|
3 | /**************************************** |
---|
4 | * Computer Algebra System SINGULAR * |
---|
5 | ****************************************/ |
---|
6 | /* |
---|
7 | * ABSTRACT |
---|
8 | */ |
---|
9 | |
---|
10 | #include "polys/monomials/ring.h" |
---|
11 | |
---|
12 | // THIS IS REALLY DIRTY: ip_smatrix HAS TO BE IDENTICAL TO ip_sideal |
---|
13 | // SO, DON'T CHANGE THE DECLARATION OF ip_smatrix |
---|
14 | class ip_smatrix |
---|
15 | { |
---|
16 | public: |
---|
17 | |
---|
18 | poly *m; |
---|
19 | long rank; |
---|
20 | int nrows; |
---|
21 | int ncols; |
---|
22 | |
---|
23 | inline int& rows() { return nrows; } |
---|
24 | inline int& cols() { return ncols; } |
---|
25 | |
---|
26 | #define MATROWS(i) ((i)->nrows) |
---|
27 | #define MATCOLS(i) ((i)->ncols) |
---|
28 | #define MATELEM(mat,i,j) ((mat)->m)[MATCOLS((mat)) * ((i)-1) + (j)-1] |
---|
29 | }; |
---|
30 | |
---|
31 | typedef ip_smatrix * matrix; |
---|
32 | |
---|
33 | matrix mpNew(int r, int c); |
---|
34 | static inline matrix mp_New(int r, int c){ return mpNew(r,c); } |
---|
35 | |
---|
36 | // matrix mpCopy(matrix a); |
---|
37 | void mp_Delete(matrix* a, const ring r); |
---|
38 | matrix mp_Copy(const matrix a, const ring rSrc, const ring rDst); |
---|
39 | |
---|
40 | matrix mp_Copy(matrix a, const ring r); |
---|
41 | // static inline matrix mp_Copy(matrix a, const ring r){ return mp_Copy(a, r, r); } |
---|
42 | |
---|
43 | matrix mp_InitP(int r, int c, poly p, const ring R); |
---|
44 | matrix mp_InitI(int r, int c, int v, const ring R); |
---|
45 | matrix mp_MultI(matrix a, int f, const ring r); |
---|
46 | matrix mp_MultP(matrix a, poly p, const ring r); |
---|
47 | matrix pMultMp(poly p, matrix a, const ring r); |
---|
48 | matrix mp_Add(matrix a, matrix b, const ring r); |
---|
49 | matrix mp_Sub(matrix a, matrix b, const ring r); |
---|
50 | matrix mp_Mult(matrix a, matrix b, const ring r); |
---|
51 | matrix mp_Transp(matrix a, const ring r); |
---|
52 | BOOLEAN mp_Equal(matrix a, matrix b, const ring r); |
---|
53 | poly mp_Trace ( matrix a, const ring r); |
---|
54 | poly TraceOfProd ( matrix a, matrix b, int n, const ring r); |
---|
55 | |
---|
56 | // poly mp_Det (matrix m, const ring r); |
---|
57 | matrix mp_Wedge(matrix a, int ar, const ring r); |
---|
58 | |
---|
59 | // BOOLEAN mpJacobi(leftv res,leftv a); |
---|
60 | // BOOLEAN mpKoszul(leftv res,leftv b/*in*/, leftv c/*ip*/, leftv id=NULL); |
---|
61 | |
---|
62 | poly mp_DetBareiss (matrix a, const ring r); |
---|
63 | |
---|
64 | //matrix mp_Homogen(matrix a, int v, const ring r); |
---|
65 | |
---|
66 | void mp_Monomials(matrix c, int r, int var, matrix m, const ring R); |
---|
67 | |
---|
68 | /// corresponds to Maple's coeffs: |
---|
69 | /// var has to be the number of a variable |
---|
70 | matrix mp_Coeffs(ideal I, int var, const ring r); |
---|
71 | |
---|
72 | matrix mp_CoeffProc (poly f, poly vars, const ring r); |
---|
73 | /// corresponds to Macauley's coef: |
---|
74 | /// the exponent vector of vars has to contain the variables, eg 'xy'; |
---|
75 | /// then the poly f is searched for monomials in x and y, these monimials |
---|
76 | /// are written to the first row of the matrix co. |
---|
77 | /// the second row of co contains the respective factors in f. |
---|
78 | /// Thus f = sum co[1,i]*co[2,i], i = 1..cols, rows equals 2. |
---|
79 | void mp_Coef2(poly v, poly vars, matrix *c, matrix *m, const ring r); |
---|
80 | |
---|
81 | /// for minors with Bareiss |
---|
82 | void mp_RecMin(int, ideal, int &, matrix, int, int, poly, ideal, const ring); |
---|
83 | void mp_MinorToResult(ideal, int &, matrix, int, int, ideal, const ring); |
---|
84 | |
---|
85 | BOOLEAN mp_IsDiagUnit(matrix U, const ring r); |
---|
86 | |
---|
87 | /// set spaces to zero by default |
---|
88 | void iiWriteMatrix(matrix im, const char *n, int dim, const ring r, int spaces); |
---|
89 | |
---|
90 | char * iiStringMatrix(matrix im, int dim, const ring r, char ch=','); |
---|
91 | |
---|
92 | extern omBin ip_smatrix_bin; |
---|
93 | |
---|
94 | int mp_Compare(matrix a, matrix b, const ring r); |
---|
95 | |
---|
96 | // ------------------------------------------------------- |
---|
97 | ideal sm_Add(ideal a, ideal b, const ring R); |
---|
98 | ideal sm_Sub(ideal a, ideal b, const ring R); |
---|
99 | ideal sm_Mult(ideal a, ideal b, const ring R); |
---|
100 | ideal sm_Flatten(ideal a, const ring R); |
---|
101 | ideal sm_UnFlatten(ideal a, int col, const ring R); |
---|
102 | poly sm_Trace ( ideal a, const ring R); |
---|
103 | int sm_Compare(ideal a, ideal b, const ring R); |
---|
104 | BOOLEAN sm_Equal(ideal a, ideal b, const ring R); |
---|
105 | ideal sm_Tensor(ideal A, ideal B, const ring r); |
---|
106 | |
---|
107 | #define SMATELEM(A,i,j,R) p_Vec2Poly(A->m[j],i+1,R) |
---|
108 | |
---|
109 | #endif/* MATPOL_H */ |
---|