source: git/factory/cf_algorithm.h @ 4a7a45

spielwiese
Last change on this file since 4a7a45 was a3f0fea, checked in by Reimer Behrends <behrends@…>, 5 years ago
Modify variable declarions for pSingular.
  • Property mode set to 100644
File size: 4.0 KB
Line 
1/* emacs edit mode for this file is -*- C++ -*- */
2
3/**
4 * @file cf_algorithm.h
5 * declarations of higher level algorithms.
6 *
7 * Header file corresponds to: cf_algorithm.cc, cf_chinese.cc,
8 *   cf_factor.cc, cf_linsys.cc, cf_resultant.cc
9 *
10 * Hierarchy: mathematical algorithms on canonical forms
11 *
12 * Developers note:
13 * ----------------
14 * This header file collects declarations of most of the
15 * functions in Factory which implement higher level algorithms
16 * on canonical forms (factorization, gcd, etc.) and declarations
17 * of some low level mathematical functions, too (absolute value,
18 * euclidean norm, etc.).
19 *
20**/
21
22#ifndef INCL_CF_ALGORITHM_H
23#define INCL_CF_ALGORITHM_H
24
25// #include "config.h"
26
27#include "canonicalform.h"
28#include "variable.h"
29
30/*BEGINPUBLIC*/
31
32//{{{ function declarations from cf_algorithm.cc
33CanonicalForm psr ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x );
34
35CanonicalForm psq ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x );
36
37void psqr ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm & q, CanonicalForm & r, const Variable & x );
38
39CanonicalForm bCommonDen ( const CanonicalForm & f );
40
41bool fdivides ( const CanonicalForm & f, const CanonicalForm & g );
42
43bool fdivides ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm& quot );
44
45bool tryFdivides ( const CanonicalForm & f, const CanonicalForm & g, const CanonicalForm& M, bool& fail );
46
47CanonicalForm maxNorm ( const CanonicalForm & f );
48
49CanonicalForm euclideanNorm ( const CanonicalForm & f );
50//}}}
51
52//{{{ function declarations from cf_chinese.cc
53void chineseRemainder ( const CanonicalForm & x1, const CanonicalForm & q1, const CanonicalForm & x2, const CanonicalForm & q2, CanonicalForm & xnew, CanonicalForm & qnew );
54
55void chineseRemainder ( const CFArray & x, const CFArray & q, CanonicalForm & xnew, CanonicalForm & qnew );
56
57void chineseRemainderCached(CFArray &a, CFArray &n, CanonicalForm &xnew, CanonicalForm &prod, CFArray &inv);
58
59
60CanonicalForm Farey ( const CanonicalForm & f, const CanonicalForm & q );
61//}}}
62
63//{{{ function declarations from cf_factor.cc
64EXTERN_VAR int singular_homog_flag;
65
66bool isPurePoly(const CanonicalForm & f);
67
68bool isPurePoly_m(const CanonicalForm & f);
69
70CFFList factorize ( const CanonicalForm & f, bool issqrfree = false );
71
72CFFList factorize ( const CanonicalForm & f, const Variable & alpha );
73
74CFFList sqrFree ( const CanonicalForm & f, bool sort= false );
75
76CanonicalForm homogenize( const CanonicalForm & f, const Variable & x);
77CanonicalForm homogenize( const CanonicalForm & f, const Variable & x,
78                                const Variable & v1, const Variable & v2);
79Variable get_max_degree_Variable(const CanonicalForm & f);
80CFList get_Terms( const CanonicalForm & f );
81void getTerms( const CanonicalForm & f, const CanonicalForm & t, CFList & result );
82
83
84//}}}
85
86//{{{ function declarations from cf_linsys.cc
87bool linearSystemSolve ( CFMatrix & M );
88
89CanonicalForm determinant ( const CFMatrix & M, int n );
90//}}}
91
92//{{{ function declarations from cf_resultant.cc
93CFArray subResChain ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x );
94
95CanonicalForm resultant ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x );
96//}}}
97
98/** inline CanonicalForm abs ( const CanonicalForm & f )
99 *
100 * abs() - return absolute value of `f'.
101 *
102 * The absolute value is defined in terms of the function
103 * `sign()'.  If it reports negative sign for `f' than -`f' is
104 * returned, otherwise `f'.
105 *
106 * This behaviour is most useful for integers and rationals.  But
107 * it may be used to sign-normalize the leading coefficient of
108 * arbitrary polynomials, too.
109 *
110 * Type info:
111 * ----------
112 * f: CurrentPP
113 *
114**/
115inline CanonicalForm
116abs ( const CanonicalForm & f )
117{
118    // it is not only more general to use `sign()' instead of a
119    // direct comparison `f < 0', it is faster, too
120    if ( sign( f ) < 0 )
121        return -f;
122    else
123        return f;
124}
125//}}}
126
127/*ENDPUBLIC*/
128
129#endif /* ! INCL_CF_ALGORITHM_H */
Note: See TracBrowser for help on using the repository browser.