source: git/libpolys/polys/matpol.h @ eaf72b

fieker-DuValspielwiese
Last change on this file since eaf72b was eaf72b, checked in by Hans Schoenemann <hannes@…>, 5 years ago
chg: det, add det(m,"method")
  • Property mode set to 100644
File size: 3.9 KB
Line 
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
14class 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  /// 1-based access to matrix
29  #define MATELEM(mat,i,j) ((mat)->m)[MATCOLS((mat)) * ((i)-1) + (j)-1]
30  /// 0-based access to matrix
31  #define MATELEM0(mat,i,j) ((mat)->m)[MATCOLS((mat)) * (i) + (j)]
32};
33
34enum DetVariant
35{
36  DetDefault=0,
37  DetBareiss,
38  DetSBareiss,
39  DetMu,
40  DetFactory
41};
42
43typedef ip_smatrix *       matrix;
44
45matrix mpNew(int r, int c);
46
47void   mp_Delete(matrix* a, const ring r);
48matrix mp_Copy(const matrix a, const ring rSrc, const ring rDst);
49
50matrix mp_Copy(matrix a, const ring r);
51
52matrix mp_InitP(int r, int c, poly p, const ring R);
53matrix mp_InitI(int r, int c, int v, const ring R);
54matrix mp_MultI(matrix a, int f, const ring r);
55matrix mp_MultP(matrix a, poly p, const ring r);
56matrix pMultMp(poly p, matrix a, const ring r);
57matrix mp_Add(matrix a, matrix b, const ring r);
58matrix mp_Sub(matrix a, matrix b, const ring r);
59matrix mp_Mult(matrix a, matrix b, const ring r);
60matrix mp_Transp(matrix a, const ring r);
61BOOLEAN mp_Equal(matrix a, matrix b, const ring r);
62poly mp_Trace ( matrix a, const ring r);
63poly TraceOfProd ( matrix a, matrix b, int n, const ring r);
64
65matrix mp_Wedge(matrix a, int ar, const ring r);
66
67// BOOLEAN mpJacobi(leftv res,leftv a);
68// BOOLEAN mpKoszul(leftv res,leftv b/*in*/, leftv c/*ip*/, leftv id=NULL);
69
70poly mp_Det(matrix a, const ring r, DetVariant d=DetDefault);
71poly mp_DetBareiss (matrix a, const ring r);
72poly mp_DetMu(matrix A, const ring R);
73
74
75//matrix mp_Homogen(matrix a, int v, const ring r);
76
77void   mp_Monomials(matrix c, int r, int var, matrix m, const ring R);
78
79/// corresponds to Maple's coeffs:
80/// var has to be the number of a variable
81matrix mp_Coeffs(ideal I, int var, const ring r);
82
83matrix mp_CoeffProc (poly f, poly vars, const ring r);
84matrix mp_CoeffProcId (ideal I, poly vars, const ring R);
85/// corresponds to Macauley's coef:
86/// the exponent vector of vars has to contain the variables, eg 'xy';
87/// then the poly f is searched for monomials in x and y, these monimials
88/// are written to the first row of the matrix co.
89/// the second row of co contains the respective factors in f.
90/// Thus f = sum co[1,i]*co[2,i], i = 1..cols, rows equals 2.
91void mp_Coef2(poly v, poly vars, matrix *c, matrix *m, const ring r);
92
93/// for minors with Bareiss
94void mp_RecMin(int, ideal, int &, matrix, int, int, poly, ideal, const ring);
95void mp_MinorToResult(ideal, int &, matrix, int, int, ideal, const ring);
96
97BOOLEAN mp_IsDiagUnit(matrix U, const ring r);
98
99/// set spaces to zero by default
100void iiWriteMatrix(matrix im, const char *n, int dim, const ring r, int spaces);
101
102char * iiStringMatrix(matrix im, int dim, const ring r, char ch=',');
103
104extern omBin ip_smatrix_bin;
105
106int mp_Compare(matrix a, matrix b, const ring r);
107
108// -------------------------------------------------------
109ideal sm_Add(ideal a, ideal b, const ring R);
110ideal sm_Sub(ideal a, ideal b, const ring R);
111ideal sm_Mult(ideal a, ideal b, const ring R);
112ideal sm_Flatten(ideal a, const ring R);
113ideal sm_UnFlatten(ideal a, int col, const ring R);
114poly sm_Trace ( ideal a, const ring R);
115int sm_Compare(ideal a, ideal b, const ring R);
116BOOLEAN sm_Equal(ideal a, ideal b, const ring R);
117ideal sm_Tensor(ideal A, ideal B, const ring r);
118poly sm_Det(ideal I, const ring, DetVariant d=DetDefault);
119DetVariant mp_GetAlgorithmDet(matrix m, const ring r);
120DetVariant mp_GetAlgorithmDet(const char *s);
121
122#define SMATELEM(A,i,j,R) p_Vec2Poly(A->m[j],i+1,R)
123
124#endif/* MATPOL_H */
Note: See TracBrowser for help on using the repository browser.