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.

## 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
 LAT Type of lattice.

## Constructor & Destructor Documentation

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

Constructor.

Parameters
 alpha Value 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
 x Point at which the function must be evaluated. n Number 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:
• latbuilder/include/latbuilder/Kernel/RAlpha.h