コード例 #1
0
        public void ObliczWartosciBF(Rozklad R, sigmaPrzyjmZgl sigmyStruktury)
        {
            maksBladY = 0;
            double staryY;

            for (int i = 0; i < aWiazka.m; i++)
            {
                trClass tempKlasa = aWiazka.ListaKlasRuchu[i];
                int     tStart    = (tempKlasa.progiKlasy == null) ? tempKlasa.t : tempKlasa.progiKlasy[0].t;

                //for (int n = aWiazka.V; n >= tStart; n--)
                for (int n = tStart; n <= aWiazka.V; n++)
                {
                    staryY  = y[i, n];
                    y[i, n] = 0;
                    if (tempKlasa.progiKlasy == null)
                    {
                        int    t = tempKlasa.t;
                        double a = aWiazka.ListaKlasRuchu[i].a;
                        switch (tempKlasa.typ)
                        {
                        case trClass.typKlasy.ERLANG:
                            y[i, n] = R[n - t] / R[n] * a * aWiazka.ListaKlasRuchu[i].sigmaZgl(y[i, n - t]) * sigmyStruktury[i, n - t];
                            break;

                        case trClass.typKlasy.ENGSET:
                            y[i, n] = R[n - t] / R[n] * a * aWiazka.ListaKlasRuchu[i].sigmaZgl(y[i, n - t]) * sigmyStruktury[i, n - t];
                            break;

                        case trClass.typKlasy.PASCAL:
                            y[i, n] = R[n - t] / R[n] * a * aWiazka.ListaKlasRuchu[i].sigmaZgl(y[i, n - t]) * sigmyStruktury[i, n - t];
                            break;
                        }
                    }
                    else
                    {
                        for (int prNr = 0; prNr < tempKlasa.progiKlasy.liczbaPrzedziałow; prNr++)
                        {
                            int t       = tempKlasa.progiKlasy[prNr].t;
                            int popStan = n - t;
                            if (tempKlasa.progiKlasy.nrPrzedzialu(popStan) == prNr)
                            {
                                double a = tempKlasa.atProgi(popStan) / t;
                                y[i, n] += R[popStan] / R[n] * a * aWiazka.ListaKlasRuchu[i].sigmaZgl(y[i, popStan]) * sigmyStruktury[i, popStan];
                            }
                        }
                    }

                    double bladY = Math.Abs((y[i, n] - staryY) / y[i, n]);
                    if (bladY > maksBladY)
                    {
                        maksBladY = bladY;
                    }
                }
            }
        }
コード例 #2
0
        protected double[,] okrRozklad(Rozklad stany, liczbaY Y)
        {
            double[,] sigmy = new double[aWiazka.m, aWiazka.V + 1];
            stany[0]        = 1;
            double suma = 1;

            for (int n = 1; n <= aWiazka.V; n++)
            {
                stany[n] = 0;

                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasaTemp = aWiazka.ListaKlasRuchu[i];
                    if (klasaTemp.progiKlasy == null)
                    {
                        int t       = aWiazka.ListaKlasRuchu[i].t;
                        int PopStan = n - t;
                        if (PopStan >= 0)
                        {
                            sigmy[i, PopStan] = aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                            double temp = stany[PopStan] * klasaTemp.at;
                            temp     *= sigmaProcPrzyjmZgl[i, PopStan];
                            temp     *= aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                            stany[n] += temp;
                        }
                    }
                    else
                    {
                        for (int nrPrzedz = 0; nrPrzedz < klasaTemp.progiKlasy.liczbaPrzedziałow; nrPrzedz++)
                        {
                            int t       = aWiazka.ListaKlasRuchu[i].progiKlasy[nrPrzedz].t;
                            int PopStan = n - t;

                            if (PopStan >= 0)
                            {
                                if (klasaTemp.progiKlasy.nrPrzedzialu(PopStan) == nrPrzedz)
                                {
                                    sigmy[i, PopStan] = aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]);
                                    double at = klasaTemp.atProgi(PopStan);
                                    stany[n] += (at * stany[PopStan] * aWiazka.ListaKlasRuchu[i].sigmaZgl(Y[i, PopStan]) * sigmaProcPrzyjmZgl[i, PopStan]);
                                }
                            }
                        }
                    }
                }
                stany[n] /= n;
                suma     += stany[n];
            }
            for (int n = 0; n <= aWiazka.V; n++)
            {
                stany[n] = stany[n] / suma;
            }
            return(sigmy);
        }
コード例 #3
0
        protected override void okrRozklad()
        {
            stany[0] = 1;
            for (int i = 1; i <= aWiazka.V; i++)
            {
                stany[i] = 0;
            }
            double suma = 1;

            for (int n = 1; n <= aWiazka.V; n++)
            {
                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasaTemp = aWiazka.ListaKlasRuchu[i];
                    if (klasaTemp.progiKlasy == null)
                    {
                        int t       = aWiazka.ListaKlasRuchu[i].t;
                        int PopStan = n - t;
                        if (PopStan >= 0)
                        {
                            stany[n] += (aWiazka.ListaKlasRuchu[i].at * stany[PopStan] * sigmaProcPrzyjmowaniaZgloszen[i, n - t]);
                        }
                    }
                    else
                    {
                        for (int nrPrzedz = 0; nrPrzedz < klasaTemp.progiKlasy.liczbaPrzedziałow; nrPrzedz++)
                        {
                            int t       = aWiazka.ListaKlasRuchu[i].progiKlasy[nrPrzedz].t;
                            int PopStan = n - t;

                            if (PopStan >= 0)
                            {
                                if (klasaTemp.progiKlasy.nrPrzedzialu(PopStan) == nrPrzedz)
                                {
                                    double at = klasaTemp.atProgi(PopStan);
                                    stany[n] += (at * stany[PopStan] * sigmaProcPrzyjmowaniaZgloszen[i, PopStan]);
                                }
                            }
                        }
                    }
                }
                stany[n] /= n;
                suma     += stany[n];
            }
            for (int i = 0; i <= aWiazka.V; i++)
            {
                stany[i] /= suma;
            }
        }
コード例 #4
0
        public void ObliczYspl(Rozklad[] P_minusI, Rozklad[] p, Rozklad P)
        {
            _Y.Inicjalizacja();
            _Y.ObliczWartossciZeSplotu(P_minusI, p);

            if (oszacowana == false)
            {
                _delta = new double[aWiazka.V + 1];
                sStruktury.obliczSigmy();
                oszacowana = true;
            }
            double licznik;
            double mianownik;
            double sigmaZgl;
            double sigmaStr;

            for (int n = 0; n <= aWiazka.V; n++)
            {
                mianownik = 0;
                licznik   = 0;
                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasa = aWiazka.ListaKlasRuchu[i];
                    if (klasa.progiKlasy == null)
                    {
                        int t = klasa.t;
                        if (n - t > 0)
                        {
                            sigmaZgl = klasa.sigmaZgl(_Y[i, n - t]);
                            sigmaStr = sStruktury[i, n - t];

                            licznik   += (_delta[n - t] * klasa.at * sigmaZgl * sigmaStr * P[n - t]);
                            mianownik += (aWiazka.ListaKlasRuchu[i].at * P[n - t] * sigmaZgl);
                        }
                        else
                        {
                            licznik   += (aWiazka.ListaKlasRuchu[i].at);
                            mianownik += (aWiazka.ListaKlasRuchu[i].at);
                        }
                    }
                    else
                    {
                        int t = klasa.progiKlasy.Przedzial(n).t;
                        if (n - t > 0)
                        {
                            licznik   += (_delta[n - t] * klasa.atProgi(n - t) * klasa.sigmaZgl(_Y[i, n - t]) * sStruktury[i, n - t] * P[n - t]);
                            mianownik += (klasa.atProgi(n - t) * P[n - t] * klasa.sigmaZgl(_Y[i, n - t]));
                        }
                        else
                        {
                            licznik   += (klasa.atProgi(n - t));
                            mianownik += (klasa.atProgi(n - t));
                        }
                    }
                }
                _delta[n] = licznik / mianownik;
                if (mianownik == 0)
                {
                    _delta[n] = 1;
                }
            }
        }