コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }