public VariationalSeriesBuilder(STAT[] stats) { this.stats = stats; //измерения dimentions = stats.Length; //заполнение массивов шагов и кол-ва вариант в одномерном случае по измерению h = new double[dimentions]; M = new int[dimentions]; for (int i = 0; i < dimentions; i++) { h[i] = stats[i].h; M[i] = stats[i].M; } //создание многомерного массива array = Array.CreateInstance(typeof(VarintInSeries), M); //кол-во наблюдений N = stats[0].d.Length; //по каждой строке for (int i = 0; i < N; i++) { //индексы многомерного массива int[] indexes = new int[dimentions]; //по каждому признаку //выясняем индексы варианты в многомерном ряде for (int j = 0; j < dimentions; j++) { STAT currenStat = stats[j]; indexes[j] = (int)Math.Truncate((currenStat.d[i] - currenStat.Min) / h[j]); } //работа с самоц вариантой VarintInSeries CurrentVariant = array.GetValue(indexes) as VarintInSeries; if (CurrentVariant == null) { array.SetValue(new VarintInSeries() { n = 1, p = 1d / N }, indexes); } else { CurrentVariant.Add(N); } } }
public string OutputAllVariationalSeries() { string res = ""; var i = 0; foreach (VarintInSeries item in array) { var coords = IndexToCoordinates(i++); VarintInSeries CurrentVariant = array.GetValue(coords) as VarintInSeries; if (CurrentVariant == null) { continue; } //Console.WriteLine(string.Join(", ", coords)); Func <double, double> r = v => Math.Round(v, 4); res += "("; for (int j = 0; j < dimentions; j++) { var bottomValue = coords[j] * h[j] + stats[j].Min; var topValue = bottomValue + h[j]; res += r(bottomValue); res += " - "; res += r(topValue); if (j != dimentions - 1) { res += "; \t"; } } res += ")"; res += string.Format("\t\tn = {0}\t\tp = {1:0.000}{2}", CurrentVariant.n, CurrentVariant.p, Environment.NewLine); } return(res); }