/// <summary> /// Конструктор по одному из основных распределений с двумя аргументами /// </summary> /// <param name="Type"></param> /// <param name="m"></param> /// <param name="D"></param> public ConRandVal(BasisDistribution Type, double m, double D) { switch (Type) { //Нормальное распределение case BasisDistribution.Normal: this.f = (double s) => { return(1.0 / Math.Sqrt(1 * Math.PI * D) * Math.Exp(-1.0 / 2 / D * (s - m) * (s - m))); }; this.m = m; this.d = D; this.F = (double x) => { return(FuncMethods.DefInteg.Simpson((double t) => { return Math.Exp(-t * t / 2); }, 0, x)); }; return; //Равномерное распределение case BasisDistribution.Uniform: this.f = (double s) => { return(1.0 / (D - m)); }; this.m = (D + m) / 2; this.d = (D - m) * (D - m) / 12; this.F = (double s) => { if (s < m) { return(0); } if (m < s && s <= D) { return((s - m) / (D - m)); } return(1); }; return; //Распределение Пуассона case BasisDistribution.Puasson: int m_new = (int)m; double tmp = Math.Exp(-D); this.f = (double s) => { return(Math.Pow(D, m_new) / Combinatorik.P(m_new) * tmp); }; this.m = D; this.d = D; return; default: throw new Exception("Такого конструктора не существует"); } }
} //по плотности распределения /// <summary> /// Конструктор копирования /// </summary> /// <param name="S"></param> public ConRandVal(ConRandVal S) { this.f = S.f; this.F = S.F; this.x = S.x; this.TypeValue = S.TypeValue; }