private double[,] obliczSigmyOgrDostUogolniony() { double[,] sigmyTemp = new double[aWiazka.m, aWiazka.V + 1]; dwumianNewtona dwumian = new dwumianNewtona(1); for (int i = 0; i < aWiazka.m; i++) { int t = aWiazka.ListaKlasRuchu[i].t; Rozklad[] rozkladyAlfa = new Rozklad[aWiazka.ListaPodgrupLaczy.Count]; Rozklad[] rozkladyBeta = new Rozklad[aWiazka.ListaPodgrupLaczy.Count]; for (int nrPodgr = 0; nrPodgr < aWiazka.ListaPodgrupLaczy.Count; nrPodgr++) { int v = aWiazka.ListaPodgrupLaczy[nrPodgr].v; int k = aWiazka.ListaPodgrupLaczy[nrPodgr].k; double[] stanyAlfa = new double[v + 1]; double[] stanyBeta = new double[v + 1]; for (int l = 0; l <= v; l++) { stanyAlfa[l] = dwumian.F(l, k, v, 0); stanyBeta[l] = dwumian.F(l, k, t - 1, 0); } rozkladyAlfa[nrPodgr] = new Rozklad(aWiazka, aWiazka.ListaKlasRuchu[0], stanyAlfa, v); rozkladyBeta[nrPodgr] = new Rozklad(aWiazka, aWiazka.ListaKlasRuchu[0], stanyBeta, v); } Rozklad rAlfa = new Rozklad(rozkladyAlfa[0]); Rozklad rBeta = new Rozklad(rozkladyBeta[0]); for (int j = 1; j < aWiazka.ListaPodgrupLaczy.Count; j++) { rAlfa = rAlfa * rozkladyAlfa[j]; rBeta = rBeta * rozkladyBeta[j]; } for (int n = 0; n <= aWiazka.V; n++) { if ((aWiazka.V - aWiazka.sumaK * (aWiazka.tMax - 1) > n) || (rAlfa[aWiazka.V - n] == 0)) { sigmyTemp[i, n] = 1; } else { sigmyTemp[i, n] = (rAlfa[aWiazka.V - n] - rBeta[aWiazka.V - n]) / rAlfa[aWiazka.V - n]; } } } return(sigmyTemp); }
private double[,] obliczSigmyOgrDost() { double[,] sigmyTemp = new double[aWiazka.m, aWiazka.V + 1]; dwumianNewtona dwumian = new dwumianNewtona(aWiazka.V); int k = aWiazka.sumaK; for (int i = 0; i < aWiazka.m; i++) { for (int n = 0; n <= aWiazka.V; n++) { int t = (aWiazka.ListaKlasRuchu[i].progiKlasy == null) ? aWiazka.ListaKlasRuchu[i].t : aWiazka.ListaKlasRuchu[i].progiKlasy.Przedzial(n).t; int x = aWiazka.V - n; if (x > (t - 1) * k) { sigmyTemp[i, n] = 1; } else { sigmyTemp[i, n] = 1 - dwumian.F(x, k, t - 1, 0) / dwumian.F(x, k, aWiazka.ListaPodgrupLaczy[0].v, 0); } } } return(sigmyTemp); }