public static Wektor Jacobe(Macierz M, Wektor V, int p) { //Nasz wynik i pomoc do obliczania prezycji Wektor X1 = new Wektor(M.rozmiarMacierzy); Wektor X2 = new Wektor(M.rozmiarMacierzy); double suma = 0; X1.WyzerujWektor(); X2.WyzerujWektor(); double precyzja = Math.Pow(10, p); // nasza obliczona precyzja int rozmiar = M.rozmiarMacierzy; // Rozmiar macierzy wszystkie przypadki int z = 0; do { X1.SkopiujDo(X2); //X2=X1; // X1.WyswietlWektor(); for (int i = 0; i < rozmiar; i++) { suma = 0.0; for (int j = 0; j < rozmiar; j++) { if (i != j) { suma += M.macierz[i, j] * X2.wektor[j]; } } suma *= -1; suma = suma + V.wektor[i]; X1.wektor[i] = (double)(suma / M.macierz[i, i]); //Console.WriteLine("------------------"); } z++; // Console.WriteLine(z); } while (X1.ObliczBladZ(X2) > precyzja); //Blad to roznica wektora X1 i X2 return(X1); }
public static Wektor Seid(Macierz M, Wektor V, int p) //M=kopia / V=wektor kopia (same 0 i 1 na koncu) / p=precyzja na -10 itp { //Nasz wynik i pomoc do obliczania prezycji Wektor X1 = new Wektor(M.rozmiarMacierzy); Wektor X2 = new Wektor(M.rozmiarMacierzy); double suma1 = 0; double suma2 = 0; X1.WyzerujWektor(); X2.WyzerujWektor(); double precyzja = Math.Pow(10, p); // nasza obliczona precyzja int rozmiar = M.rozmiarMacierzy; // Rozmiar macierzy wszystkie przypadki do { X1.SkopiujDo(X2); //X2=X1 for (int i = 0; i < rozmiar; i++) { suma1 = 0.0; suma2 = 0.0; for (int j = 0; j < i; j++) { suma1 -= (M.macierz[i, j] * X1.wektor[j]); } for (int j = i + 1; j < rozmiar; j++) { suma2 -= (M.macierz[i, j] * X2.wektor[j]); } suma1 += suma2 + V.wektor[i]; X1.wektor[i] = suma1 / M.macierz[i, i]; } } while (X1.ObliczBladZ(X2) > precyzja); return(X1); }
static void Main(string[] args) { for (int rozmiar = 19; rozmiar <= 21; rozmiar++) { Macierz m1 = new Macierz(rozmiar); Macierz m2 = new Macierz(rozmiar); Wektor w1 = new Wektor(m1.rozmiarMacierzy); Wektor w2 = new Wektor(m1.rozmiarMacierzy); Wektor X = new Wektor(m1.rozmiarMacierzy); Wektor Z = new Wektor(m1.rozmiarMacierzy); string path = Path.GetFullPath("POPRAWNE.txt"); TimeSpan ts; Stopwatch stopWatch = new Stopwatch(); string elapsedTime; m1.OdejmijJedynki(); m1.SkopiujDo(m2); // m2.ZapiszDoPliku(); Gauss gauss = new Gauss(m1.macierz, w1.wektor, m2.macierz, w2.wektor, m1.rozmiarMacierzy); Console.WriteLine("MONTE CARLO----------------------------------------"); X = MonteCarlo.GenerujMonte(m2); X.WyswietlWektor(); //X.ZapiszDoPliku(); Console.WriteLine("JACOB----------------------------------------"); Z = Jacob.Jacobe(m2, w1, -6); Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("JACOB----------------------------------------"); Z = Jacob.Jacobe(m2, w1, -10); Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("JACOB----------------------------------------"); Z = Jacob.Jacobe(m2, w1, -14); Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("SEIDEL----------------------------------------"); Z = Seidel.Seid(m2, w1, -6); ts = stopWatch.Elapsed; Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("SEIDEL----------------------------------------"); Z = Seidel.Seid(m2, w1, -10); ts = stopWatch.Elapsed; Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("SEIDEL----------------------------------------"); Z = Seidel.Seid(m2, w1, -14); ts = stopWatch.Elapsed; Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("GAUSS Z CZESCIOWYM WYBOREM ELEMENTU PODSTAWOWEGO----------------------------------------"); Z = gauss.GaussCWP(); Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";"); // X.ZapiszDoPliku(); Console.WriteLine("GAUSS BEZ WYBORU ELEMENTU PODSTAWOWEGO----------------------------------------"); Z = gauss.GaussBWP(); Z.WyswietlWektor(); System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + "\r\n"); // X.ZapiszDoPliku(); } }