/// <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 rGammaYc1(wiazka, klasa)); } rGammaYc1 wynik = new rGammaYc1(this); Rozklad q = new Rozklad(wiazka, klasa, true); // Wyznaczanie średniej liczby obsługiwanych zgłoszeń liczYspl(wiazka.sigmy, wiazka.V); //Operacja splotu double[][] prDopKomb = rGammaYc1.wyznGamma(this, q, 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] * q[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.qi = new Rozklad[zagregowaneKlasy.Count + 1]; for (int i = 0; i < zagregowaneKlasy.Count; i++) { wynik.qi[i] = this.qi[i]; } wynik.qi[zagregowaneKlasy.Count] = q; wynik.Qmi = new rGammaYc1[zagregowaneKlasy.Count + 1]; for (int i = 0; i < zagregowaneKlasy.Count; i++) { wynik.Qmi[i] = Qmi[i].zagregujKlase(klasa) as rGammaYc1; } wynik.Qmi[zagregowaneKlasy.Count] = this; wynik.zagregowaneKlasy.Add(klasa); return(wynik); }
public rGammaYc1(Wiazka rWiazka, trClass klasa) : base(rWiazka, klasa, true) { zagregowaneKlasy = new List <trClass>(); zagregowaneKlasy.Add(klasa); this.wiazka = rWiazka; qi = new Rozklad[1]; qi[0] = new Rozklad(rWiazka, zagregowaneKlasy[0], true); Qmi = new rGammaYc1[1]; Qmi[0] = new rGammaYc1(rWiazka); //Ten rozkład jest pusty. }
/// <summary> /// Konstruktor kopiujący /// </summary> /// <param name="rozklad">Rozkład kopiowany</param> public rGammaYc1(rGammaYc1 kopiowany) : base(kopiowany) { qi = kopiowany.qi; Qmi = kopiowany.Qmi; }