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> class PolynomialParam: public Function1D<T> {
97public:
98 //# Constructors
99 // Constructs a zero'th order polynomial, with a coeficcient of 0.0.
101
102 // Makes a polynomial of the given order, with all coeficcients set to
103 // zero.
105
106 // Make this a copy of other (deep copy).
107 // <group>
109 template <class W>
111 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 {
123 return (param_p == other.param_p); }
124 Bool operator!=(const PolynomialParam<T> &other) const {
125 return (param_p != other.param_p); }
126 // </group>
127
128 //# Member functions
129 // Give name of function
130 virtual const String &name() const { static String x("polynomial");
131 return x; }
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); return param_p[which]; }
140
141 // Return all the coefficients as a vector.
142 const Vector<T> &coefficients() const;
143
144 // Set the <em>which</em>'th coefficient to <em>value</em>.
145 void setCoefficient(uInt which, const T value) {
146 DebugAssert(which<=order(), AipsError); param_p[which] = value; }
147
148 // Set all the coefficients at once, throw away all existing coefficients.
150
151 //# Make members of parent classes known.
152protected:
153 using Function1D<T>::param_p;
154public:
155 using Function1D<T>::nparameters;
156};
157
158
159} //# NAMESPACE CASACORE - END
160
161#ifndef CASACORE_NO_AUTO_TEMPLATES
162#include <casacore/scimath/Functionals/PolynomialParam.tcc>
163#endif //# CASACORE_NO_AUTO_TEMPLATES
164#endif
#define DebugAssert(expr, exception)
Definition Assert.h:183
PolynomialParam()
this file contains all the compiler specific defines
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.
bool operator==(const casacore_allocator< T, ALIGNMENT > &, const casacore_allocator< T, ALIGNMENT > &)
Definition Allocator.h:122
bool operator!=(const casacore_allocator< T, ALIGNMENT > &, const casacore_allocator< T, ALIGNMENT > &)
Definition Allocator.h:128
~PolynomialParam()
Destructor.
String name() const
Return the name of the field.
Record & operator=(const Record &other)
Copy the data in the other record to this record.
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
NewDelAllocator< T > NewDelAllocator< T >::value
Definition Allocator.h:368