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; } } } }
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); }
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; } }
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; } } }