システムを使用する;
namespace Legalsoft.Truffer
{ public class Poissondist : Gamma { private double lam { get; セット; }
public Poissondist(double llam)
{ this.lam = llam; if (lam <= 0.0) { throw new Exception("ポアソンド主義の悪いラム"); } }
public double p(int n)
{ if (n < 0) { throw new Exception("ポアソンディストの悪い n"); return Math.Exp(-lam + n * Math.Log(lam) - Globals.gammln(n + 1.0)); }
public double cdf(int n)
{ if (n < 0) { throw new Exception("ポアソンディストの悪い n"); if (n == 0) { 0.0 を返します。 gammq((double)n, lam) を返します 。 }
public int invcdf(double p)
{ int inc = 1; if (p <= 0.0 || p >= 1.0) { throw new Exception("ポアソンディストの悪い p"); if (p < Math.Exp(-lam)) { 0 を返します。 int n = (int)Math.Max(Math.Sqrt ( lam), 5.0); int nl; int nu; if (p < cdf(n)) { do { n = Math.Max(n - inc, 0); inc *= 2;
while (p < cdf(n));
nl = n;
nu = n + 増加 / 2;
}
else
{ do { n += inc; inc *= 2; while (p > cdf(n)); nu = n; nl = n - 増加 / 2; } while (nu - nl > 1) { n = (nl + nu) / 2; if (p < cdf(n)) { nu = n; その他 _
{ nl = n; nlを 返し ます。 } } }