source: git/factory/cf_algorithm.h @ 3edea1

spielwiese
Last change on this file since 3edea1 was 3edea1, checked in by Hans Schoenemann <hannes@…>, 3 years ago
cygwin port: shared lib libfactory
  • Property mode set to 100644
File size: 4.3 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 FACTORY_PUBLIC 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 FACTORY_PUBLIC chineseRemainder ( const CanonicalForm & x1, const CanonicalForm & q1, const CanonicalForm & x2, const CanonicalForm & q2, CanonicalForm & xnew, CanonicalForm & qnew );
54
55void FACTORY_PUBLIC chineseRemainder ( const CFArray & x, const CFArray & q, CanonicalForm & xnew, CanonicalForm & qnew );
56
57void FACTORY_PUBLIC chineseRemainderCached ( const CanonicalForm & x1, const CanonicalForm & q1, const CanonicalForm & x2, const CanonicalForm & q2, CanonicalForm & xnew, CanonicalForm & qnew, CFArray &inv );
58void FACTORY_PUBLIC chineseRemainderCached(const CFArray &a, const CFArray &n, CanonicalForm &xnew, CanonicalForm &prod, CFArray &inv);
59
60
61CanonicalForm Farey ( const CanonicalForm & f, const CanonicalForm & q );
62//}}}
63
64//{{{ function declarations from cf_factor.cc
65EXTERN_VAR int singular_homog_flag;
66
67bool isPurePoly(const CanonicalForm & f);
68
69bool isPurePoly_m(const CanonicalForm & f);
70
71CFFList FACTORY_PUBLIC factorize ( const CanonicalForm & f, bool issqrfree = false );
72
73CFFList FACTORY_PUBLIC factorize ( const CanonicalForm & f, const Variable & alpha );
74
75CFFList FACTORY_PUBLIC sqrFree ( const CanonicalForm & f, bool sort= false );
76
77CanonicalForm homogenize( const CanonicalForm & f, const Variable & x);
78CanonicalForm homogenize( const CanonicalForm & f, const Variable & x,
79                                const Variable & v1, const Variable & v2);
80Variable get_max_degree_Variable(const CanonicalForm & f);
81CFList get_Terms( const CanonicalForm & f );
82void getTerms( const CanonicalForm & f, const CanonicalForm & t, CFList & result );
83
84
85//}}}
86
87//{{{ function declarations from cf_linsys.cc
88bool linearSystemSolve ( CFMatrix & M );
89
90CanonicalForm FACTORY_PUBLIC determinant ( const CFMatrix & M, int n );
91//}}}
92
93//{{{ function declarations from cf_resultant.cc
94CFArray subResChain ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x );
95
96CanonicalForm FACTORY_PUBLIC resultant ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x );
97//}}}
98
99/** inline CanonicalForm abs ( const CanonicalForm & f )
100 *
101 * abs() - return absolute value of `f'.
102 *
103 * The absolute value is defined in terms of the function
104 * `sign()'.  If it reports negative sign for `f' than -`f' is
105 * returned, otherwise `f'.
106 *
107 * This behaviour is most useful for integers and rationals.  But
108 * it may be used to sign-normalize the leading coefficient of
109 * arbitrary polynomials, too.
110 *
111 * Type info:
112 * ----------
113 * f: CurrentPP
114 *
115**/
116inline CanonicalForm
117abs ( const CanonicalForm & f )
118{
119    // it is not only more general to use `sign()' instead of a
120    // direct comparison `f < 0', it is faster, too
121    if ( sign( f ) < 0 )
122        return -f;
123    else
124        return f;
125}
126//}}}
127
128/*ENDPUBLIC*/
129
130#endif /* ! INCL_CF_ALGORITHM_H */
Note: See TracBrowser for help on using the repository browser.