Xmipp  v3.23.11-Nereus
Poly.h
Go to the documentation of this file.
1 /*
2 
3 CONDOR 1.06 - COnstrained, Non-linear, Direct, parallel Optimization
4  using trust Region method for high-computing load,
5  noisy functions
6 Copyright (C) 2004 Frank Vanden Berghen
7 
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation version 2
11 of the License.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 
22 If you want to include this tools in any commercial product,
23 you can contact the author at fvandenb@iridia.ulb.ac.be
24 
25 */
26 
27 #ifndef _INCLUDE_POLY_H_
28 #define _INCLUDE_POLY_H_
29 
30 #include "MultInd.h"
31 #include "Vector.h"
32 //#include "tools.h"
33 #include "Vector.h"
34 #include "Matrix.h"
35 #include <fstream>
36 
37 // ORDER BY DEGREE !
38 class Polynomial {
39 protected:
40 
41  typedef struct PolynomialDataTag
42  {
43  double *coeff; // Coefficients
44  unsigned n, // size of vector of Coefficients
45  dim, // Dimensions
46  deg; // Degree
47  int ref_count;
50  void init(int _dim, int _deg, double *data=NULL);
51  void destroyCurrentBuffer();
52 
53 public:
54  Polynomial(){ init(0,0); };
55  Polynomial( unsigned Dim, unsigned deg=0, double *data=0 );
56  Polynomial( unsigned Dim, double val ); // Constant polynomial
57  Polynomial( MultInd& ); // Monomials
58  Polynomial(char *name);
59 
60 
61  // Accessor
62  inline unsigned dim() { return d->dim; };
63  inline unsigned deg() { return d->deg; };
64  inline unsigned sz() { return d->n; };
65  inline operator double*() const { return d->coeff; };
66 
67  // allow shallow copy:
68  ~Polynomial();
69  Polynomial(const Polynomial &A);
70  Polynomial& operator=( const Polynomial& A );
71  Polynomial clone();
72  void copyFrom(Polynomial a);
73 
74  // Arithmetic operations
75 
76  // friend Polynomial operator*( const double&, const Polynomial& );
77  Polynomial operator*( const double );
78  Polynomial operator/( const double );
81 
82  // Unary
83  Polynomial operator-( void ); // the opposite (negative of)
85  { return *this; }
86 
87  // Assignment+Arithmetics
88 
91  Polynomial operator*=( const double );
92  Polynomial operator/=( const double );
93 
94  // simple math tools
95 
96 // double simpleEval( Vector P);
97  double shiftedEval( Vector Point, double minusVal);
98  double operator()( Vector );
99  Polynomial derivate(int i);
100  void gradient(Vector P, Vector G);
101  void gradientHessian(Vector P, Vector G, Matrix H);
102  void translate(Vector translation);
103 
104  // Comparison
105 
106  inline int operator==( const Polynomial q) { return d==q.d; };
107  int equals( Polynomial q );
108 
109  // Output
110 
111  void print();
112  void save(char *name);
113 
114  //ostream& PrintToStream( ostream& ) const;
115 
116  //behaviour
117  static const unsigned int NicePrint;
118  static const unsigned int Warning;
119  static const unsigned int Normalized; // Use normalized monomials
120 
121  static unsigned int flags;
122  void setFlag( unsigned int val ) { flags |= val; }
123  void unsetFlag( unsigned int val ) { flags &= ~val; }
124  unsigned queryFlag( unsigned int val ) { return flags & val; }
125 
127 };
128 
129 unsigned long choose( unsigned n, unsigned k );
130 
131 // operator * defined on double:
132 inline Polynomial operator*( const double& dou, Polynomial& p )
133 {
134  // we can use operator * defined on Polynomial because of commutativity
135  return p * dou;
136 }
137 
138 #endif /* _MPI_POLY_H_ */
static const unsigned int Warning
Definition: Poly.h:118
unsigned sz()
Definition: Poly.h:64
unsigned long choose(unsigned n, unsigned k)
Definition: tools.cpp:38
int equals(Polynomial q)
Definition: Poly.cpp:305
void translate(Vector translation)
Definition: Poly.cpp:563
void print()
Definition: Poly.cpp:320
Polynomial operator-=(Polynomial)
Definition: Poly.cpp:252
Definition: Vector.h:37
unsigned dim()
Definition: Poly.h:62
static unsigned int flags
Definition: Poly.h:121
int operator==(const Polynomial q)
Definition: Poly.h:106
static const unsigned int Normalized
Definition: Poly.h:119
Polynomial & operator=(const Polynomial &A)
Definition: Poly.cpp:98
Polynomial operator/(const double)
Definition: Poly.cpp:154
unsigned deg()
Definition: Poly.h:63
Definition: point.h:32
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
Polynomial operator*=(const double)
Definition: Poly.cpp:280
static const unsigned int NicePrint
Definition: Poly.h:117
Polynomial operator*(const double)
Definition: Poly.cpp:143
void setFlag(unsigned int val)
Definition: Poly.h:122
void gradientHessian(Vector P, Vector G, Matrix H)
Definition: Poly.cpp:515
double operator()(Vector)
Definition: Poly.cpp:393
void init(int _dim, int _deg, double *data=NULL)
Definition: Poly.cpp:43
void unsetFlag(unsigned int val)
Definition: Poly.h:123
Definition: Matrix.h:38
Polynomial clone()
Definition: Poly.cpp:117
Polynomial derivate(int i)
Definition: Poly.cpp:469
Polynomial operator+(void)
Definition: Poly.h:84
~Polynomial()
Definition: Poly.cpp:82
PolynomialData * d
Definition: Poly.h:49
struct Polynomial::PolynomialDataTag PolynomialData
void save(char *name)
Definition: Poly.cpp:579
double shiftedEval(Vector Point, double minusVal)
Definition: Poly.cpp:380
void gradient(Vector P, Vector G)
Definition: Poly.cpp:502
Polynomial operator-(void)
Definition: Poly.cpp:209
Polynomial operator+=(Polynomial)
Definition: Poly.cpp:223
unsigned queryFlag(unsigned int val)
Definition: Poly.h:124
void copyFrom(Polynomial a)
Definition: Poly.cpp:125
static Polynomial emptyPolynomial
Definition: Poly.h:126
Polynomial()
Definition: Poly.h:54
doublereal * a
void destroyCurrentBuffer()
Definition: Poly.cpp:87
Polynomial operator/=(const double)
Definition: Poly.cpp:290