Univariate.h
1//-*-C++-*-
2/***************************************************************************
3 *
4 * Copyright (C) 2004 by Willem van Straten
5 * Licensed under the Academic Free License version 2.1
6 *
7 ***************************************************************************/
8
9// psrchive/More/MEAL/MEAL/Univariate.h
10
11#ifndef __MEAL_Univariate_H
12#define __MEAL_Univariate_H
13
14#include "MEAL/UnivariatePolicy.h"
15#include "MEAL/Nvariate.h"
16#include "Reference.h"
17
18namespace MEAL {
19
21 template<class T>
22 class Univariate : public Nvariate<T>
23 {
24
25 public:
26
30
32 Univariate (const Univariate& copy) : T (copy) { }
33
36
39 { throw Error (InvalidState, "Univariate<T>::clone", "not implemented"); }
40
42 virtual void set_abscissa (double value)
43 { univariate_policy->set_abscissa(value); }
44
46 double get_abscissa () const
47 { return univariate_policy->get_abscissa (); }
48
50 typename T::Result compute (double x)
51 { set_abscissa (x); return this->evaluate (); }
52
55
57 unsigned get_ndim () const { return 1; }
58
60 void set_abscissa_value (unsigned idim, double value)
61 { set_abscissa (value); }
62
64 double get_abscissa_value (unsigned idim) const
65 { return get_abscissa (); }
66
68
69 protected:
70
71 template <class U>
73
75 { this->argument_policy = univariate_policy = policy; }
76
78 { return univariate_policy; }
79
83
84 private:
85
87 Reference::To<UnivariatePolicy> univariate_policy;
88
89 };
90
91 template<class T>
92 class FunctionPolicyTraits< Univariate<T> >
93 {
94 public:
95 static void composite_component (Univariate<T>* composite,
96 Univariate<T>* component)
97 {
98 component->copy_univariate_policy (composite);
99 }
100 };
101}
102
103template<class T>
105{
106 if (&copy == this)
107 return *this;
108
109 set_abscissa( copy.get_abscissa() );
110 T::operator=( copy );
111 return *this;
112}
113
114#endif
115
virtual void copy(const Function *model)
Does the work for operator =.
Definition Function.C:58
Pure virtual base class of functions that have one or more abscissa(e)
Definition Nvariate.h:19
A function of one scalar variable.
Definition UnivariatePolicy.h:19
Abstract template base class of univariate Function implementations.
Definition Univariate.h:23
virtual void set_abscissa(double value)
Set the abscissa value.
Definition Univariate.h:42
Univariate< T > * clone() const
Clone.
Definition Univariate.h:38
Univariate(const Univariate &copy)
Copy constructor.
Definition Univariate.h:32
friend class FunctionPolicyTraits
The univariate implementation.
Definition Univariate.h:72
void set_univariate_policy(UnivariatePolicy *policy)
The univariate implementation.
Definition Univariate.h:74
void copy_univariate_policy(const Univariate *other)
Copy the parameter policy of another instance.
Definition Univariate.h:81
unsigned get_ndim() const
Get the number of abscissa (dimension) of the function.
Definition Univariate.h:57
T::Result compute(double x)
Evaluate the function.
Definition Univariate.h:50
UnivariatePolicy * get_univariate_policy() const
The univariate implementation.
Definition Univariate.h:77
double get_abscissa() const
Get the abscissa value.
Definition Univariate.h:46
void set_abscissa_value(unsigned idim, double value)
Set the abscissa value for the specified dimension.
Definition Univariate.h:60
Univariate()
Default constructor.
Definition Univariate.h:28
double get_abscissa_value(unsigned idim) const
Get the abscissa value for the specified dimension.
Definition Univariate.h:64
Univariate & operator=(const Univariate &copy)
Assignment operator.
Definition Univariate.h:104
Namespace in which all modeling and calibration related code is declared.
Definition ExampleComplex2.h:16

Generated using doxygen 1.14.0