Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <string>
- #include <fstream>
- #include<cstdlib>
- using namespace std;
- //maksymalny rozmiar macierzy
- #define MAX 100
- //Dane początkowe
- int N;//rozmiar macierzy
- int MLI;//maksymalna liczba iteracji
- double e;//dokładność e
- //Macierze i wektory wykorzystywane w programie
- double Macierz_A[MAX][MAX];
- double Wektor_B[MAX];
- double Wektor_X[MAX];
- double Macierz_Alfa[MAX][MAX];
- double Wektor_Beta[MAX];
- double Wektor_R[MAX];
- double Wektor_Pierwszej_Poprawki[MAX];
- bool wczytaj_Z_Pliku_Wejsciowego(string fileName)//wczytuje macierz A oraz wektory B i X
- {
- //wprowadzenie danych początkowych
- cout << "Wprowadz N: ";
- cin >> N;
- cout << "Wprowadz MLI: ";
- cin >> MLI;
- cout << "Wprowadz e: ";
- cin >> e;
- //otwarcie pliku tekstowego
- ifstream plik;
- plik.open(fileName);
- double bufor;
- if (!plik.is_open())//jeśli nie udało się otworzyć pliku
- {
- cout << "Nie odnaleziono pliku wejściowego!" << endl;
- return false;
- }
- else
- {
- for (int i = 0; i < N; i++)//wczytanie macierzy A
- {
- for (int j = 0; j < N; j++)
- {
- plik >> bufor;
- Macierz_A[i][j] = bufor;
- }
- }
- for (int i = 0; i < N; i++)//wczytanie wektora B
- {
- plik >> bufor;
- Wektor_B[i] = bufor;
- }
- for (int i = 0; i < N; i++)//wczytanie wektora X
- {
- plik >> bufor;
- Wektor_X[i] = bufor;
- }
- return true;
- }
- }
- void drukuj_Dane_Wejsciowe()
- {
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- {
- cout << Macierz_A[i][j] << " ";
- }
- cout << endl;
- }
- cout << endl << endl << "Wektor B" << endl;;
- for (int i = 0; i < N; i++)
- cout << Wektor_B[i] << " ";
- cout << endl << endl << "Wektor X" << endl;
- for (int i = 0; i < N; i++)
- cout << Wektor_X[i] << " ";
- }
- void stworz_Macierz_Alfa()//tworzenie macierzy alfa
- {
- bool dzielenie_przez_zero = false;
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- {
- if (i == j)
- {
- Macierz_Alfa[i][j] = 0;
- }
- else
- {
- if (Macierz_A[i][i] == 0)//jeżeli zero w mianowniku
- {
- cout << "Blad dzielenia przez zero" << endl;
- dzielenie_przez_zero = true;
- break;
- }
- else
- {
- Macierz_Alfa[i][j] = -Macierz_A[i][j] / Macierz_A[i][i];
- }
- }
- }
- if (dzielenie_przez_zero)//jeżeli wystšpi dzielenie przez zero
- break;
- }
- }
- void stworz_Wektor_Beta()//tworzenie wektora beta
- {
- for (int i = 0; i < N; i++)
- {
- if (Macierz_A[i][i] == 0)//jeżeli zero w mianowniku
- {
- cout << "Blad dzielenia przez zero" << endl;
- break;
- }
- else
- {
- Wektor_Beta[i] = Wektor_B[i] / Macierz_A[i][i];
- }
- }
- }
- int funkcja_Glowna_Algorytmu()//funkcja wykonująca iterajce i testujaca warunek stopu
- {
- int a = 0;
- for (int i = 0; i < N; i++)//tworzenie tablicy
- {
- if (Wektor_X[i] == 0)
- {
- a++;
- }
- }
- if (a == N)//wektor X jest zerowy
- {
- cout << "WEKTOR JEST ZEROWY" << endl;
- for (int i = 0; i < N; i++)
- {
- Wektor_R[i] = Wektor_Beta[i];
- }
- }
- double rs = abs(Wektor_R[0]);//bufor na dane
- int s = 0;//indeks elementu w tabilcy R
- for (int i = 0; i < N; i++)//znajdowanie maksymalnego elementu
- {
- if (abs(Wektor_R[i]) >= rs)
- {
- rs = abs(Wektor_R[i]);
- s = i;
- cout << rs << endl;
- }
- }
- cout << "Maksymalny element: " << rs << endl;
- //wektor pierwszej poprawki
- for (int i = 0; i < N; i++)
- {
- if (i == s)
- Wektor_Pierwszej_Poprawki[i] = Wektor_R[s];
- else
- Wektor_Pierwszej_Poprawki[i] = 0;
- }
- int it = 0;//licznik iteracji
- do
- {
- Wektor_X[s] += Wektor_R[s];
- for (int i = 0; i < N; i++)
- {
- if (i != s)
- Wektor_R[i] += (Macierz_Alfa[i][s] * Wektor_R[s]);
- }
- cout << "e = " << Wektor_R[s] << endl;
- Wektor_R[s] = 0;
- rs = abs(Wektor_R[s]);
- s = 0;
- for (int i = 0; i < N; i++)//znajdowanie maksymalnego elementu
- {
- if (abs(Wektor_R[i]) >= rs)
- {
- rs = abs(Wektor_R[s]);
- s = i;
- }
- }
- cout << "Nowy maksymalny element: " << rs << endl;
- it++;
- } while (it<MLI && rs > e);
- cout << "ostatnie e= " << rs<<endl;
- return it;
- }
- void generuj_Raport()
- {
- ofstream plik;
- plik.open("raport.txt");
- if (!plik.is_open())//jeżeli wystąpił błąd przy otwarciu pliku
- {
- cout << "Wystapil blad przy tworzeniu pliku" << endl;
- }
- else
- {
- plik << "Raport wykonaywania algorytmu relaksacji: " << endl << endl;;
- plik << "Dane wejściowe: " << endl;
- plik << "Macierz A: " << endl;
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- {
- plik << Macierz_A[i][j] << " ";
- }
- plik << endl;
- }
- plik << endl<<"Wektor B: " << endl;
- for (int i = 0; i < N; i++)
- plik << Wektor_B[i] << endl;
- plik << "Dokładność e= " << e << endl;
- plik << "Maksymalna liczba iteracji= " << MLI<<endl;
- plik << "Macierz alfa: " << endl;
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- plik << Macierz_Alfa[i][j] << " ";
- plik << endl;
- }
- plik << endl;
- plik << "Wektor beta: " << endl;
- for (int i = 0; i < N; i++)
- plik << Wektor_Beta[i] << endl;
- plik << "Wektor residuum: " << endl;
- for (int i = 0; i < N; i++)
- plik << Wektor_R[i] << endl;
- plik << "Wektor przybliżonego rozwiązania: " << endl;
- for (int i = 0; i < N; i++)
- plik << endl;
- plik << endl << "Wektor X: " << endl;
- for (int i = 0; i < N; i++)
- plik<< Wektor_X[i] << endl;
- }
- }
- int main()
- {
- /*
- bool wczytaj_Z_Pliku_Wejsciowego(string fileName);
- printMatrix();
- void stworz_Macierz_Alfa();
- void stworz_Wektor_Beta();
- int FunkcjaGlownaAlgorytmu();
- */
- wczytaj_Z_Pliku_Wejsciowego("input.txt");
- stworz_Macierz_Alfa();
- stworz_Wektor_Beta();
- int it = funkcja_Glowna_Algorytmu();
- cout << "Liczba iteracji: " << it << endl;
- generuj_Raport();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement