Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <iomanip>
- #define N 5 // rozmiar tablic
- using namespace std;
- double t, s;
- int n; // zmienna wielkosci macierzy
- int MLI = 30; // zmienna maksymalnej liczy iteracji
- double a[N][N]; // macierz a
- double b[N]; // wektor b
- double x[N] = {1, 1, 1, 1, 1}; // wektor rozwiazan dokladnych
- double xk1[N] = {1, 1, 1, 1, 1};
- double epsilon = 0.0001; // dokladnosc
- double alfa[N][N]; // macierz alfa
- double beta[N]; // wektor beta
- //funkcja wczytuje macierz A i wektor B z pliku
- void wczytajZPliku() {
- ifstream plik;
- plik.open("C:\\Users\\Adrian\\CLionProjects\\Metody Numeryczne\\Uklady liniowe\\dane_1.txt");
- cout << "Podaj wielkosc n macierzy: ";
- cin >> n;
- cout << "Podaj maksymalna liczbe iteracji: ";
- cin >> MLI;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- plik >> a[i][j];
- }
- }
- for (int i = 0; i < n; i++) {
- plik >> b[i];
- }
- plik.close();
- }
- // funkcja tworzy macierz alfa
- void wyznaczMacierzAlfa() {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- if (i == j)
- alfa[i][j] == 0;
- else
- alfa[i][j] = -(a[i][j] / a[i][i]);
- }
- }
- }
- // funkcja tworzy wektor beta
- void wyznaczWektorBeta() {
- for (int i = 0; i < n; i++) {
- beta[i] = b[i] / a[i][i];
- }
- }
- void liczSiedela() {
- double s1 = 0, s2 = 0;
- int licznik = 0;
- double suma = 1;
- do {
- suma = 0;
- for (int i = 0; i < n; i++) {
- s1 = 0;
- s2 = 0;
- if(licznik == 0) {
- xk1[i] = beta[i];
- suma = 1;
- }
- else {
- x[i] = xk1[i];
- for (int j = 0; j < (i - 1); j++)
- s1 += alfa[i][j] * x[j];
- for (int j = i + 1; j < n; j++)
- s2 += alfa[i][j] * x[j];
- // cout << s1 << " " << s2 << endl;
- xk1[i] = s1 + s2 + beta[i];
- suma += fabs(xk1[i] - x[i]);
- }
- cout << xk1[i] << " " << x[i] << " " << fabs(xk1[i] - x[i]) << " " << epsilon << endl;
- }
- licznik++;
- cout << suma << endl;
- cout << suma/N << endl;
- cout << endl;
- } while (suma/N > epsilon && licznik < MLI);
- // if (suma < epsilon) {
- // cout << "Badanie zakonczone na " << r << " iteracji. Wyniki: " << endl;
- // for (int i = 0; i < n; i++)
- // cout << "x" << i + 1 << ": " << x[i] << endl;
- // break;
- //
- }
- void generujRaport() {
- ofstream plik;
- plik.open("raport.txt");
- plik << "Dokladnosc: " << epsilon << endl;
- plik << "Maksymalna liczba iteracji: " << MLI << endl << endl;
- plik << "-----------Macierz A-----------" << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- plik << setw(6) << a[i][j];
- }
- plik << endl;
- }
- plik << "-----------Wektor B-----------" << endl;
- for (int i = 0; i < n; i++) {
- plik << b[i];
- plik << endl;
- }
- plik << endl;
- plik << "-----------Macierz Alfa-----------" << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- plik << alfa[i][j];
- }
- plik << endl;
- }
- plik << endl;
- plik << "-----------Wektor Beta-----------" << endl;
- for (int i = 0; i < n; i++) {
- plik << beta[i];
- plik << endl;
- }
- plik << endl;
- plik << "-----------Wynik ostatniej iteracji-----------" << endl;
- for (int i = 0; i < n; i++) {
- plik << beta[i];
- plik << endl;
- }
- plik << endl;
- }
- void wyswietlMacierz() {
- cout << "Macierz: " << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cout << a[i][j];
- }
- cout << endl;
- }
- }
- void wyswietlAlfa() {
- cout << "Alfa: " << endl;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cout << alfa[i][j] << " ";
- }
- cout << endl;
- }
- }
- void wyswietlBeta() {
- cout << "Beta: " << endl;
- for (int i = 0; i < n; i++) {
- cout << beta[i];
- cout << endl;
- }
- }
- void wyswietlWektor() {
- cout << "Wektor: " << endl;
- for (int i = 0; i < n; i++) {
- cout << b[i];
- cout << endl;
- }
- }
- void wyswietlX() {
- cout << "X: " << endl;
- for (int i = 0; i < n; i++) {
- cout << x[i];
- cout << endl;
- }
- }
- int main() {
- wczytajZPliku();
- cout << "Done" << endl;
- wyznaczMacierzAlfa();
- wyznaczWektorBeta();
- wyswietlAlfa();
- cout << endl;
- wyswietlBeta();
- cout << endl;
- cout << endl;
- liczSiedela();
- generujRaport();
- return 0;
- }
- //for (int i = 0; i < n; ++i) {
- //// suma k + 1
- //for (int j = 1; j < (i - 1); ++j) {
- //suma_k_1 += alfa[i][j] * x[j];
- //}
- //// suma k
- //for (int j = (i + 1); j < n; ++j) {
- //suma_k += alfa[i][j] * x[j];
- //}
- //// suma beta
- //x[i] = beta[i] + suma_k + suma_k_1;
- //iteruj = stopIteracji(suma_k, suma_k_1);
- //suma_k = 0;
- //suma_k_1 = 0;
- //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement