Lattice Builder Manual
Software Package for Constructing Rank-1 Lattices
|
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. | |
RAlpha & | derived () |
const RAlpha & | derived () const |
Static Public Member Functions | |
static constexpr Compress | suggestedCompression () |
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\).
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.
LAT | Type of lattice. |
|
inline |
Constructor.
alpha | Value of \(\alpha\). |
Returns the one-dimensional function evaluated at x
.
x | Point at which the function must be evaluated. |
n | Number of terms in the sum (see class documentation). |
References alpha().
|
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.
Creates a new vector of kernel values using fast Fourier transforms.
References alpha(), and fftw< T >::ifft().