数式がトんでたので、こちらに移動しました。
前回までに単位球面上、球体内で一様分布する点の座標を生成する PolarRandomGenerator クラスを作成しました(一覧)。 ただ、このクラスは実際には少々使い勝手が悪いかと思います。 問題点には以下のものがあります: コンストラクタに java.util.Random オブジェクトをセットするのが面倒 座標をセットする double の配列を使用側が用意しなければならない 座標の次元 n に1以下の整数が指定されたときの挙動が不明 球面・球体の半径が1に固定されている(単位球面、単位球体) これらの改善のために、PolarRandomGenerator に新にメソッド等を定義しても良いんですが、新に PolarRandom クラスを作成して、「本質的なアルゴリズム以外を PolarRandom クラスに処理させる」ことにしましょう。 PolarRandom クラスとコンストラク
今回は「単位球体内の一様分布」を生成するメソッド setPointInBall(double) を考えます(一覧)。 これは前回実装した「単位球面上の一様分布」を生成するメソッド setPointOnSphere(double, int) を使えば簡単に実装可能。 class PolarRandomGenerator{ private double nextDouble(){...} /** * @param x n 次元球体 (n >= 2) 内において、 * 一様分布するランダムな点の n 次元座標をセットする配列 */ public void setPointInBall(double[] x){ int n = x.length; setPointOnSphere(x, n); double r = pow(nextDouble(), 1.0/n); for(int i = 0;
今回は「単位球面上の一様分布」を生成するコードを考えます(一覧)。 setPointOnSphere(double x) メソッド:仕様 前回、宣言だけを示したメソッド setPointOnSphere(double x) をもう少し説明しましょう。 引数の double の配列(以下 x とする)は、PolarRandomGenerator オブジェクトによって「単位球面上に一様分布」する点の座標がセットされるオブジェクトです: double[] x = new double[3]; PolarRandomGenerator generator = new PolarRandomGenerator(new Random(1L)); generator.setPointOnSphere(x); // x に「単位球上に一様分布」する点の座標がセットされる ただし、x の長さを n としたと
前回、「一般次元の球体内・球面上の一様分布」を計算する公式を考えましたが、それを実際に Java で実装してみましょう。 今回は準備のみ(一覧)。 クラスとしては PolarRandomGenerator というのを作成し、その public メソッドとして setPointOnSphere(double[]):(n-1) 次元球面上に一様分布する点の座標を引数の配列にセットする setPointInBall(double[]):n 次元球面上に一様分布する点の座標を引数の配列にセットする を作成します。 メソッドの詳しい説明は次回以降に。 PolarRandomGenerator クラスの import 文 クラス宣言 コンストラクタ フィールド は下記のコードのようなっているとします。 次回以降のサンプルコードでは「import 文」や「nextXxxx() メソッド」を省略している場
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く