/// <summary> /// Tworzy macierz kwadratową (dolnotrójkątną) wielkości równej ilości liczb. /// (W późniejszych etapach gdy ta macierz będzie się pomniejszać, /// jej wielkość będzie logicznie określać zmienna "liczbaGrup".) /// Macierz wypełniana jest odległością euklidesową między każdą parą liczb. /// </summary> private void SkonstruujMacierzOdległościMiędzyklastrowej() { liczbaGrup = liczby.Length; macierzOdległościMiędzyklastrowej = new double[liczbaGrup][]; for (int i = 0; i < liczbaGrup; ++i) { macierzOdległościMiędzyklastrowej[i] = new double[liczbaGrup]; Array.Clear(macierzOdległościMiędzyklastrowej[i], 0, liczbaGrup); } PrzejrzyjMacierz((i, j) => { macierzOdległościMiędzyklastrowej[i][j] = FunkcjeMatematyczne.OdległośćEuklidesowa(liczby[i], liczby[j]); }); }
/// <summary> /// Na podstawie wybranej wcześniej metody skupień liczy odległości między klastrami. /// </summary> /// <param name="A">Pierwszy klaster</param> /// <param name="B">Drugi klaster</param> /// <returns>Odległość między klastrami</returns> private double PoliczOdległośćMiędzyKlastrami(double[] A, double[] B) { switch (metoda) { case MetodaSkupień.PojedynczegoPołączenia: return(FunkcjeMatematyczne.MetodaPojedynczegoPołączenia(ref A, ref B)); case MetodaSkupień.CałkowitegoPołączenia: return(FunkcjeMatematyczne.MetodaCałkowitegoPołączenia(ref A, ref B)); case MetodaSkupień.CentroidalnegoPołączenia: return(FunkcjeMatematyczne.MetodaCentroidalnegoPołączenia(ref A, ref B)); case MetodaSkupień.ŚrednichGrupowych: default: return(FunkcjeMatematyczne.MetodaŚrednichGrupowych(ref A, ref B)); } }