Lattice Tester Guide  1.0-9
Software Package For Testing The Uniformity Of Integral Lattices In The Real Space
LatticeTester::NormaRogers< RedDbl > Class Template Reference

This class implements upper bounds on the lenght of the shortest nonzero vector in a lattice. More...

#include <latticetester/NormaRogers.h>

Inherits LatticeTester::Normalizer< RedDbl >.

Public Member Functions

 NormaRogers (RedDbl &logDensity, int t, double beta=1)
 Constructor for this class. More...
 
 ~NormaRogers ()
 Destructor. More...
 
double getGamma (int j) const
 Returns the value of the bound on the Hermite's constant \(\gamma_j\) in dimension \(j\). More...
 
- Public Member Functions inherited from LatticeTester::Normalizer< RedDbl >
 Normalizer (RedDbl &logDensity, int t, std::string Name, NormType norm=L2NORM, double beta=1)
 Complete constructor for a Normalizer. More...
 
 Normalizer (int t, std::string Name, NormType norm=L2NORM, double beta=1)
 Constructor that does not take the density as an argument. More...
 
virtual ~Normalizer ()
 Destructor. More...
 
virtual void init (RedDbl &logDensity, double beta)
 This is a method that will initialize the bounds this normalizer can return. More...
 
std::string ToString () const
 Returns a string that describes this object. More...
 
NormType getNorm () const
 Returns the norm associated with this object. More...
 
void setLogDensity (RedDbl logDensity)
 Sets the log-density associated with this object to logDensity. More...
 
RedDbl getLogDensity () const
 Returns the logDensity associated with this object. More...
 
void setNorm (NormType norm)
 Sets the norm associated with this object to norm. More...
 
int getDim () const
 Returns the maximal dimension for this object. More...
 
double getPreComputedBound (int j) const
 Returns the bound for dimension j as computed in Normalizer::init(). More...
 
virtual RedDbl getBound (int j) const
 Calculates and returns the bound on the length of the shortest nonzero vector in dimension j. More...
 

Additional Inherited Members

- Static Public Attributes inherited from LatticeTester::Normalizer< RedDbl >
static const int MAX_DIM = 48
 The maximum dimension of the lattices for which this class can give an upper bound. More...
 
- Protected Attributes inherited from LatticeTester::Normalizer< RedDbl >
std::string m_name
 Name of the normalizer. More...
 
NormType m_norm
 Norm associated with this object. More...
 
RedDbl m_logDensity
 log of the density, ie log of the number of points of the lattice per unit of volume. More...
 
int m_maxDim
 Only elements 1 to m_maxDim (inclusive) of m_bounds bellow will be pre-computed. More...
 
double m_beta
 Beta factor used to give more or less importance to some of the dimensions. More...
 
double * m_bounds
 Contains the bounds on the length of the shortest nonzero vector in the lattice in each dimension. More...
 

Detailed Description

template<typename RedDbl>
class LatticeTester::NormaRogers< RedDbl >

This class implements upper bounds on the lenght of the shortest nonzero vector in a lattice.

To obtain these bounds, this class contains hard-coded values of an approximation of the Hermite's constants \(\gamma_s\) calculated with Rogers's bound. These Hermite's constants are stored in a table accessible via the getGamma(int) const method.

Rogers bound has been introduced by Rogers in The Packing of Equal Spheres in 1958 (citation to add in bibliography). This is a classical bound that is implemented mainly for historical reasons. For thighter bounds, please use NormaBestBound. Note that, since the value of \(\gamma_n\) is known exactly for \(n \leq 8\), the Hermite's constant for these \(n\) are not upper bounds.

From there, we get

\[ \gamma_s = 4 \delta_s^{2/s}. \]

The number \(\gamma_n\) is the number returned by calling getGamma(n). The init() method of this class inherited from Normalizer computes the upper bound on the shortest non-zero vector of the lattice as

\[ \gamma_s^{1/2} n^{-1/s}. \]

Here \(n = \exp(\text{logDensity})\) is the density of the lattice to be analyzed passed as an argument to the constructor of this object.

This class is to be used with the L2NORM (the Euclidian norm) exclusively. Note this class stores the log value of the density to handle larger values.

Constructor & Destructor Documentation

◆ NormaRogers()

template<typename RedDbl >
LatticeTester::NormaRogers< RedDbl >::NormaRogers ( RedDbl &  logDensity,
int  t,
double  beta = 1 
)

Constructor for this class.

Suppose we want to use this normalizer on a lattice with it's basis in the lines of \(V\) of dimension \(t\). We can call this constructor as NormaRogers(abs(det(V)), t). getPreComputedBound(t) will then return an upper bound on the lenght of the shortest non-zero vector in dimension t. In the case where the lattice also has the same density in lower dimensions than t, pre-computed bounds will also be available.

The bias factor beta gives more or less weight to some of the dimensions (see Normalizer for details). It is recommended to keep it at its default value because its usage is deprecated.

There is a restriction for t to be \(\le48\).

◆ ~NormaRogers()

template<typename RedDbl >
LatticeTester::NormaRogers< RedDbl >::~NormaRogers ( )

Destructor.

Member Function Documentation

◆ getGamma()

template<typename RedDbl >
double LatticeTester::NormaRogers< RedDbl >::getGamma ( int  j) const
inlinevirtual

Returns the value of the bound on the Hermite's constant \(\gamma_j\) in dimension \(j\).

Reimplemented from LatticeTester::Normalizer< RedDbl >.


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