MPQC  2.3.1
function.h
1 //
2 // function.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifdef __GNUC__
29 #pragma interface
30 #endif
31 
32 #ifndef _math_optimize_function_h
33 #define _math_optimize_function_h
34 
35 #include <math.h>
36 #include <float.h>
37 
38 #include <util/state/state.h>
39 #include <math/optimize/transform.h>
40 #include <math/scmat/matrix.h>
41 #include <math/scmat/result.h>
42 
43 namespace sc {
44 
48 class Function: virtual public SavableState, public Compute {
49  protected:
51 
57 
62  virtual void set_value(double);
63  virtual void set_gradient(RefSCVector&);
64  virtual void set_hessian(RefSymmSCMatrix&);
66 
69  virtual void set_matrixkit(const Ref<SCMatrixKit>&);
70  virtual void set_dimension(const RefSCDimension&);
71 
76  virtual void set_actual_value_accuracy(double);
77  virtual void set_actual_gradient_accuracy(double);
78  virtual void set_actual_hessian_accuracy(double);
80 
83 
87  public:
88  Function();
89  Function(StateIn&);
90  Function(const Function&);
91 
108  Function(const Ref<KeyVal>&, double funcacc = DBL_EPSILON,
109  double gradacc = DBL_EPSILON, double hessacc = DBL_EPSILON);
110  virtual ~Function();
111 
112  Function & operator=(const Function&);
113 
116  Ref<SCMatrixKit> matrixkit() const;
118  RefSCDimension dimension() const;
119 
120  virtual void save_data_state(StateOut&);
121 
123  virtual double value();
125  int value_needed() const;
129  int do_value(int);
130  AccResultdouble& value_result() { return value_; }
131 
133  virtual void set_desired_value_accuracy(double);
135  virtual double actual_value_accuracy() const;
137  virtual double desired_value_accuracy() const;
138 
143  virtual RefSCVector gradient();
144  int gradient_needed() const;
145  int do_gradient(int);
146  virtual void set_desired_gradient_accuracy(double);
147  virtual double actual_gradient_accuracy() const;
148  virtual double desired_gradient_accuracy() const;
149  AccResultRefSCVector& gradient_result() { return gradient_; }
151 
156  virtual RefSymmSCMatrix hessian();
157  int hessian_needed() const;
158  int do_hessian(int);
159  virtual void set_desired_hessian_accuracy(double);
160  virtual double actual_hessian_accuracy() const;
161  virtual double desired_hessian_accuracy() const;
162  AccResultRefSymmSCMatrix& hessian_result() { return hessian_; }
164 
165  // hessian by gradients at finite displacements
166  // virtual RefSCMatrix fd1_hessian();
167 
169  virtual void guess_hessian(RefSymmSCMatrix&);
170  virtual RefSymmSCMatrix inverse_hessian(RefSymmSCMatrix&);
171 
174  virtual int value_implemented() const;
175  virtual int gradient_implemented() const;
176  virtual int hessian_implemented() const;
177 
179  virtual void set_x(const RefSCVector&);
180  RefSCVector get_x() const { return x_.copy(); }
181  const RefSCVector& get_x_no_copy() const { return x_; }
182 
189  virtual Ref<NonlinearTransform> change_coordinates();
190 
192  virtual void print(std::ostream& = ExEnv::out0()) const;
193 };
194 
195 }
196 
197 #endif
198 
199 // Local Variables:
200 // mode: c++
201 // c-file-style: "CLJ"
202 // End:

Generated at Thu Jan 9 2014 17:14:22 for MPQC 2.3.1 using the documentation package Doxygen 1.8.3.1.