private double min(double sKvadrat, double alfa, int f) { chiKvadratAlfaPola = Distribucije.ChiKvadrat(alfa / 2, f); minimum = f * sKvadrat / chiKvadratAlfaPola; return(minimum); }
private double max(double sKvadrat, double alfa, int f) { chiKvadratJedanMinusAlfaPola = Distribucije.ChiKvadrat(1 - alfa / 2, f); maximum = f * sKvadrat / chiKvadratJedanMinusAlfaPola; return(maximum); }
/// <summary> /// <para/>Lokalni jednovarijantni test, otkrivanje grubih gresaka /// </summary> /// <param name="sKvadrat">A posteriori varijanca</param> /// <param name="v">Vektor popravaka mjerenja</param> /// <param name="Qv">Matrica kofaktora popravaka mjerenja</param> /// <param name="alfa">Nivo signifikantnosti</param> /// <param name="f">Broj prekobrojnosti</param> /// <exception cref="ArgumentException">Baca se kada matrica ili vektor nema odgovarajuce dimenzije</exception> /// <exception cref="ArgumentOutOfRangeException">Baca se kada nivo sifnifikantnosti nije u intervalu 0-1 ili je broj prekobrojnosti manji od 1</exception> public TauTest(double sKvadrat, DenseVector v, DenseMatrix Qv, double alfa, int f) { if (Qv.RowCount < Qv.ColumnCount) { throw new ArgumentException("Greska u dimenzijama matrice Qv(" + Qv.RowCount.ToString() + "x" + Qv.ColumnCount.ToString() + "). Broj redova mora biti veci od broja stupaca"); } else if (v.Count != Qv.ColumnCount) { throw new ArgumentException("Greska u dimenzijama matrice Qv(" + Qv.RowCount.ToString() + "x" + Qv.ColumnCount.ToString() + ") ili vektora v(" + v.Count.ToString() + "x1)"); } else if (alfa < 0 || alfa > 1) { throw new ArgumentOutOfRangeException("alfa", alfa, "Nivo signifikantnosti mora biti u intervalu 0 < alfa < 1"); } else if (f < 1) { throw new ArgumentOutOfRangeException("f", f, "Broj prekobrojnosti mora biti veci od nule"); } else { tauDistribucija = Distribucije.Tau(alfa, f); TestStatistika(sKvadrat, v, Qv); } }
/// <summary> /// <para/>Data Snooping (B-metoda), otkrivanje grubih gresaka /// </summary> /// <param name="sigmaNulaKvadrat">A priori varijanca izjednacenja</param> /// <param name="v">Vektor popravaka mjerenja</param> /// <param name="Ql">Matrica kofaktora mjerenja</param> /// <param name="R">Matrica unutrasnje pouzdanosti</param> /// <param name="alfa">Nivo signifikantnosti</param> /// <param name="beta">Snaga testa</param> /// <exception cref="ArgumentException">Baca se kada matrica ili vektor nema odgovarajuce dimenzije</exception> /// <exception cref="ArgumentOutOfRangeException">Baca se kada nivo sifnifikantnosti ili snaga testa nije u intervalu 0-1</exception> public DataSnooping(double sigmaNulaKvadrat, DenseVector v, DenseMatrix Ql, DenseMatrix R, double alfa, double beta) { if (Ql.RowCount < Ql.ColumnCount) { throw new ArgumentException("Greska u dimenzijama matrice Ql(" + Ql.RowCount.ToString() + "x" + Ql.ColumnCount.ToString() + "). Broj redova mora biti veci od broja stupaca"); } else if (R.RowCount != R.ColumnCount) { throw new ArgumentException("Greska u dimenzijama matrice R(" + R.RowCount.ToString() + "x" + R.ColumnCount.ToString() + "). Matrica mora biti kvadratna"); } else if (Ql.RowCount != R.RowCount) { throw new ArgumentException("Greska u dimenzijama matrice Ql(" + Ql.RowCount.ToString() + "x" + Ql.ColumnCount.ToString() + ") ili R(" + R.RowCount.ToString() + "x" + R.ColumnCount.ToString() + ")"); } else if (v.Count != R.ColumnCount) { throw new ArgumentException("Greska u dimenzijama matrice R(" + R.RowCount.ToString() + "x" + R.ColumnCount.ToString() + ") ili vektora v(" + v.Count.ToString() + "x1)"); } else if (alfa < 0 || alfa > 1) { throw new ArgumentOutOfRangeException("alfa", alfa, "Nivo signifikantnosti mora biti u intervalu 0 < alfa < 1"); } else if (beta < 0 || beta > 1) { throw new ArgumentOutOfRangeException("beta", beta, "Snaga testa mora biti u intervalu 0 < beta < 1"); } else { lambdaKorjen = Math.Sqrt(Distribucije.ParametarNecentralnosti(alfa, beta)); tVrijednost(sigmaNulaKvadrat, v, Ql, R); } }