casacore
Loading...
Searching...
No Matches
PolynomialParam.h
Go to the documentation of this file.
1// # PolynomialParam.h: Parameter handling for one-dimensional polynomials
2// # Copyright (C) 2001,2002,2005
3// # Associated Universities, Inc. Washington DC, USA.
4// #
5// # This library is free software; you can redistribute it and/or modify it
6// # under the terms of the GNU Library General Public License as published by
7// # the Free Software Foundation; either version 2 of the License, or (at your
8// # option) any later version.
9// #
10// # This library is distributed in the hope that it will be useful, but WITHOUT
11// # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12// # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13// # License for more details.
14// #
15// # You should have received a copy of the GNU Library General Public License
16// # along with this library; if not, write to the Free Software Foundation,
17// # Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18// #
19// # Correspondence concerning AIPS++ should be addressed as follows:
20// # Internet email: casa-feedback@nrao.edu.
21// # Postal address: AIPS++ Project Office
22// # National Radio Astronomy Observatory
23// # 520 Edgemont Road
24// # Charlottesville, VA 22903-2475 USA
25
26#ifndef SCIMATH_POLYNOMIALPARAM_H
27#define SCIMATH_POLYNOMIALPARAM_H
28
29// # Includes
30#include <casacore/casa/aips.h>
31#include <casacore/casa/Arrays/ArrayFwd.h>
32#include <casacore/casa/BasicSL/String.h>
33#include <casacore/casa/Utilities/Assert.h>
34#include <casacore/scimath/Functionals/Function1D.h>
35
36namespace casacore { // # NAMESPACE CASACORE - BEGIN
37
38// <summary> Parameter handling for one-dimensional polynomials
39// </summary>
40
41// <reviewed reviewer="tcornwel" date="1996/02/22" tests="tPolynomial"
42// demos="">
43// </reviewed>
44
45// <prerequisite>
46// <li> <linkto class="FunctionParam">FunctionParam</linkto> class
47// <li> <linkto class=Function1D>Function1D</linkto>
48// </prerequisite>
49
50// <etymology>
51// A 1-dimensional Polynomial's parameters.
52// </etymology>
53//
54// <synopsis>
55// A <src>Polynomial</src> is described by a set of coefficients;
56// its fundamental operation is evaluating itself at some "x".
57// The number of coefficients is the order of the polynomial plus one.
58//
59// Since the <src>Polynomial</src> is a <src>Function</src>, the derivatives
60// can be obtained as well.
61//
62// The parameter interface (see
63// <linkto class="FunctionParam">FunctionParam</linkto> class),
64// is used to provide an interface to the
65// <linkto module="Fitting">Fitting</linkto> classes.
66//
67// This class is in general used implicitly by the <src>Polynomial</src>
68// class only.
69// </synopsis>
70//
71// <example>
72// <srcblock>
73// Polynomial<Float> pf(3); // Third order polynomial - coeffs 0 by default
74// pf.setCoefficient(1, 1.0);
75// pf[2] = 2.0;
76// pf.setCoefficient(3, 3.0); // 3x^3 + 2x^2 + x
77// pf(2); // == 34
78// </srcblock>
79// </example>
80
81// <templating arg=T>
82// <li> T should have standard numerical operators. Current
83// implementation only tested for real types (and their AutoDiffs).
84// </templating>
85
86// <thrown>
87// <li> Assertion in debug mode if attempt is made to address incorrect
88// coefficients
89// </thrown>
90
91// <todo asof="1995/08/25">
92// <li> Global functions to make various ``special'' polynomials of various
93// orders will be useful eventually.
94// </todo>
95
96template <class T>
97class PolynomialParam : public Function1D<T> {
98 public:
99 // # Constructors
100 // Constructs a zero'th order polynomial, with a coeficcient of 0.0.
102
103 // Makes a polynomial of the given order, with all coeficcients set to
104 // zero.
106
107 // Make this a copy of other (deep copy).
108 // <group>
110 template <class W>
111 PolynomialParam(const PolynomialParam<W> &other) : Function1D<T>(other) {}
113 // </group>
114
115 // Destructor
117
118 // # Operators
119 // Comparisons.
120 // Polynomials are equal if they are the same order
121 // <group>
122 Bool operator==(const PolynomialParam<T> &other) const { return (param_p == other.param_p); }
123 Bool operator!=(const PolynomialParam<T> &other) const { return (param_p != other.param_p); }
124 // </group>
125
126 // # Member functions
127 // Give name of function
128 virtual const String &name() const {
129 static String x("polynomial");
130 return x;
131 }
132
133 // What is the order of the polynomial, i.e. maximum exponent of "x".
134 uInt order() const { return param_p.nelements() - 1; }
135
136 // What is the <em>which</em>'th coefficient of the polynomial. For an nth
137 // degree polynomial, <em>which</em> varies between zero and n.
138 T coefficient(uInt which) const {
139 DebugAssert(which <= order(), AipsError);
140 return param_p[which];
141 }
142
143 // Return all the coefficients as a vector.
144 const Vector<T> &coefficients() const;
145
146 // Set the <em>which</em>'th coefficient to <em>value</em>.
147 void setCoefficient(uInt which, const T value) {
148 DebugAssert(which <= order(), AipsError);
149 param_p[which] = value;
150 }
151
152 // Set all the coefficients at once, throw away all existing coefficients.
154
155 // # Make members of parent classes known.
156 protected:
157 using Function1D<T>::param_p;
158
159 public:
160 using Function1D<T>::nparameters;
161};
162
163} // namespace casacore
164
165#ifndef CASACORE_NO_AUTO_TEMPLATES
166#include <casacore/scimath/Functionals/PolynomialParam.tcc>
167#endif // # CASACORE_NO_AUTO_TEMPLATES
168#endif
#define DebugAssert(expr, exception)
Definition Assert.h:161
bool operator==(const String &x, const String &y)
Global comparison operators.
Definition String.h:849
PolynomialParam()
For temporary backward namespace compatibility, use casa as alias for casacore.
Definition mainpage.dox:28
const Vector< T > & coefficients() const
Return all the coefficients as a vector.
void setCoefficient(uInt which, const T value)
Set the which'th coefficient to value.
T coefficient(uInt which) const
What is the which'th coefficient of the polynomial.
unsigned int uInt
Definition aipstype.h:49
void setCoefficients(const Vector< T > &coefficients)
Set all the coefficients at once, throw away all existing coefficients.
~PolynomialParam()
Destructor.
String name() const
Return the name of the field.
uInt order() const
What is the order of the polynomial, i.e.
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
bool operator!=(const String &x, const String &y)
Definition String.h:850
NewDelAllocator< T > NewDelAllocator< T >::value
Definition Allocator.h:360
Block< T > & operator=(const T &val)
Set all values in the block to "val".
Definition Block.h:536