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