/// <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; //для КС Колмогорова } }
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)); } }
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); }