2008年12月10日水曜日

分布いろいろ

ね、眠い。意識がもーろー。

やっぱり3D描画中にドッキング状態を変更すると落ちる問題は保留するしかなさそう。

出来高は、デバッグ表示させた出来高とはっちゅう君にはじめから入っている相場情報表示ツールが表示する出来高が完全に一致するようになったのでもう問題はないだろう。

これらの作業の最中にシミュレーションで出来高を少しそれらしく生成する必要が出てきたので分布を作る関数を一通りそろえた。幾何分布はスキップリストの時に作ったけど。実務アプリでここまで確率論するとは思わなかった。

private double normalDistribution(double average, double standardDeviation)
{
double R = Math.Sqrt(-2 * Math.Log(1.0 - randomForFakeData.NextDouble()));
double T = 2 * Math.PI * randomForFakeData.NextDouble();
double X = R * Math.Cos(T);

return X * standardDeviation + average;
}
private int geometricalDistribution(double p, int n)
{
return Enumerable.Repeat(1, n)
.TakeWhile((i) => (randomForFakeData.NextDouble() < p))
.Sum();
}
private double canonicalDistribution(double average)
{
double beta = 1.0 / average;
return Math.Log(1 - randomForFakeData.NextDouble()) / (-beta);
}
private int poisonDistribution(double perSec, double milliSec)
{
//発生数の平均値
double lambda = perSec * (milliSec / 1000.0);
//正規分布で近似
return (int)Math.Round(Math.Max(0.0, normalDistribution(lambda, Math.Sqrt(lambda))));
}

0 件のコメント: