Пример #1
0
        public void ObliczDeltaZy(Rozklad P)
        {
            if (oszacowana == false)
            {
                _delta = new double[aWiazka.V + 1];
                sStruktury.obliczSigmy();
                oszacowana = true;
            }
            if (_Y == null)
            {
                throw (new Exception("Brak Y"));
            }

            for (int n = 0; n <= aWiazka.V; n++)
            {
                _delta[n] = 0;
                double mian = 0;
                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasaTemp = aWiazka.ListaKlasRuchu[i];
                    if (klasaTemp.progiKlasy == null)
                    {
                        int t = aWiazka.ListaKlasRuchu[i].t;
                        if (n - t >= 0)
                        {
                            _delta[n] += (_delta[n - t] * klasaTemp.at * klasaTemp.sigmaZgl(_Y[i, n - t]) * sStruktury[i, n - t] * P[n - t]);
                            mian      += (klasaTemp.at * klasaTemp.sigmaZgl(_Y[i, n - t]) * P[n - t]);
                        }
                        else
                        {
                            _delta[n] += (klasaTemp.at);
                            mian      += (klasaTemp.at);
                        }
                    }
                    else
                    {
                        for (int nrPrzedz = 0; nrPrzedz < klasaTemp.progiKlasy.liczbaPrzedziałow; nrPrzedz++)
                        {
                            int    t  = klasaTemp.progiKlasy[nrPrzedz].t;
                            double at = klasaTemp.atProgiPrzedzialu(nrPrzedz);
                            if (n - t >= 0)
                            {
                                //jeśli przedziały są różne, to dla tego przedziału nie ma przejścia
                                double sigma_T = klasaTemp.sigmaZgl(_Y[i, n - t]);
                                double sigma_S = sStruktury[i, n - t];
                                if (klasaTemp.progiKlasy.nrPrzedzialu(n - t) == nrPrzedz)
                                {
                                    _delta[n] += (_delta[n - t] * at * sigma_T * sigma_S * P[n - t]);
                                }
                                mian += (at * P[n - t] * sigma_T);
                            }
                            else
                            {
                                if (klasaTemp.progiKlasy.nrPrzedzialu(n - t) == nrPrzedz)
                                {
                                    _delta[n] += (at);
                                }
                                mian += (at);
                            }
                        }
                    }
                }
                if (mian != 0)
                {
                    _delta[n] /= mian;
                }
                else
                {
                    _delta[n] = 1;
                }
            }
        }
Пример #2
0
        public double Oblicz(Rozklad P)
        {
            _Y.Inicjalizacja();

            _delta     = new double[aWiazka.V + 1];
            oszacowana = true;
            sStruktury.obliczSigmy();

            for (int n = 0; n <= aWiazka.V; n++)
            {
                _delta[n] = 0;
                double mian = 0;
                for (int i = 0; i < aWiazka.m; i++)
                {
                    trClass klasaTemp = aWiazka.ListaKlasRuchu[i];
                    if (klasaTemp.progiKlasy == null)
                    {
                        int t = klasaTemp.t;
                        if (n - t >= 0)
                        {
                            _delta[n] += (_delta[n - t] * klasaTemp.at * sStruktury[i, n - t] * P[n - t]);
                            mian      += (klasaTemp.at * P[n - t]);
                        }
                        else
                        {
                            _delta[n] += (klasaTemp.at);
                            mian      += (klasaTemp.at);
                        }
                    }
                    else
                    {
                        for (int nrPrzedz = 0; nrPrzedz < klasaTemp.progiKlasy.liczbaPrzedziałow; nrPrzedz++)
                        {
                            int    t  = klasaTemp.progiKlasy[nrPrzedz].t;
                            double at = klasaTemp.atProgiPrzedzialu(nrPrzedz);
                            if (n - t >= 0)
                            {
                                //jeśli przedziały są różne, to dla tego przedziału nie ma przejścia
                                if (klasaTemp.progiKlasy.nrPrzedzialu(n - t) == nrPrzedz)
                                {
                                    _delta[n] += (_delta[n - t] * at * sStruktury[i, n - t] * P[n - t]);
                                }
                                mian += (at * P[n - t]);
                            }
                            else
                            {
                                if (klasaTemp.progiKlasy.nrPrzedzialu(n - t) == nrPrzedz)
                                {
                                    _delta[n] += (at);
                                }
                                mian += (at);
                            }
                        }
                    }
                }
                if (mian != 0)
                {
                    _delta[n] /= mian;
                }
                else
                {
                    _delta[n] = 0;
                }
            }
            return(_Y.epsilon);
        }