cisst-saw
Loading...
Searching...
No Matches
nmrBernsteinPolynomialLineIntegral.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3
4/*
5
6 Author(s): Ofri Sadowsky
7 Created on: 2003-05-06
8
9 (C) Copyright 2003-2007 Johns Hopkins University (JHU), All Rights
10 Reserved.
11
12--- begin cisst license - do not edit ---
13
14This software is provided "as is" under an open source license, with
15no warranty. The complete license can be found in license.txt and
16http://www.cisst.org/cisst/license.txt.
17
18--- end cisst license ---
19*/
20
21
22#ifndef _nmrBernsteinPolynomialLineIntegral_h
23#define _nmrBernsteinPolynomialLineIntegral_h
24
27
29
37#define CACHE_POWER_BASIS 1
38
39
44#define USE_INTEGRAND_TABLEAU 1
45
128class CISST_EXPORT nmrBernsteinPolynomialLineIntegral
129{
130public:
131 // The value evaluated by the integral
132 typedef nmrPolynomialBase::ValueType ValueType;
133
134 // The type of value of a variable of the integrand function.
135 typedef nmrPolynomialBase::VariableType VariableType;
136
137 typedef nmrPolynomialBase::VariableIndexType VariableIndexType;
138
139 // The type of a coefficient in the integrand function
140 typedef nmrPolynomialBase::CoefficientType CoefficientType;
141
142 typedef nmrPolynomialBase::PowerType PowerType;
143
144 typedef nmrBernsteinPolynomial IntegrandType;
145
147
148
149 // See the usage of roundoff tolerance to reduce the number of iterations.
150 static const double DefaultRoundoffTolerance;
151
152 // Profiling information that's accumulated during the integration.
153 // Counts the invocations of different operations.
154 // \note deprecated
155 struct ProfilingInfo {
156 unsigned long IntegrandTermCounter;
157 unsigned long EvaluatePowerProductCounter;
158 unsigned long TimeOfSingleTermIntegration;
159
160 ProfilingInfo()
161 : IntegrandTermCounter(0)
162 , EvaluatePowerProductCounter(0)
163 , TimeOfSingleTermIntegration(0)
164 {}
165 };
166
167 // Initialize the integrator for a specific polynomial.
168 nmrBernsteinPolynomialLineIntegral(const IntegrandType & integrand)
169 : Integrand(integrand)
170#if CACHE_POWER_BASIS
171 , PowersAtP0(Integrand.GetNumVariables(), Integrand.GetMaxDegree())
172 , PowersAtP1(Integrand.GetNumVariables(), Integrand.GetMaxDegree())
173#endif // CACHE_POWER_BASIS
174 {
175#if USE_INTEGRAND_TABLEAU
176 InitializePolynomialIntegrationTableau(Integrand, IntegrationTableau);
177#endif
178 }
179
185 {
186 InitializePolynomialIntegrationTableau(Integrand, IntegrationTableau);
187 }
188
210 const VariableType p0[], const VariableType p1[],
211 const VariableType gradientNorm,
212 const double roundoffTolerance = DefaultRoundoffTolerance,
213 CoefficientType const * coefficients = NULL)
214#if !CACHE_POWER_BASIS
215 const
216#endif
217 ;
218
219 const IntegrandType & GetIntegrand() const
220 {
221 return Integrand;
222 }
223
224protected:
225 // The integrand polynomial
226 const IntegrandType & Integrand;
227
228#if CACHE_POWER_BASIS
229 // Auxiliary objects to compute and contain the power basis of the variables
232#endif // CACHE_POWER_BASIS
233
234 typedef std::vector<PowerType> PowerIndexType;
241 typedef std::vector<TermSummationElement> SingleTermIntegrationTableau;
242
243 typedef std::vector<SingleTermIntegrationTableau> PolynomialIntegrationTableau;
244
246
247
265 static ValueType IntegrateSingleTerm(
266 const CoefficientType termCoefficient,
267 const CoefficientType gradientNorm,
268 const nmrPolynomialTermPowerIndex & termIndex,
269 const nmrMultiVariablePowerBasis & powersAtP0,
270 const nmrMultiVariablePowerBasis & powersAtP1,
271 const double roundoffTolerance = DefaultRoundoffTolerance);
272
273
274
275 typedef std::vector<VariableIndexType> IndexContainerForZeroVariables;
276
298 static ValueType IntegrateSingleTerm(
299 const CoefficientType termCoefficient,
300 const CoefficientType gradientNorm,
301 const PowerType termDegree,
302 const SingleTermIntegrationTableau & termIntegrationTableau,
303 const nmrMultiVariablePowerBasis & powersAtP0,
304 const nmrMultiVariablePowerBasis & powersAtP1,
305 const IndexContainerForZeroVariables & zerosOfP0,
306 const IndexContainerForZeroVariables & zerosOfP1);
307
308 static void InitializePolynomialIntegrationTableau(
309 const IntegrandType & integrand,
311
312 static void InitializeSingleTermIntegrationTableau(
313 const nmrPolynomialTermPowerIndex & termIndex,
314 SingleTermIntegrationTableau & termTableau );
315
316};
317
318#endif
Definition nmrMultiVariablePowerBasis.h:143
Definition nmrMultiVariablePowerBasis.h:38
nmrPolynomialTermPowerIndex::PowerType PowerType
Definition nmrPolynomialBase.h:58
double VariableType
Definition nmrPolynomialBase.h:55
double ValueType
Definition nmrPolynomialBase.h:54
double CoefficientType
Definition nmrPolynomialBase.h:56
nmrPolynomialTermPowerIndex::VariableIndexType VariableIndexType
Definition nmrPolynomialBase.h:57
Represents the power index of a single term in a multi-variable polynomial.
Definition nmrPolynomialTermPowerIndex.h:90
unsigned long MultinomialCoefficientType
Definition nmrPolynomialTermPowerIndex.h:101
#define CISST_EXPORT
Definition cmnExportMacros.h:50
nmrBernsteinPolynomial(VariableIndexType numVariables, PowerType degree)
Definition nmrBernsteinPolynomial.h:89
nmrMultiVariablePowerBasis::StandardPowerBasis PowersAtP1
Definition nmrBernsteinPolynomialLineIntegral.h:231
std::vector< VariableIndexType > IndexContainerForZeroVariables
Definition nmrBernsteinPolynomialLineIntegral.h:275
void UpdateIntegrationTableau()
Definition nmrBernsteinPolynomialLineIntegral.h:184
PolynomialIntegrationTableau IntegrationTableau
Definition nmrBernsteinPolynomialLineIntegral.h:245
const IntegrandType & Integrand
Definition nmrBernsteinPolynomialLineIntegral.h:226
std::vector< PowerType > PowerIndexType
Definition nmrBernsteinPolynomialLineIntegral.h:234
std::vector< TermSummationElement > SingleTermIntegrationTableau
Definition nmrBernsteinPolynomialLineIntegral.h:241
nmrMultiVariablePowerBasis::StandardPowerBasis PowersAtP0
Definition nmrBernsteinPolynomialLineIntegral.h:230
std::vector< SingleTermIntegrationTableau > PolynomialIntegrationTableau
Definition nmrBernsteinPolynomialLineIntegral.h:243
ValueType EvaluateForSegment(const VariableType p0[], const VariableType p1[], const VariableType gradientNorm, const double roundoffTolerance=DefaultRoundoffTolerance, CoefficientType const *coefficients=NULL)
const IntegrandType & GetIntegrand() const
Definition nmrBernsteinPolynomialLineIntegral.h:219
Rules of exporting.
Definition nmrBernsteinPolynomialLineIntegral.h:235
MultinomialType P0MultinomialFactor
Definition nmrBernsteinPolynomialLineIntegral.h:237
PowerIndexType P0PowerIndex
Definition nmrBernsteinPolynomialLineIntegral.h:236
PowerIndexType P1PowerIndex
Definition nmrBernsteinPolynomialLineIntegral.h:238
MultinomialType P1MultinomialFactor
Definition nmrBernsteinPolynomialLineIntegral.h:239