/// <summary> /// Wyznacza nowy zagregowany rozkład na podstawie istniejącego oraz nowej klasy zgłoszeń /// </summary> /// <param name="klasa">Nowa, agregowana klasa zgłoszeń</param> /// <returns></returns> public override Rozklad zagregujKlase(trClass klasa) { if (zagregowaneKlasy.Count == 0) { return(new rGammaYc2(wiazka, klasa)); } rGammaYc2 wynik = new rGammaYc2(this); Rozklad p = new Rozklad(wiazka, klasa, true); // Wyznaczanie średniej liczby obsługiwanych zgłoszeń liczYspl(wiazka.sigmy, wiazka.V); //Operacja splotu double[][] prDopKomb = rGammaYc2.wyznGamma(this, p, klasa, wiazka.sigmy, V, yi); double[] stany = new double[V + 1]; double suma = 0; for (int n = 0; n <= V; n++) { for (int lC = 0; lC <= n; lC++) { double tmp = this[lC] * p[n - lC] * prDopKomb[lC][n - lC]; suma += tmp; stany[n] += tmp; } } for (int n = 0; n <= V; n++) { wynik[n] = stany[n] / suma; } // Uaktualnianie rozkładów pomocniczych wynik.pi = new Rozklad[zagregowaneKlasy.Count + 1]; for (int i = 0; i < zagregowaneKlasy.Count; i++) { wynik.pi[i] = this.pi[i]; } wynik.pi[zagregowaneKlasy.Count] = p; wynik.Pmi = new Rozklad[zagregowaneKlasy.Count + 1]; for (int i = 0; i < zagregowaneKlasy.Count; i++) { wynik.Pmi[i] = Pmi[i].zagregujKlase(klasa); } wynik.Pmi[zagregowaneKlasy.Count] = Pmi[0].zagregujKlase(wiazka.ListaKlasRuchu[0]); wynik.zagregowaneKlasy.Add(klasa); return(wynik); }
/// <summary> /// Konstruktor kopiujący /// </summary> /// <param name="rozklad">Rozkład kopiowany</param> public rGammaYc2(rGammaYc2 kopiowany) : base(kopiowany) { pi = kopiowany.pi; Pmi = kopiowany.Pmi; }