Multivariate.h
1//-*-C++-*-
2/***************************************************************************
3 *
4 * Copyright (C) 2022 by Willem van Straten
5 * Licensed under the Academic Free License version 2.1
6 *
7 ***************************************************************************/
8
9// psrchive/More/MEAL/MEAL/Multivariate.h
10
11#ifndef __MEAL_Multivariate_H
12#define __MEAL_Multivariate_H
13
14#include "MEAL/MultivariatePolicy.h"
15#include "MEAL/Nvariate.h"
16#include "Reference.h"
17
18namespace MEAL {
19
21
22 template<class T>
23 class Multivariate : public Nvariate<T>
24 {
25 unsigned ndim;
26
27 public:
28
30 Multivariate (unsigned _ndim)
31 { ndim = _ndim;
32 set_multivariate_policy ( new MultivariatePolicy (ndim, this) ); }
33
35 Multivariate (const Multivariate& copy) : T (copy) { ndim = copy.ndim; }
36
39
42 { throw Error (InvalidState, "Multivariate<T>::clone", "not implemented"); }
43
46
48 unsigned get_ndim () const { return ndim; }
49
51 void set_abscissa_value (unsigned idim, double value)
52 { multivariate_policy->set_abscissa (idim, value); }
53
55 double get_abscissa_value (unsigned idim) const
56 { return multivariate_policy->get_abscissa (idim); }
57
59
60 protected:
61
62 template <class U>
64
66 { this->argument_policy = multivariate_policy = policy; }
67
69 { return multivariate_policy; }
70
74
75 private:
76
78 Reference::To<MultivariatePolicy> multivariate_policy;
79
80 };
81
82 template<class T>
83 class FunctionPolicyTraits< Multivariate<T> >
84 {
85 public:
86 static void composite_component (Multivariate<T>* composite,
87 Multivariate<T>* component)
88 {
89 component->copy_multivariate_policy (composite);
90 }
91 };
92}
93
94template<class T>
96{
97 if (&copy == this)
98 return *this;
99
100 for (unsigned idim=0; idim < ndim; idim++)
101 set_abscissa_value( idim, copy.get_abscissa_value(idim) );
102
103 T::operator=( copy );
104
105 return *this;
106}
107
108#endif
109
virtual void copy(const Function *model)
Does the work for operator =.
Definition Function.C:58
A function of one or more scalar variables.
Definition MultivariatePolicy.h:20
Abstract template base class of multivariate Function implementations.
Definition Multivariate.h:24
Multivariate(const Multivariate &copy)
Copy constructor.
Definition Multivariate.h:35
double get_abscissa_value(unsigned idim) const
Get the abscissa value for the specified dimension.
Definition Multivariate.h:55
void copy_multivariate_policy(const Multivariate *other)
Copy the parameter policy of another instance.
Definition Multivariate.h:72
friend class FunctionPolicyTraits
The multivariate implementation.
Definition Multivariate.h:63
MultivariatePolicy * get_multivariate_policy() const
The multivariate implementation.
Definition Multivariate.h:68
unsigned get_ndim() const
Get the number of abscissa (dimension) of the function.
Definition Multivariate.h:48
Multivariate & operator=(const Multivariate &copy)
Assignment operator.
Definition Multivariate.h:95
void set_multivariate_policy(MultivariatePolicy *policy)
The multivariate implementation.
Definition Multivariate.h:65
Multivariate< T > * clone() const
Clone.
Definition Multivariate.h:41
Multivariate(unsigned _ndim)
Construct with number of dimensions (independent abscissae)
Definition Multivariate.h:30
void set_abscissa_value(unsigned idim, double value)
Set the abscissa value for the specified dimension.
Definition Multivariate.h:51
Pure virtual base class of functions that have one or more abscissa(e)
Definition Nvariate.h:19
Namespace in which all modeling and calibration related code is declared.
Definition ExampleComplex2.h:16

Generated using doxygen 1.14.0