Main Content

haltonset

ハルトン準乱数点集合

説明

haltonset は、ハルトン列から点を生成する、準乱数点集合オブジェクトです。ハルトン列は、各次元で異なる素数の基数を使用して、きわめて一様に空間を埋めます。

作成

説明

p = haltonset(d) は、d 次元の点集合 p を作成します。これは、既定のプロパティ設定を使用する haltonset オブジェクトです。入力引数 d は、pDimensions プロパティに対応します。

p = haltonset(d,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、pプロパティを設定します。各プロパティ名は引用符で囲みます。たとえば、haltonset(5,'Leap',2) は 1 番目の点、4 番目の点、7 番目の点、10 番目の点、以下同様の点から 5 次元の点集合を作成します。

返されるオブジェクト p では、ハルトン準乱数列のプロパティがカプセル化されます。点集合は有限であり、Skip および Leap プロパティと点集合のインデックスのサイズに対する限界 (最大値は 253) によって長さが決まります。net またはかっこによるインデックス指定を使用して p にアクセスすると、点集合の値が生成されます。値は p に格納されません。

プロパティ

すべて展開する

この プロパティ は読み取り専用です。

点集合内の点の次元数。正の整数スカラーを指定します。たとえば、p.Dimensions = 5 である点集合 p 内の各点には 5 つの値があります。

関数 haltonset を使用して点集合を作成する場合、入力引数 d を使用して次元数を指定します。

数列内の点の間隔。正の整数スカラーを指定します。つまり、点集合の Leap プロパティは、点を取得するときにリープして省略する数列内の点の個数を指定します。既定の設定の Leap 値は 0 です。これは、シーケンスからすべての点を取得するということです。

リープは、点集合の品質を向上させるために使用されるテクニックです。ただし、Leap の値の選択には注意が必要です。Leap の値が多いと、単位超立方体の下位次元の大きい超矩形に近づかない数列が生成されるので、一様な準乱数点集合になりません。詳細は、[1]を参照してください。

ハルトン集合の Leap の値を選択する方法の 1 つは、値を (n–1) に設定することです。n は、どの次元の生成にも使用しなかった素数です。たとえば、d 次元の点集合の場合、(d+1) 番目以降の素数を n について指定します。

例: p = haltonset(2,'Leap',4); (ここで、d = 2 および n = 5)

例: p.Leap = 100;

数列のスクランブルを制御する設定。次のフィールドをもつ構造体を指定します。

  • Type — スクランブルの名前が含まれている文字ベクトル

  • Options — スクランブルのパラメーター値が含まれている cell 配列

スクランブルを設定するには、オブジェクト関数 scramble を使用します。有効なスクランブルの種類の一覧については、scramble の入力引数 type を参照してください。無効なスクランブル型を与えられた点集合に設定すると、エラーが発生します。

ScrambleMethod プロパティも、空の行列を値として受け入れます。この場合、すべてのスクランブルが消去され、0x0 の構造体を格納するようにプロパティが設定されます。

点集合から省略する数列内の初期点の個数。正の整数スカラーを指定します。

数列の初期点は、望ましくない性質を示すことがあります。たとえば、多くの場合に最初の点は (0,0,0,...) ですが、同等の点である (1,1,1,...) が絶対に現れないので、数列が偏る可能性があります。また、多くの場合、初期点は異なる次元の間の相関を示し、これらの相関は数列の後の方になると失われます。

例: p = haltonset(__,'Skip',2e3);

例: p.Skip = 1e3;

この プロパティ は読み取り専用です。

準乱数点集合 p が基づく数列の種類。'Halton' を指定します。

オブジェクト関数

net準乱数の点集合を生成
scramble準乱数点集合をスクランブル

haltonset オブジェクトでは、以下の MATLAB® 関数も使用できます。点集合オブジェクトは、多次元点の行列と同じように扱われます。

length最大の配列の次元の長さ
size配列サイズ

すべて折りたたむ

3 次元のハルトン点集合を生成し、最初の 1000 個の値をスキップしてから、101 番目ごとの点を保持します。

p = haltonset(3,'Skip',1e3,'Leap',1e2)
p = 
Halton point set in 3 dimensions (89180190640991 points)

Properties:
              Skip : 1000
              Leap : 100
    ScrambleMethod : none

scramble を使用して、基数反転スクランブルを適用します。

p = scramble(p,'RR2')
p = 
Halton point set in 3 dimensions (89180190640991 points)

Properties:
              Skip : 1000
              Leap : 100
    ScrambleMethod : RR2

net を使用して、最初の 4 つの点を生成します。

X0 = net(p,4)
X0 = 4×3

    0.0928    0.6950    0.0029
    0.6958    0.2958    0.8269
    0.3013    0.6497    0.4141
    0.9087    0.7883    0.2166

かっこでインデックスを指定して、11 番目の点まで 3 つごとに点を生成します。

X = p(1:3:11,:)
X = 4×3

    0.0928    0.6950    0.0029
    0.9087    0.7883    0.2166
    0.3843    0.9840    0.9878
    0.6831    0.7357    0.7923

ヒント

  • Skip および Leap プロパティは、並列的な用途に便利です。たとえば、Parallel Computing Toolbox™ のライセンスがある場合、関数 spmdIndex (Parallel Computing Toolbox) を使用して、N 個の異なるワーカーに一連の点を分割できます。n 番目のワーカーのそれぞれで、点集合の Skip プロパティを n – 1 に、Leap プロパティを N – 1 に設定します。次のコードは、3 つのワーカーに数列を分割する方法を示しています。

    Nworkers = 3;
    p = haltonset(10,'Leap',Nworkers-1);
    spmd(Nworkers)
        p.Skip = spmdIndex - 1;
    
        % Compute something using points 1,4,7...
        % or points 2,5,8... or points 3,6,9...
    end

アルゴリズム

すべて展開する

参照

[1] Kocis, L., and W. J. Whiten. “Computational Investigations of Low-Discrepancy Sequences.” ACM Transactions on Mathematical Software. Vol. 23, No. 2, 1997, pp. 266–294.

バージョン履歴

R2008a で導入