Main Content

sobolset

ソボル準乱数点集合

説明

sobolset は、ソボル列から点を生成する、準乱数点集合オブジェクトです。ソボル列は、きわめて一様に空間を埋める 2 進数のデジタル系列です。

作成

説明

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

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

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

プロパティ

すべて展開する

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

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

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

点集合を作成した後で次元数を削減するには、オブジェクト関数 reduceDimensions を使用します。

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

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

例: p = sobolset(__,'Leap',50);

例: p.Leap = 100;

点の生成方法。'standard' または 'graycode' を指定します。PointOrder プロパティは、ソボル列の点を生成する順序を指定します。PointOrder'standard' に設定した場合、生成される点は元のソボル列の実装と同じになります。PointOrder'graycode' に設定した場合、インデックス自体ではなく、インデックスのグレイ符号を使用する実装によって数列が生成されます。

'graycode' オプションを使用すると数列の生成が高速になりますが、生成される点の順序が変化します。グレイ符号の実装の詳細については、[1]を参照してください。

例: p = sobolset(__,'PointOrder','graycode');

例: p.PointOrder = 'standard';

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

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

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

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

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

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

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

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

例: p.Skip = 1e3;

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

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

オブジェクト関数

net準乱数の点集合を生成
reduceDimensionsソボル点集合の次元削減
scramble準乱数点集合をスクランブル

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

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

すべて折りたたむ

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

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

Properties:
              Skip : 1000
              Leap : 100
    ScrambleMethod : none
        PointOrder : standard

scramble を使用して、ランダムな桁シフトと組み合わせたランダムな線形スクランブルを適用します。

p = scramble(p,'MatousekAffineOwen')
p = 
Sobol point set in 3 dimensions (89180190640991 points)

Properties:
              Skip : 1000
              Leap : 100
    ScrambleMethod : MatousekAffineOwen
        PointOrder : standard

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

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

    0.7601    0.5919    0.9529
    0.1795    0.0856    0.0491
    0.5488    0.0785    0.8483
    0.3882    0.8771    0.8755

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

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

    0.7601    0.5919    0.9529
    0.3882    0.8771    0.8755
    0.6905    0.4951    0.8464
    0.1955    0.5679    0.3192

ヒント

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

    Nworkers = 3;
    p = sobolset(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] Bratley, P., and B. L. Fox. “Algorithm 659 Implementing Sobol's Quasirandom Sequence Generator.” ACM Transactions on Mathematical Software. Vol. 14, No. 1, 1988, pp. 88–100.

[2] Hong, H. S., and F. J. Hickernell. “Algorithm 823: Implementing Scrambled Digital Sequences.” ACM Transactions on Mathematical Software. Vol. 29, No. 2, 2003, pp. 95–109.

[3] Joe, S., and F. Y. Kuo. “Remark on Algorithm 659: Implementing Sobol's Quasirandom Sequence Generator.” ACM Transactions on Mathematical Software. Vol. 29, No. 1, 2003, pp. 49–57.

[4] 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.

[5] Matousek, J. “On the L2-Discrepancy for Anchored Boxes.” Journal of Complexity. Vol. 14, No. 4, 1998, pp. 527–556.

バージョン履歴

R2008a で導入