CFL
MultiFunction.hpp
Go to the documentation of this file.
1 //Copyright (c) Dmitry Kramkov, 2000-2006. All rights reserved.
2 
3 #ifndef __cflMultiFunction_hpp__
4 #define __cflMultiFunction_hpp__
5 
6 #include <cmath>
7 #include <vector>
8 #include "cfl/Function.hpp"
9 
19 namespace cfl
20 {
27 
29 
36  {
37  public:
41  virtual ~IMultiFunction(){};
42 
51  virtual double operator()(const std::valarray<double> & rX) const = 0;
52 
63  virtual bool belongs(const std::valarray<double> & rX) const = 0;
64 
70  virtual unsigned dim() const = 0;
71  };
72 
74 
79  class MultiFunction: public std::function<double(std::valarray<double>)>
80  {
81  public:
90  explicit MultiFunction(double dV=0, unsigned iDim=1);
91 
99  explicit MultiFunction(IMultiFunction * pNewF);
100 
109  MultiFunction & operator=(double dV);
110 
119  double operator()(const std::valarray<double> & rX) const;
120 
124  bool belongs(const std::valarray<double> & rX) const;
125 
129  unsigned dim() const;
130 
143  MultiFunction & operator+=(const MultiFunction & rF);
144 
157  MultiFunction & operator*=(const MultiFunction & rF);
158 
171  MultiFunction & operator-=(const MultiFunction & rF);
172 
185  MultiFunction & operator/=(const MultiFunction & rF);
186 
194  MultiFunction & operator+=(double dV);
195 
204  MultiFunction & operator-=(double dV);
205 
213  MultiFunction & operator*=(double dV);
214 
222  MultiFunction & operator/=(double dV);
223 
224  private:
229  };
230 
240 
252  operator*(const MultiFunction & rF, const MultiFunction & rG);
253 
264  operator*(double dV, const MultiFunction & rF);
265 
277  operator*(const MultiFunction & rF, double dV);
278 
290  operator+(const MultiFunction & rF, const MultiFunction & rG);
291 
303  operator+(double dV, const MultiFunction & rF);
304 
316  operator+(const MultiFunction & rF,double dV);
317 
329  operator-(const MultiFunction & rF, const MultiFunction & rG);
330 
342  operator-(double dV, const MultiFunction & rF);
343 
355  operator-(const MultiFunction & rF, double dV);
356 
368  operator/(const MultiFunction & rF, const MultiFunction & rG);
369 
380  operator/(double dV, const MultiFunction & rF);
381 
393  operator/(const MultiFunction & rF, double dV);
394 
405  MultiFunction max(const MultiFunction & rF, const MultiFunction & rG);
406 
417  MultiFunction max(double dV, const MultiFunction & rF);
418 
419 
430  MultiFunction max(const MultiFunction & rF, double dV);
431 
442  MultiFunction min(const MultiFunction & rF, const MultiFunction & rG);
443 
454  MultiFunction min(double dV, const MultiFunction & rF);
455 
466  MultiFunction min(const MultiFunction & rF, double dV);
467 
478  MultiFunction pow(const MultiFunction & rF, double dV);
479 
489  MultiFunction abs(const MultiFunction & rF);
490 
500  MultiFunction exp(const MultiFunction & rF);
501 
511  MultiFunction log(const MultiFunction & rF);
512 
522  MultiFunction sqrt(const MultiFunction & rF);
523 
536  bool (*g)(const std::valarray<double> &), unsigned iDim);
537 
538  class Function;
539 
552  MultiFunction toMultiFunction(const Function & rF, unsigned iArg,
553  unsigned iDim);
554 
569  const std::vector<unsigned> & rArg,
570  const std::valarray<double> & rOtherArg);
571 
573 }
574 
575 #include "cfl/Inline/iMultiFunction.hpp"
576 #endif // of __cflMultiFunction_hpp__
577 
Function operator-(const Function &rF)
Function max(const Function &rF, const Function &rG)
Function pow(const Function &rF, double dV)
virtual bool belongs(const std::valarray< double > &rX) const =0
Concrete class for a one-dimensional function.
Definition: Function.hpp:78
complex< _Tp > & operator/=(const _Tp &)
complex< _Tp > & operator=(const _Tp &)
MultiFunction toMultiFunction(double(*f)(const std::valarray< double > &), bool(*g)(const std::valarray< double > &), unsigned iDim)
complex< _Tp > & operator-=(const complex< _Up > &)
virtual ~IMultiFunction()
Definition: MultiFunction.hpp:41
Function log(const Function &rF)
Function exp(const Function &rF)
Function abs(const Function &rF)
Function operator/(const Function &rF, const Function &rG)
Function operator*(const Function &rF, const Function &rG)
Function min(const Function &rF, const Function &rG)
complex< _Tp > & operator*=(const _Tp &)
Main namespace for cfl library.
Definition: Approx.hpp:22
Standard concrete class for multi-dimensional function object.
Definition: MultiFunction.hpp:79
Function sqrt(const Function &rF)
One-dimensional function object in cfl library.
virtual unsigned dim() const =0
virtual double operator()(const std::valarray< double > &rX) const =0
Interface for multi-dimensional function objects.
Definition: MultiFunction.hpp:35
Function operator+(const Function &rF, const Function &rG)
complex< _Tp > & operator+=(const complex< _Up > &)