liblat 関数レファレンスページ

基礎的な関数

宣言 long numRows() const;
概略 格子基底行列の行数を返す関数
引数 なし
戻り値 格子基底行列の行数(つまり格子次元)
解説 格子基底行列の行数,つまり格子次元を返す関数です.

サンプル

numColsを参照のこと.




宣言 long numCols() const;
概略 格子基底行列の列数を返す関数
引数 なし
戻り値 格子基底行列の列数
解説 格子基底行列の列数を返す関数です.

サンプル

#include <iostream>
#include "lattice.h"

int main()
{
    // 3次正方行列を基底行列に持つ格子
    Lattice<int> lat(3, 3);

    std::cout << lat.numRows() << std::endl;
    std::cout << lat.numCols() << std::endl;

    return 0;
}



宣言 void setDims(const long n, const long m);
概略 格子基底行列のサイズを設定する
引数
n 格子基底行列の行数
m 格子基底行列の列数
戻り値 なし
解説 格子基底行列のサイズを設定する関数です. 具体的にはこの関数を使用することで\(\mathbb{R}^m\)上の\(n\)次元格子が用意されます. 但し,これを使用した場合基底行列は零行列として設定されるので,実際に使用する場合は別途値を指定する必要があります.

サンプル

なし




宣言 void setRandom(const long n, const long m, const T min, const T max);
概略 ランダムにsvp-challenge型の格子基底を設定する
引数
n 格子基底行列の行数
m 格子基底行列の列数
min 乱数の下限
max 乱数の上限
戻り値 なし
解説 格子基底行列をランダムに設定する関数です. 具体的にはこの関数を使用することで\(\mathbb{R}^m\)上の\(n\)次元格子が用意した上で,そこにランダムな基底を代入します. 但し,基底行列が非正則になることを避けるためにsvp-challenge型の基底行列に設定されます. ここでいうsvp-challenge型の基底とは \[ \begin{pmatrix} * & 0 & 0 & \cdots & 0\\ * & 1 & 0 & \cdots & 0\\ * & 0 & 1 & \cdots & 0\\ * & \vdots & \vdots & \ddots & \vdots\\ * & 0 & 0 & \cdots & 1 \end{pmatrix} \] という形の基底行列を指します.

サンプル

#include <iostream>
#include "lattice.h"

int main()
{
    // 3次正方行列を基底行列に持つ格子
    Lattice<int> lat(3, 3);

    // ランダムなSVP型格子に設定
    lat.setRandom(3, 3, 1000, 9999);

    // 基底行列の表示
    std::cout << lat << std::endl;

    return 0;
}



宣言 T volume(const bool compute_gso = true);
概略 格子の体積(行列式)を計算する
引数
compute_gso 体積を計算する前にGSO情報を更新するかどうか
戻り値 格子の体積
解説 格子の体積(つまり行列式)を計算する関数です.尚,格子\(L\)の体積とは格子基底\(\lbrace\boldsymbol{b}_1,\ldots,\boldsymbol{b}_n\rbrace\)のGSOベクトル\(\boldsymbol{b}_1^\star,\ldots,\boldsymbol{b}_n^\star\)に対して \[ \mathrm{vol}(L)=\prod_{i=1}^n \|\boldsymbol{b}_i^\star\| \] と表される量です.

サンプル

#include <iostream>
#include "lattice.h"

int main()
{
    // 3次正方行列を基底行列に持つ格子
    Lattice<int> lat(3, 3);

    // ランダムなSVP型格子に設定
    lat.setRandom(3, 3, 1000, 9999);

    // 体積
    std::cout << lat.volume() << std::endl;

    return 0;
}



宣言 double potential(const bool compute_gso = true);
概略 格子基底のポテンシャル量を計算する
引数
compute_gso ポテンシャル量を計算する前にGSO情報を更新するかどうか
戻り値 格子基底のポテンシャル量
解説 格子基底のポテンシャル量(potential)を計算する関数です.尚,格子基底\(\boldsymbol{B}=\lbrace\boldsymbol{b}_1,\ldots,\boldsymbol{b}_n\rbrace\)のポテンシャル量とは,そのGSOベクトル\(\boldsymbol{b}_1^\star,\ldots,\boldsymbol{b}_n^\star\)に対して \[ \mathrm{Pot}(\boldsymbol{B})=\prod_{i=1}^n \|\boldsymbol{b}_i^\star\|^{2(n-i+1)} \] と表される量です.

サンプル

#include <iostream>
#include "lattice.h"

int main()
{
    // 3次正方行列を基底行列に持つ格子
    Lattice<int> lat(3, 3);

    // ランダムなSVP型格子に設定
    lat.setRandom(3, 3, 1000, 9999);

    // 体積
    std::cout << lat.potential() << std::endl;

    return 0;
}



宣言 void setBasis(const std::vector<std::vector<T>> basis_mat);
概略 格子基底行列を任意の行列として設定する
引数
basis_mat 格子基底行列
戻り値 なし
解説 格子基底行列を任意の行列で初期化する関数です.



宣言 void computeGSO();
概略 Gram-Schmidtの直交化ベクトルの二乗ノルムとGram-Schmidtの直交化係数行列(GSO情報)を計算する
引数
v 係数ベクトル
戻り値 格子ベクトル
解説 基底行列のGram-Schmidtの直交化ベクトルの二乗ノルムとGram-Schmidtの直交化係数行列(GSO情報)を計算する関数です.



宣言 std::vector<T> mulVecBasis(const std::vector<long> v);
概略 係数ベクトルを格子ベクトルに変換する
引数 なし
戻り値 なし
解説 係数ベクトルを基底行列に左から乗じて格子ベクトルに変換する関数です.



戻る