/// <summary> /// проверка на соответствие нормальному закону распределния ряда. озвращая критерий согласия Пирсона для этого ряда /// http://www.ekonomstat.ru/kurs-lektsij-po-teorii-statistiki/403-proverka-sootvetstvija-rjada-raspredelenija.html /// https://life-prog.ru/2_84515_proverka-po-kriteriyu-hi-kvadrat.html критерий пирсона /// https://math.semestr.ru/group/example-normal-distribution.php для нормального распределения /// </summary> /// <param name="range">ряд</param> /// <param name="parameter">проверяемый параметр</param> /// <returns></returns> private static double checkNormalLaw(RawRange range, MeteorologyParameters parameter) { GradationInfo <GradationItem> grads; switch (parameter) { case MeteorologyParameters.Speed: grads = new GradationInfo <GradationItem>(0, SPEED_GRADATION_STEP, range.Max((item) => { return(item.Speed); })); //градации скорости break; case MeteorologyParameters.Direction: StatisticalRange <WindDirections16> srwd = StatisticEngine.GetDirectionExpectancy(range, GradationInfo <WindDirections16> .Rhumb16Gradations); return(0); case MeteorologyParameters.Temperature: grads = new GradationInfo <GradationItem>(0, TEMPERATURE_GRADATION_STEP, range.Max((item) => { return(item.Temperature); })); //градации температуры break; case MeteorologyParameters.Wetness: grads = new GradationInfo <GradationItem>(0, WETNESS_GRADATION_STEP, range.Max((item) => { return(item.Wetness); })); //градации влажности break; default: throw new WindEnergyException("Этот параметр не реализован"); } //РАСЧЕТ ДЛЯ ВСЕХ, КРОМЕ НАПРАВЛЕНИЙ StatisticalRange <GradationItem> stat_range = StatisticEngine.GetExpectancy(range, grads, parameter); //статистический ряд // TODO: расчет критерия пирсона для ряда return(0); }
/// <summary> /// создаёт статистический ряд из ряда наблюдений по заданным интервалам (градациям) /// </summary> /// <param name="range"></param> /// <param name="gradation"></param> public StatisticalRange(List <double> range, GradationInfo <T> gradation) { Gradation = gradation; Keys = new List <object>(); Values = new List <double>(); RangeCount = range.Count; foreach (object g in gradation.Items) { Keys.Add(g); Values.Add(0); } loadRange(range); }
/// <summary> /// получить статистический ряд по заданным значениям и заданным градациям /// </summary> /// <param name="tempr"></param> /// <param name="rhumb8Gradations"></param> /// <returns></returns> public static StatisticalRange <WindDirections8> GetDirectionExpectancy(RawRange tempr, GradationInfo <WindDirections8> rhumb8Gradations) { List <double> spds = new List <double>(from t in tempr select t.Direction); StatisticalRange <WindDirections8> r = new StatisticalRange <WindDirections8>(spds, rhumb8Gradations); return(reorganizeCalm(r)); }
/// <summary> /// получить статистический ряд по заданным значениям и заданным градациям /// </summary> /// <param name="range"></param> /// <param name="gradations"></param> /// <param name="parameter"></param> /// <returns></returns> public static StatisticalRange <GradationItem> GetExpectancy(IList <RawItem> range, GradationInfo <GradationItem> gradations, MeteorologyParameters parameter = MeteorologyParameters.Speed) { List <double> rang; switch (parameter) { case MeteorologyParameters.Speed: rang = new List <double>(from t in range select t.Speed); break; case MeteorologyParameters.Direction: rang = new List <double>(from t in range select t.Direction); break; case MeteorologyParameters.Temperature: rang = new List <double>(from t in range select t.Temperature); break; case MeteorologyParameters.Wetness: rang = new List <double>(from t in range select t.Wetness); break; default: throw new WindEnergyException("Этот параметр не реализован"); } StatisticalRange <GradationItem> r = new StatisticalRange <GradationItem>(rang, gradations); return(r); }