public double GetSquare(double x1, double x2) { Function = UniversalDistributionFunction.Create(); if (x2 < x1) { throw new Exception("¬ерхн¤¤ граница интеграла не может быть меньше нижней границы интеграла"); } double s = Function.GetFunctionValue(x2) - Function.GetFunctionValue(x1); return s; }
//конструктор private UniversalDistributionFunction(List<Inflection> values) { func = this; Values = values; double control = 0; for (int i = 1; i < Values.Count; i++) { square.Add((Values[i].GetX - Values[i - 1].GetX) * (Values[i].GetY + Values[i - 1].GetY) / 2); control += square[i - 1]; } int tochnost = 10000;//настройка точности проверки 10000-до 4 знака, 1000 - до 3 знака включительно и т.д. if ((Math.Round(control * tochnost) / tochnost) != 1) { //Проверка на то, что суммарная вероятность около 1 throw new Exception("Суммарная вероятность должна быть равна 1\n"); } }
//конструктор заполняет внутренние поля public UniversalGenerator(int NumIntervals, List<Inflection> Values) { Function = UniversalDistributionFunction.Create(Values);//получаем экземпляр функции распределения Finder.Find(NumIntervals);//находим границы карманов Intervals = NumIntervals; }
public static UniversalDistributionFunction Create(List<Inflection> values) { func = new UniversalDistributionFunction(values); return func; }
private List<Inflection> Values = null; //массив точек перегиба #endregion Fields #region Constructors //конструктор private UniversalDistributionFunction() { func = this; }