예제 #1
0
        /// <summary>
        /// функция которая рисует на левом графике график плотности, а на правом
        /// теоретическую ф-ю распеределения + вернюю и нижнюю интервальные оценки
        /// </summary>
        public void VisualizeDistribution(IReproductable Distr, Series plotn,
                                          Series teor, Series niz, Series verh)
        {
            _ReproductDistribution = Distr as OneDimentionalDistribution;

            var dSortedCopy = d.OrderBy(x => x).ToArray();

            for (int i = 0; i < d.Length; i++)
            {
                double x = dSortedCopy[i];

                double f = Distr.f(x);       //еще нужно применить ф-ю нормализации - obr

                double F = Distr.F(x);       //еще нужно применить ф-ю нормализации - obr

                double DF = Distr.DF(x);

                plotn.Points.AddXY(x, f * h);

                teor.Points.AddXY(x, F);

                niz.Points.AddXY(x, F - Kvantili.Normal(p) * Math.Sqrt(DF));

                verh.Points.AddXY(x, F + Kvantili.Normal(p) * Math.Sqrt(DF));

                _FTeor[i] = F;       //для КС Колмогорова
            }
        }
예제 #2
0
        private double AutoKvantilToIntervalAppraisal()
        {
            double alpha = 1 - gamma;

            if (d.Length > 60)
            {
                return(Kvantili.Normal(alpha / 2));
            }
            else
            {
                return(Kvantili.Student(alpha / 2, d.Length - 1));
            }
        }
예제 #3
0
        public string KZPirsona()
        {
            AlphaForKZKolmogorov = 0.05;

            double min = 0;
            double max = 0;
            double sum = 0;

            for (int i = 0; i < M; i++)
            {
                min = Min + h * i;
                max = min + h;

                double n0 = _ReproductDistribution.F(max) - _ReproductDistribution.F(min);

                n0 *= d.Length;

                double ni = masY[i];

                sum += Math.Pow((ni - n0), 2) / n0;
            }

            string result = "";
            double kv     = Kvantili.Hi2(AlphaForKZKolmogorov, M - 1);

            Action <string>       add2log = v => result += v + Environment.NewLine;
            Func <double, double> r       = v => Math.Round(v);

            add2log("kv = " + r(kv));
            add2log("sum = " + r(sum));
            if (sum < kv)
            {
                add2log("sum < kv");
                add2log("Пройдено");
            }
            else
            {
                add2log("sum >= kv");
                add2log("Не пройдено");
            }
            System.Windows.Forms.MessageBox.Show(result);

            return(result);
        }