Ejemplo n.º 1
0
        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;
        }