<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2008 - INRIA
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 * Copyright (C) 2023 - Samuel GOUGEON
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<!-- module: randlib -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
          xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
          xml:lang="ja" xml:id="grand">
    <refnamediv>
        <refname>grand</refname>
        <refpurpose>乱数生成器</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>呼び出し手順</title>
        <synopsis>
            Y = grand(m, n, "bet", A, B)
            Y = grand(m, n, "bin", N, p)
            Y = grand(m, n, "nbn", N, p)
            Y = grand(m, n, "chi", Df)
            Y = grand(m, n, "nch", Df, Xnon)
            Y = grand(m, n, "exp", Av)
            Y = grand(m, n, "f", Dfn, Dfd)
            Y = grand(m, n, "nf", Dfn, Dfd, Xnon)
            Y = grand(m, n, "gam", shape, rate)
            Y = grand(m, n, "nor", Av, Sd)
            Y = grand(m, n, "geom", p)
            Y = grand(m, n, "poi", mu)
            Y = grand(m, n, "def")
            Y = grand(m, n, "unf", Low, High)
            Y = grand(m, n, "uin", Low, High)
            Y = grand(m, n, "lgi")

            Y = grand(m, n, o, …, PDFname, …)
            Y = grand(X, PDFname, …)
        </synopsis>
        <para/>
        <synopsis>
            Y = grand(n, "mn", Mean, Cov)
            Y = grand(n, "markov", P, x0)
            Y = grand(n, "mul", nb, P)
            Y = grand(n, "prm", array)
        </synopsis>
        <para/>
        <synopsis>
            S = grand("getgen")
            grand("setgen", gen)

            S = grand("getsd")
            grand("setsd", S)

            grand("setcgn", G)
            S = grand("getcgn")

            S = grand("phr2sd", phrase)

            grand("initgn", I)
            grand("setall", s1, s2, s3, s4)
            grand("advnst", K)
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>パラメータ</title>
        <variablelist>
            <varlistentry>
                <term>m, n, o</term>
                <listitem>
                    <para>
                        integers, size of the wanted matrix / hypermatrix <varname>Y</varname>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>X</term>
                <listitem>
                    <para>
                        次元(つまり<literal>m x n</literal>) のみ使用される行列
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>PDFname</term>
                <listitem>
                    <para>
                        Name of the chosen probability Density Function:
                        <literal>"def", "unf", "uin", "bet", "gam","exp", "nor", "geo", "poi",
                        "bin", "chi", "nbn", "nch", "f", "nf",  "lgi"</literal>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>Y</term>
                <listitem>
                    <para>
                        depending on the input, a matrix or hypermatrix, with random entries.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>S</term>
                <listitem>
                    <para>処理の出力 (通常は文字列または実数の列ベクトル)</para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>説明</title>
        <para>
            警告: シードを指定しない場合,系列はあるセッションと別のセッションで 同一のままとなります.
        </para>
        <para>rand関数を使用する各スクリプトの初めに, 以下を実行する必要があります:
        <programlisting role="example"><![CDATA[
rand('seed',getdate('s'))
     ]]></programlisting>
        </para>
        <para>
            <function>grand(…)</function> generates random numbers from various probability distributions.
        </para>
        <para>
            The syntaxes
            <screen><![CDATA[
Y = grand(m, n, "bet", A, B)
Y = grand(m, n, "bin", N, p)
Y = grand(m, n, "nbn", N, p)
Y = grand(m, n, "chi", Df)
Y = grand(m, n, "nch", Df, Xnon)
Y = grand(m, n, "exp", Av)
Y = grand(m, n, "f", Dfn, Dfd)
Y = grand(m, n, "nf", Dfn, Dfd, Xnon)
Y = grand(m, n, "gam", shape, rate)
Y = grand(m, n, "nor", Av, Sd)
Y = grand(m, n, "geom", p)
Y = grand(m, n, "poi", mu)
Y = grand(m, n, "def")
Y = grand(m, n, "unf", Low, High)
Y = grand(m, n, "uin", Low, High)
Y = grand(m, n, "lgi")
]]></screen>
            produce a <varname>m</varname> x <varname>n</varname> matrix with random entries.
        </para>
        <para>
            The syntax
            <screen><![CDATA[
Y = grand(m, n, o, …, PDFname, …)
]]></screen>
            produces a <varname>m</varname> x <varname>n</varname> x <varname>o</varname> x... hypermatrix
            with random entries.
        </para>
        <para>
            <screen><![CDATA[
Y = grand(X, PDFname, …)
]]></screen>
            produces a scalar, vector, matrix or hypermatrix of size <literal>size(X)</literal>,
            with random entries. <varname>X</varname> is used only as template to size the result.
        </para>
        <para>
            The syntaxes
        <screen><![CDATA[
Y = grand(n, "mn", Mean, Cov)
Y = grand(n, "markov", P, x0)
Y = grand(n, "mul", nb, P)
Y = grand(n, "prm", array)
]]></screen>
            produce an array with random entries, whose sizes depend on <varname>n</varname> and on
            the size of the parameters <varname>Mean</varname>, <varname>P</varname> or
            <varname>array</varname> (see below for details).
        </para>
        <para>
            The syntaxes
            <screen><![CDATA[
S = grand("getgen")
grand("setgen", gen)

S = grand("getsd")
grand("setsd", S)

grand("setcgn", G)
S = grand("getcgn")

grand("initgn", I)

grand("setall", s1, s2, s3, s4)

grand("advnst", K)
]]></screen>
            configure or query the state of the underlying random number generators.
        </para>
    </refsection>
    <refsection>
        <title>指定された分布から乱数を取得する</title>
        <variablelist>
            <varlistentry>
                <term>ベータ分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'bet', A,B)</code> は
                        パラメータ<varname>A</varname> およびd <varname>B</varname>
                        を指定したベータ分布からランダム変量を生成します.
                        ベータ分布の密度は (0 &lt; x &lt; 1) です:
                    </para>
                    <latex>
                        \dfrac{x^{A-1}(1-x)^{B-1}}{\beta(A,B)}
                    </latex>
                    <para>
                        <varname>A</varname> および <varname>B</varname> は
                        実数で &gt; 10<superscript>-37</superscript>とします.  関係する関数は
                        : <link linkend="cdfbet">cdfbet</link>です.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>二項分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'bin', N,p)</code> は
                        パラメータ<varname>N</varname> (正の整数) および <varname>p</varname>
                        ([0,1]の範囲の実数)を指定した二項分布に基づきランダム変量を生成します.
                        この分布では,成功する確率が<varname>p</varname>の
                        <varname>N</varname>回の独立なベルヌーイ試行における
                        成功回数となります.
                        関係する関数: <link linkend="binomial">binomial</link>,
                        <link linkend="cdfbin">cdfbin</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>負の二項分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'nbn', N,p)</code> は
                        パラメータ<varname>N</varname> (正の整数) および<varname>p</varname> (
                        (0,1)の実数)を指定した負の二項分布に基づきランダム変量を生成します
                        :
                        成功確率 <varname>p</varname>の独立なベルヌーイ試行において
                        <varname>N</varname>回成功する前に発生する失敗の回数.
                        関係する関数 : <link linkend="cdfnbn">cdfnbn</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>カイ二乗分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'chi', Df)</code> は,自由度
                        <varname>Df</varname>(実数 &gt; 0.0)を指定した
                        カイ二乗分布に基づくランダム変量を生成します.
                        関係する関数: <link linkend="cdfchi">cdfchi</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>非心カイ二乗分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'nch', Df,Xnon)</code> は,
                        自由度<varname>Df</varname>(実数 &gt; 0.0)および
                        非心度パラメータ<varname>Xnonc</varname> (実数 &gt;= 0.0)
                        を指定した非心カイ二乗分布に基づくランダム変量を生成します.
                        関係する関数 : <link linkend="cdfchn">cdfchn</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>指数分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'exp', Av)</code> は
                        平均<varname>Av</varname>(実数 &gt;= 0.0)
                        を指定した指数分布に基づくランダム変量を生成します.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>F分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'f', Dfn,Dfd)</code> は,
                        分子の自由度<varname>Dfn</varname> (実数 &gt; 0.0) および
                        分母の自由度<varname>Dfd</varname> (実数
                        &gt; 0.0) を指定した
                        F(分散比)分布に基づくランダム変量を生成します.
                        関係する関数 : <link linkend="cdff">cdff</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>非心F分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'nf', Dfn,Dfd,Xnon)</code>は,
                        分子の自由度<varname>Dfn</varname> (実数
                        &gt;= 1), および
                        分母の自由度<varname>Dfd</varname> (実数 &gt; 0) ,
                        および非心パラメータ
                        <varname>Xnonc</varname> (実数 &gt;= 0)を指定して
                        非心F分布に基づくランダム変量を生成します.
                        関係する関数 : <link linkend="cdffnc">cdffnc</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ガンマ分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'gam', shape,rate)</code>
                        は,パラメータ<varname>shape</varname> (実数 &gt; 0)および
                        <varname>rate</varname> (実数 &gt; 0)を指定して
                        ガンマ分布に基づくランダム変量を生成します.
                        ガンマの密度は以下となります :
                    </para>
                    <latex>
                        \dfrac{ \textrm{rate}^{\textrm{shape}} x^{\textrm{shape}-1} e^{-x.\textrm{rate}}}{\gamma(\textrm{shape}) }
                    </latex>
                    <para>
                        関係する関数 : <link linkend="gamma">gamma</link>,
                        <link linkend="cdfgam">cdfgam</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ガウスラプラス(正規)分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'nor', Av,Sd)</code> は
                        平均<varname>Av</varname> (実数) および標準偏差
                        <varname>Sd</varname> (実数 &gt;= 0)の
                        正規分布に基づくランダム変量を生成します.
                        関係する関数
                        : <link linkend="cdfnor">cdfnor</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>多変量ガウス(多変量正規)分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(n, 'mn', Mean,Cov)</code>は,
                        <varname>n</varname>次の多変量正規ランダム変量を
                        生成します;
                        <varname>Mean</varname> は <literal>m x 1</literal>
                        行列, <varname>Cov</varname>は <literal>m x m</literal>
                        対称正定行列です.
                        <varname>Y</varname> はこの場合 <literal>m x n</literal>
                        行列となります.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>幾何分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'geom', p)</code> は,
                        パラメータ<varname>p</varname>を指定した
                        幾何分布に基づくランダム変量を生成します:
                        (成功率<varname>p</varname>の)ベルヌーイ試行に1回成功するまでの回数.
                        <varname>p</varname> は [1.3e-307,1]の範囲とします.
                    </para>
                    <para>
                        <varname>Y</varname> は整数の値を有する正の実数となり,
                        これらは "1回の成功を得る時の試行回数"です.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>マルコフ分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(n, 'markov', P,x0)</code> は,
                        推移行列 <varname>P</varname>で記述されたマルコフ連鎖の
                        <varname>n</varname>個の一連の状態量を生成します.
                        状態量の初期値は<varname>x0</varname>で指定されます.
                        <varname>x0</varname>が大きさ<literal>m=size(x0,'*')</literal>の
                        行列の場合,<varname>Y</varname>は大きさ<literal>m x n</literal>
                        の行列となります.
                        <literal>Y(i,:)</literal> は初期状態量<literal>x0(i)</literal>
                        から得られるサンプルパスです.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>多項分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(n, 'mul', nb,P)</code> は,
                        多項分布に基づき<varname>n</varname>個の観測量を生成します:
                        <literal>m</literal>個のカテゴリの中に
                        <varname>nb</varname>個の分類のイベント
                        (<literal>m</literal>個の"boxes"の中に<varname>nb</varname>個の"balls").
                        <literal>P(i)</literal>はあるイベントがカテゴリ i に分類される確率です.
                        確率ベクトル<varname>P</varname>の大きさは<literal>m-1</literal>です
                        (カテゴリ<literal>m</literal>の確率は<literal>1-sum(P)</literal>となります).
                        <varname>Y</varname> の大きさは <literal>m x n</literal>で,
                        各列 <literal>Y(:,j)</literal> は多項分布の観測量,
                        <literal>Y(i,j)</literal>は(
                        <literal>j</literal>番目の観測値に関する)カテゴリ<literal>i</literal>に
                        分類されるイベントの数です(<literal>sum(Y(:,j)) = nb</literal>
                        ).
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ポワソン分布</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'poi', mu)</code>は,
                        平均 <varname>mu (実数 &gt;= 0.0)</varname>のポワソン分布に基づき
                        乱数を生成します. 関係する機能
                        : <link linkend="cdfpoi">cdfpoi</link>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ランダム置換</term>
                <listitem>
                    <para>
                        <code>Y = grand(n, "prm", array)</code> generates
                        <varname>n</varname> random permutations of the <varname>array</varname>
                        elements.
                        <varname>array</varname> can be a vector, matrix or hypermatrix of real or
                        complex numbers, of integers, booleans, polynomials or strings; full or sparse.
                        <itemizedlist>
                            <listitem>
                                If <varname>array</varname> is a <literal>1 x m</literal> row vector,
                                <varname>Y</varname> is a <literal>n x m</literal> matrix.
                            </listitem>
                            <listitem>
                                If <varname>array</varname> is a <literal>m x 1</literal> column vector,
                                <varname>Y</varname> is a <literal>m x n</literal> matrix.
                            </listitem>
                            <listitem>
                                If <varname>array</varname> is a <literal>m x p</literal> matrix,
                                <varname>Y</varname> is a <literal>m x p x n</literal> hypermatrix.
                            </listitem>
                            <listitem>
                                If <varname>array</varname> is a <literal>m x p x q…</literal> hypermatrix,
                                <varname>Y</varname> is a <literal>m x p x q… x n</literal> hypermatrix.
                            </listitem>
                        </itemizedlist>
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>一様分布 (def)</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'def')</code> は,
                        は,<literal>[0,1)</literal> (1は含まれません) の範囲の
                        一様分布に基づきランダム変量を生成します.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>一様分布 (unf)</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'unf', Low,High)</code>
                        は <literal>[Low, High)</literal> の範囲の一様分布に基づく
                        の実数のランダム変量を生成します.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>一様分布 (uin)</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'uin', Low,High)</code>は,
                        <varname>Low</varname> および <varname>High</varname> (含む)
                        の範囲の一様分布に基づく
                        の整数のランダム変量を生成します.
                        <varname>High</varname> および
                      <varname>Low</varname> は <literal>(High-Low+1) &lt; 2147483561</literal>の
                        範囲の整数とする必要があります.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>一様分布 (lgi)</term>
                <listitem>
                    <para>
                        <code>Y = grand(m,n, 'lgi')</code> は
                        カレントの生成器の基底出力として
                        以下の範囲の一様分布に基づくランダムな整数を返します:
                    </para>
                    <itemizedlist>
                        <listitem>
                            <para>
                                mt および kiss の場合は <literal>[0, 2^32 - 1]</literal>
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                clcg2 の場合は <literal>[0, 2147483561]</literal>
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                clcg4の場合は <literal>[0, 2^31 - 2]</literal>
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                urandの場合は <literal>[0, 2^31 - 1]</literal>.
                            </para>
                        </listitem>
                    </itemizedlist>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>カレントの生成器およびその状態を設定/取得</title>
        <para> Scilab-2.7以降,異なる('lgi'分布に基づくランダムな整数,もしくは
            その整数に基づき得られたもの)基底生成器を選択することが
            可能となっています:
        </para>
        <variablelist>
            <varlistentry>
                <term>mt</term>
                <listitem>
                    <para>
                        周期<literal>2^19937</literal>の
                        M. Matsumoto および T. NishimuraのMersenne-Twister,
                        状態は
                        <literal>624</literal>個の整数の配列(およびこの配列のインデックス)により
                        指定されます; これがデフォルトの生成器です.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>kiss</term>
                <listitem>
                    <para>
                        周期<literal>2^123</literal>のG. MarsagliaのKeep It Simple Stupid,
                        状態は<literal>4</literal>個の整数により指定されます.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>clcg2</term>
                <listitem>
                    <para>
                        周期 <literal>2^61</literal>のP. L'Ecuyerの2線形共役合同生成器,
                        状態は<literal>2</literal>個の整数により指定されます;
                        grandにより以前に(若干修正された)使用されていた生成器です.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>clcg4</term>
                <listitem>
                    <para>
                        周期 <literal>2^121</literal>のP. L'Ecuyerの4線形合同生成器,
                        状態は<literal>4</literal>個の整数により指定されます;
                        この生成器は<literal>101</literal>個の(重ならない)異なる生成器に
                        分割することができ,異なるタスクの場合に有用です
                        ('clcg4に固有の動作'および 'clcg4のテスト例'を参照).
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>urand</term>
                <listitem>
                    <para>
                        scilab 関数 <link linkend="rand">rand</link>で使用される生成器,
                        <literal>1</literal>個の整数で状態が定義され,
                        周期は<literal>2^31</literal>
                        (d.e. knuth (1969),  vol  2. State に示された理論と提案に基づく).
                        これはこの一覧の中では高速ですが,
                        やや古臭くなっています (重要なシミュレーションでは使用しないでください).
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>全ての生成器に共通なアクションの動作を以下に示します:
        </para>
        <variablelist>
            <varlistentry>
                <term>action= 'getgen'</term>
                <listitem>
                    <para>
                        <code>S = grand('getgen')</code> はカレントの基底生成器を返します
                        ( <varname>S</varname> は以下の文字列のどれかです:
                        'mt', 'kiss', 'clcg2', 'clcg4', 'urand'.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'setgen'</term>
                <listitem>
                    <para>
                        <code>grand('setgen', gen)</code>は
                        カレントの基底生成器を<varname>gen</varname>に設定します.
                        この文字列には 'mt', 'kiss', 'clcg2', 'clcg4', 'urand'
                        のどれかを指定します(
                        このコールは新しいカレントの生成器を返すことに注意してください).
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'getsd'</term>
                <listitem>
                    <para>
                        <code>S = grand('getsd')</code> はカレントの基底生成器の
                        カレントの状態 (カレントのシード)を返します ;
                        <varname>S</varname> には, mt の場合は<literal>625</literal>次
                        (先頭は<literal>[1,624]</literal>の範囲のインデックスです),
                        kiss の場合は <literal>4</literal> 次, clcg2の場合は <literal>2</literal>次,
                        clcg4 の場合は <literal>4</literal>次
                        (最後の1つについてはカレントの仮想生成器のカレントの状態が取得されます),
                        および urand の場合は <literal>1</literal>次
                        の(整数)列ベクトルが出力されます.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'setsd'</term>
                <listitem>
                    <para>
                        <code>grand('setsd', S), grand('setsd',s1[,s2,s3,s4])</code> は
                        カレントの基底生成器の状態(新しいシード)を設定します:
                    </para>
                    <variablelist>
                        <varlistentry>
                            <term>mtの場合</term>
                            <listitem>
                                <para>
                                    <varname>S</varname>は<literal>625</literal>次の整数ベクトル
                                    (最初の要素はインデックスで<literal>[1,624]</literal>の範囲とする
                                    必要があります, 続く<literal>624</literal>個の要素は
                                    <literal>[0,2^32[</literal>)の範囲とします)
                                    (しかし,全てをゼロにするすることはできません)；
                                    整数<literal>s1</literal>を1つだけ指定することで,より簡単に初期化を
                                    行うことができます.
                                    (<literal>s1</literal> は <literal>[0,2^32[</literal>の範囲とします) ;
                                </para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>kissの場合</term>
                            <listitem>
                                <para>
                                    <literal>[0,2^32[</literal>の範囲の
                                    <literal>4</literal> 個の整数 <literal>s1,s2, s3,s4</literal> を指定します ;
                                </para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>clcg2の場合</term>
                            <listitem>
                                <para>
                                    <literal>2</literal> 個の整数 <literal>s1</literal> (範囲:<literal>[1,2147483562]</literal>) および <literal>s2</literal>
                                    (範囲: <literal>[1,2147483398]</literal>) を指定します ;
                                </para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>clcg4の場合</term>
                            <listitem>
                                <para>
                                    <literal>4</literal> 個の整数 <literal>s1</literal> (範囲: <literal>[1,2147483646]</literal>), <literal>s2</literal>
                                    (範囲: <literal>[1,2147483542]</literal>), <literal>s3</literal> (範囲:  <literal>[1,2147483422]</literal>),
                                    <literal>s4</literal> (範囲:  <literal>[1,2147483322]</literal> ) を指定します ;
                                    <literal>注意</literal> : clcg4の場合,
                                    カレントの仮想生成器のシードを設定しますが,
                                    この生成器と他の仮想生成器との間の同期が失われる可能性があります.
                                    すなわち,生成されるデータ列は他の生成器により生成されるデータ列と
                                    オーバーラップしていないということは保証されません)　=&gt;
                                    代わりに 'setall' オプションを使用してください.
                                </para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>urandの場合</term>
                            <listitem>
                                <para>
                                    <literal>[0,2^31</literal>[の範囲の<literal>1</literal>
                                    個の整数 <literal>s1</literal> を指定します.
                                </para>
                            </listitem>
                        </varlistentry>
                    </variablelist>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'phr2sd'</term>
                <listitem>
                    <para>
                        <code>Sd = grand('phr2sd', phrase)</code> は,
                        基底生成器(clcg2に適しています)の状態を変更するシードとして使用可能な
                        <literal>1 x 2</literal> ベクトル <literal>Sd</literal>を生成する
                        <literal>phrase</literal> (文字列)を指定します.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>clcg4の固有のオプション</title>
        <para>
            clcg4 生成器は他の生成器と同時に使用することができますが,
            系列がオーバーラップしない
            複数(<literal>101</literal>個)の仮想生成器に分割できるという利点があります.
            (古典的な生成器を使用する場合,異なる系列を得るために
            初期状態量(シード)を別のものに変更できますが,完全に異なる系列となることは
            保証されません)
            各仮想生成器は<literal>2^72</literal> 個の値の系列に対応します.
            これらはさらに長さ<literal>W=2^41</literal>の<literal>V=2^31</literal>個の
            セグメント(またはブロック)に分割されます.
            指定した仮想生成器について,系列の先頭またはカレントのセグメントの先頭に戻るか
            次のセグメントに直接移動するかを選択できます.
            'setall'オプションにより生成器 <literal>0</literal> の初期状態(シード)を
            変更することも可能です.
            これにより,同期をとるために他の仮想生成器の初期状態量を変更することも可能です.
            (すなわち, gen <literal>0</literal> の新しい初期状態の関数として,
            gen <literal>1..100</literal> の初期状態量は<literal>101</literal>個の
            重複しない系列が得られるように再計算されます.)
        </para>
        <variablelist>
            <varlistentry>
                <term>action= 'setcgn'</term>
                <listitem>
                    <para>
                        <code>grand('setcgn', G)</code> は clcg4 のカレントの仮想生成器を設定します
                        (clcg4 が設定された時, この値は使用される仮想 (clcg4)生成器の数<varname>G</varname>となります);
                        仮想 clcg4 生成器は<literal>0,1,..,100</literal>と番号付けられます
                        (そして, <varname>G</varname>は<literal>[0,100]</literal>の範囲の整数となります);
                        デフォルトで,カレントの仮想生成器は<literal>0</literal>です.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'getcgn'</term>
                <listitem>
                    <para>
                        <code>S = grand('getcgn')</code> はカレントの仮想 clcg4 生成器の数を返します.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'initgn'</term>
                <listitem>
                    <para>
                        <code>grand('initgn', I)</code> はカレントの仮想生成器の状態を再度初期化します
                    </para>
                    <variablelist>
                        <varlistentry>
                            <term>I = -1</term>
                            <listitem>
                                <para>初期シードの状態を設定します</para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>I = 0</term>
                            <listitem>
                                <para>直近の(前の)シードを設定します (つまり,カレントのセグメントの先頭)</para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>I = 1</term>
                            <listitem>
                                <para>
                                    直近のシード(すなわち,次のセグメントの先頭)から新しいシード<literal>W</literal>に
                                    状態量を設定し,カレントのセグメントのパラメータをリセットします.
                                </para>
                            </listitem>
                        </varlistentry>
                    </variablelist>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'setall'</term>
                <listitem>
                    <para>
                        <code>grand('setall',s1,s2,s3,s4)</code> は
                        生成器<literal>0</literal>の初期状態を<literal>s1,s2,s3,s4</literal>に設定します.
                        他の生成器の初期シードは同期がとれるように設定されます.
                        <literal>s1, s2, s3, s4</literal>に関する制約については,'setsd'アクションを参照ください.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>action= 'advnst'</term>
                <listitem>
                    <para>
                        <code>grand('advnst',K)</code> はカレントの生成器の状態を
                        <literal>2^K</literal>だけ前に進め,初期シードをその値でリセットします.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>例</title>
        <para>
            In the following example, we generate random numbers from various distributions and
            plot the associated histograms.
        </para>
        <programlisting role="example"><![CDATA[
// Returns a 400 x 800 matrix of random doubles,
// with normal distribution and average 0 and standard deviation 1.
R = grand(400,800,"nor",0,1);
scf();
histplot(10,R);
xtitle("Normal random numbers from grand","X","Frequency");
 ]]></programlisting>
        <scilab:image localized="true">
            R = grand(400,800,"nor",0,1);
            histplot(10,R);
            xtitle("Normal random numbers from grand","X","Frequency");
        </scilab:image>

        <programlisting role="example"><![CDATA[
// Returns a 400 x 800 matrix of random doubles,
// uniform in [0,1).
R = grand(400,800,"def");
scf();
histplot(10,R);
xtitle("Uniform random numbers from grand","X","Frequency");
 ]]></programlisting>
        <scilab:image localized="true">
            R = grand(400,800,"def");
            histplot(10,R);
            xtitle("Uniform random numbers from grand","X","Frequency");
        </scilab:image>

        <programlisting role="example"><![CDATA[
// Returns a 400 x 800 matrix of random doubles,
// with Poisson distribution and average equal to 5.
R = grand(400,800,"poi",5);
scf();
histplot(10,R);
xtitle("Poisson random numbers from grand","X","Frequency");
 ]]></programlisting>
        <scilab:image localized="true">
            R = grand(400,800,"poi",5);
            histplot(10,R);
            xtitle("Poisson random numbers from grand","X","Frequency");
        </scilab:image>

        <para>
            In the following example, we generate random numbers from the exponential distribution and
            then compare the empirical with the theoretical distribution.
        </para>
        <programlisting role="example"><![CDATA[
lambda=1.6;
N=100000;
X = grand(1,N,"exp",lambda);
scf();
classes = linspace(0,12,25);
histplot(classes,X);
x=linspace(0,12,25);
y = (1/lambda)*exp(-(1/lambda)*x);
plot(x,y,"ro-");
legend(["Empirical" "Theory"]);
xtitle("Exponential random numbers from grand","X","Frequency");
 ]]></programlisting>
        <scilab:image localized="true">
            lambda=1.6;
            N=100000;
            X = grand(1,N,"exp",lambda);
            classes = linspace(0,12,25);
            histplot(classes,X)
            x=linspace(0,12,25);
            y = (1/lambda)*exp(-(1/lambda)*x);
            plot(x,y,"ro-");
            legend(["Empirical" "Theory"]);
            xtitle("Exponential random numbers from grand","X","Frequency");
        </scilab:image>
        <para>
            In the following example, we generate random numbers from the gamma distribution and
            then compare the empirical with the theoretical distribution.
        </para>
        <programlisting role="example"><![CDATA[
N=10000;
A=10;
B=4;
R=grand(1,N,"gam",A,B);
XS=gsort(R,"g","i")';
PS=(1:N)'/N;
P=cdfgam("PQ",XS,A*ones(XS),B*ones(XS));
scf();
plot(XS,PS,"b-"); // Empirical distribution
plot(XS,P,"r-"); // Theoretical distribution
legend(["Empirical" "Theory"]);
xtitle("Cumulative distribution function of Gamma random numbers","X","F");
 ]]></programlisting>
        <scilab:image localized="true">
            N=10000;
            A=10;
            B=4;
            R=grand(1,N,"gam",A,B);
            XS=gsort(R,"g","i")';
            PS=(1:N)'/N;
            P=cdfgam("PQ",XS,A*ones(XS),B*ones(XS));
            scf();
            plot(XS,PS,"b-"); // Empirical distribution
            plot(XS,P,"r-"); // Theoretical distribution
            legend(["Empirical" "Theory"]);
            xtitle("Cumulative distribution function of Gamma random numbers","X","F");
        </scilab:image>
        <para>
            In the following example, we generate 10 random integers in the [1,365] interval.
        </para>
        <programlisting role="example"><![CDATA[
grand(10,1,"uin",1,365)
 ]]></programlisting>
        <para>
            In the following example, we generate 12 permutations of the [1,2,...,7] set.
            The 12 permutations are stored column by column.
        </para>
        <programlisting role="example"><![CDATA[
grand(12,"prm",(1:7)')
 ]]></programlisting>
        <para>
            In the following example, we generate a
            <literal>10</literal>×<literal>10</literal>×<literal>10</literal>
            hypermatrix of random numbers from the "normal" distribution and plot the associated histograms.
            Showing the first and last layers.
        </para>
        <programlisting role="example"><![CDATA[
// Returns a 10 x 10 x 10 hypermatrix of random doubles,
// with normal distribution, average 0 and standard deviation 1.
// Showing the first and last layers.
R = grand(10,10,10,"nor",0,1);

subplot(1,2,1)
bar3d(R(:,:,1));
xtitle("Layer 1");
subplot(1,2,2)
bar3d(R(:,:,10));
xtitle("Layer 10");
 ]]></programlisting>
        <scilab:image localized="true">
            R = grand(10,10,10,"nor",0,1);
            subplot(1,2,1)
            bar3d(R(:,:,1));
            xtitle("Layer 1");
            subplot(1,2,2)
            bar3d(R(:,:,10));
            xtitle("Layer 10");
        </scilab:image>
    </refsection>
    <refsection>
        <title>Get predictable or less predictable numbers</title>
        <para>
            The pseudo random number generators are based on deterministic sequences.
            In order to get reproducible simulations, the initial seed of the generator is constant,
            such that the sequence will remain the same from a session to the other.
            Hence, by default, the first numbers produced by <function>grand</function> are always
            the same.
        </para>
        <para>
            In some situations, we may want to initialize the seed of the generator in
            order to produce less predictable numbers.
            In this case, we may initialize the seed with the output of the <function>getdate</function> function:
        </para>
        <programlisting role="example"><![CDATA[
n = getdate("s");
grand("setsd",n)
    ]]></programlisting>
    </refsection>
    <refsection>
        <title>clcg4のテスト例</title>
        <para>
            clcg4 の分割機能の適用例を以下に示します.
            2つの統計上のテクニックを異なるデータの大きさで比較します.
            最初の手法では,ブートストラップ手法を使用し,しらみつぶし法のみを適用する
            2番目の手法よりも少ないデータで同等の精度が得られると考えられます.
            最初の方法の場合,25および50の間に一様分布する大きさのデータ集合が生成されます.
            その後,指定した大きさのデータ集合が生成され,解析されます.
            2番目の方法は,
            100および200の間の大きさのデータ集合を選択し,データを生成し,解析します.
            この過程を1000回繰り返します.
            分散を減少させるために,2つの手法で使用される乱数を1000回の比較の各回で
            同じとすることが望まれます.
            しかし,2番目の手法は1番目の手法よりも多くの乱数を使用し,
            このパッケージなしでは同期は困難となります.
            clcg4 ではこれは容易です.
            生成器 0 を使用し最初の手法のサンプルの大きさを取得し,
            生成器 1 をデータを得る際に使用します.
            次にカレントのブロックの先頭に状態をリセットし,
            2番目の手法にも同様のことをします.
            これにより,2番目の手法で使用される初期データが1番目の手法で使用されることが
            保証されます.
            両方の処理が完了した時,両方の生成器のブロックを前に進めます.
        </para>
    </refsection>
    <refsection role="see also">
        <title>参照</title>
        <simplelist type="inline">
            <member>
                <link linkend="rand">rand</link>
            </member>
            <member>
                <link linkend="sprand">sprand</link>
            </member>
            <member>
                <link linkend="ssrand">ssrand</link>
            </member>
            <member>
                <link linkend="randpencil">randpencil</link>
            </member>
            <member>
                <link linkend="genmarkov">genmarkov</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
