Lattice Builder Manual
Software Package for Constructing Rank-1 Lattices
LatBuilder::Kernel::RAlpha Class Reference

One-dimensional merit function for the \(\mathcal R_\alpha\) figure of merit for any \(\alpha \geq 0\). More...

#include <RAlpha.h>

Inherits LatBuilder::Kernel::Base< RAlpha >.

Public Member Functions

 RAlpha (Real alpha)
 Constructor. More...
 
Real pointValue (const Real &x, Modulus n) const
 Returns the one-dimensional function evaluated at x. More...
 
template<LatType L, Compress C>
RealVector valuesVector (const Storage< L, C > &storage) const
 Creates a new vector of kernel values. More...
 
Real alpha () const
 Returns the value of \(\alpha\).
 
bool symmetric () const
 
std::string name () const
 
- Public Member Functions inherited from LatBuilder::Kernel::Base< RAlpha >
RealVector valuesVector (const Storage< L, C > &storage) const
 Creates a new vector of kernel values. More...
 
bool symmetric () const
 Returns true if the kernel takes the same value at points \(x\) and \(1 - x\) for \(x \in [0,1)\).
 
std::string name () const
 Returns the name of the kernel.
 
RAlphaderived ()
 
const RAlphaderived () const
 

Static Public Member Functions

static constexpr Compress suggestedCompression ()
 

Detailed Description

One-dimensional merit function for the \(\mathcal R_\alpha\) figure of merit for any \(\alpha \geq 0\).

This merit function is defined as

\[ \omega(x) = r_{\alpha,n}(x) = \sum_{h = -\lfloor (n-1)/2 \rfloor}^{\lfloor n/2 \rfloor} |\max(1, h)|^{-\alpha} e^{2 \pi i h x} - 1 \]

For even \(n\), the sum is over \(h=-n/2+1,\dots,n/2\); for odd \(n\), the sum is over \(h=-(n-1)/2,\dots,(n-1)/2\). By replacing \(h\) with \(-h\) in the part of the sum that is over the negative values of \(h\), we obtain:

\[ r_{\alpha,n}(x) = 2 \sum_{h=1}^{\lfloor (n-1)/2 \rfloor} h^{-\alpha} \cos(2\pi h x) + \mathbb 1[\text{$n$ is even}] \, (n/2)^{-\alpha} e^{i\pi n x} \]

This is the expression implemented by pointValue(). Note that the last term is nonzero only if \(n\) is even and, for \(x=j/n\), is equal to \((-1)^j\) for any integer \(j\).

Remarks
This functor only returns the real part of the last term.

Alternatively, by replacing \(h\) with \(h-n\) in the part of the sum that is over the negative values of \(h\), we obtain:

\[ r_{\alpha,n}(x) = \sum_{h=0}^{n-1} \hat r_{\alpha,n}(h) e^{2 \pi i h x}, \]

where

\[ \hat r_{\alpha,n}(h) = \begin{cases} 0 & \text{if $h=0$} \\ h^{-\alpha} & \text{if $0 < h \leq n/2$} \\ (n-h)^{-\alpha} & \text{if $n/2 < h < n $} \\ \end{cases} \]

The values of \(r_{\alpha,n}(j/n)\) for \(j=0,\dots,n-1\) are the \(n\)-point inverse discrete Fourier transform of \(\hat r_{\alpha,n}(h)\) at \(h=0,\dots,n-1\). This is how valuesVector() computes these values.

Template Parameters
LATType of lattice.

Constructor & Destructor Documentation

LatBuilder::Kernel::RAlpha::RAlpha ( Real  alpha)
inline

Constructor.

Parameters
alphaValue of \(\alpha\).

Member Function Documentation

Real LatBuilder::Kernel::RAlpha::pointValue ( const Real x,
Modulus  n 
) const
inline

Returns the one-dimensional function evaluated at x.

Parameters
xPoint at which the function must be evaluated.
nNumber of terms in the sum (see class documentation).
Remarks
Returns only the real part of the kernel value.

References alpha().

template<LatType L, Compress C>
RealVector LatBuilder::Kernel::RAlpha::valuesVector ( const Storage< L, C > &  storage) const
inline

Creates a new vector of kernel values.

The values of the kernel evaluated at sizeParam.numPoints() regular intervals in \([0,1)\) are stored in a linear vector. The intervals are of size 1/sizeParam.numPoints() and the first point is at 0.

Returns
The newly created vector.

Creates a new vector of kernel values using fast Fourier transforms.

References alpha(), and fftw< T >::ifft().


The documentation for this class was generated from the following file: