Advertisement
Guest User

Untitled

a guest
Jan 4th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. #include <iomanip>
  5.  
  6. #define N 5 // rozmiar tablic
  7.  
  8. using namespace std;
  9.  
  10. double t, s;
  11. int n; // zmienna wielkosci macierzy
  12. int MLI = 30; // zmienna maksymalnej liczy iteracji
  13. double a[N][N]; // macierz a
  14. double b[N]; // wektor b
  15. double x[N] = {1, 1, 1, 1, 1}; // wektor rozwiazan dokladnych
  16. double xk1[N] = {1, 1, 1, 1, 1};
  17. double epsilon = 0.0001; // dokladnosc
  18. double alfa[N][N]; // macierz alfa
  19. double beta[N]; // wektor beta
  20.  
  21. //funkcja wczytuje macierz A i wektor B z pliku
  22. void wczytajZPliku() {
  23.     ifstream plik;
  24.     plik.open("C:\\Users\\Adrian\\CLionProjects\\Metody Numeryczne\\Uklady liniowe\\dane_1.txt");
  25.  
  26.     cout << "Podaj wielkosc n macierzy: ";
  27.     cin >> n;
  28.     cout << "Podaj maksymalna liczbe iteracji: ";
  29.     cin >> MLI;
  30.  
  31.     for (int i = 0; i < n; i++) {
  32.         for (int j = 0; j < n; j++) {
  33.             plik >> a[i][j];
  34.         }
  35.     }
  36.  
  37.     for (int i = 0; i < n; i++) {
  38.         plik >> b[i];
  39.     }
  40.     plik.close();
  41. }
  42.  
  43. // funkcja tworzy macierz alfa
  44. void wyznaczMacierzAlfa() {
  45.     for (int i = 0; i < n; i++) {
  46.         for (int j = 0; j < n; j++) {
  47.             if (i == j)
  48.                 alfa[i][j] == 0;
  49.             else
  50.                 alfa[i][j] = -(a[i][j] / a[i][i]);
  51.         }
  52.     }
  53. }
  54.  
  55. // funkcja tworzy wektor beta
  56. void wyznaczWektorBeta() {
  57.     for (int i = 0; i < n; i++) {
  58.         beta[i] = b[i] / a[i][i];
  59.     }
  60. }
  61.  
  62.  
  63. void liczSiedela() {
  64.     double s1 = 0, s2 = 0;
  65.     int licznik = 0;
  66.     double suma = 1;
  67.  
  68.     do {
  69.         suma = 0;
  70.         for (int i = 0; i < n; i++) {
  71.             s1 = 0;
  72.             s2 = 0;
  73.             if(licznik == 0) {
  74.                 xk1[i] = beta[i];
  75.                 suma = 1;
  76.             }
  77.             else {
  78.                 x[i] = xk1[i];
  79.  
  80.                 for (int j = 0; j < (i - 1); j++)
  81.                     s1 += alfa[i][j] * x[j];
  82.  
  83.                 for (int j = i + 1; j < n; j++)
  84.                     s2 += alfa[i][j] * x[j];
  85.  
  86. //                cout << s1 << "    " << s2 << endl;
  87.                 xk1[i] = s1 + s2 + beta[i];
  88.                 suma += fabs(xk1[i] - x[i]);
  89.             }
  90.             cout << xk1[i] << "    " << x[i] << "     " << fabs(xk1[i] - x[i]) << "     " << epsilon << endl;
  91.         }
  92.         licznik++;
  93.  
  94.         cout << suma << endl;
  95.         cout << suma/N << endl;
  96.         cout << endl;
  97.     } while (suma/N > epsilon && licznik < MLI);
  98.  
  99. //        if (suma < epsilon) {
  100. //            cout << "Badanie zakonczone na " << r << " iteracji. Wyniki: " << endl;
  101. //            for (int i = 0; i < n; i++)
  102. //                cout << "x" << i + 1 << ": " << x[i] << endl;
  103. //            break;
  104. //
  105.  
  106.  
  107. }
  108.  
  109. void generujRaport() {
  110.     ofstream plik;
  111.     plik.open("raport.txt");
  112.     plik << "Dokladnosc: " << epsilon << endl;
  113.     plik << "Maksymalna liczba iteracji: " << MLI << endl << endl;
  114.  
  115.     plik << "-----------Macierz A-----------" << endl;
  116.     for (int i = 0; i < n; i++) {
  117.         for (int j = 0; j < n; j++) {
  118.             plik << setw(6) << a[i][j];
  119.         }
  120.         plik << endl;
  121.     }
  122.  
  123.     plik << "-----------Wektor B-----------" << endl;
  124.     for (int i = 0; i < n; i++) {
  125.         plik << b[i];
  126.         plik << endl;
  127.     }
  128.     plik << endl;
  129.  
  130.     plik << "-----------Macierz Alfa-----------" << endl;
  131.     for (int i = 0; i < n; i++) {
  132.         for (int j = 0; j < n; j++) {
  133.             plik << alfa[i][j];
  134.         }
  135.         plik << endl;
  136.     }
  137.     plik << endl;
  138.  
  139.     plik << "-----------Wektor Beta-----------" << endl;
  140.     for (int i = 0; i < n; i++) {
  141.         plik << beta[i];
  142.         plik << endl;
  143.     }
  144.     plik << endl;
  145.  
  146.     plik << "-----------Wynik ostatniej iteracji-----------" << endl;
  147.     for (int i = 0; i < n; i++) {
  148.         plik << beta[i];
  149.         plik << endl;
  150.     }
  151.     plik << endl;
  152. }
  153.  
  154. void wyswietlMacierz() {
  155.     cout << "Macierz: " << endl;
  156.     for (int i = 0; i < n; i++) {
  157.         for (int j = 0; j < n; j++) {
  158.             cout << a[i][j];
  159.         }
  160.         cout << endl;
  161.     }
  162. }
  163.  
  164. void wyswietlAlfa() {
  165.     cout << "Alfa: " << endl;
  166.     for (int i = 0; i < n; i++) {
  167.         for (int j = 0; j < n; j++) {
  168.             cout << alfa[i][j] << "     ";
  169.         }
  170.         cout << endl;
  171.     }
  172. }
  173.  
  174. void wyswietlBeta() {
  175.     cout << "Beta: " << endl;
  176.     for (int i = 0; i < n; i++) {
  177.         cout << beta[i];
  178.         cout << endl;
  179.     }
  180. }
  181.  
  182. void wyswietlWektor() {
  183.     cout << "Wektor: " << endl;
  184.     for (int i = 0; i < n; i++) {
  185.         cout << b[i];
  186.         cout << endl;
  187.     }
  188. }
  189.  
  190. void wyswietlX() {
  191.     cout << "X: " << endl;
  192.     for (int i = 0; i < n; i++) {
  193.         cout << x[i];
  194.         cout << endl;
  195.     }
  196. }
  197.  
  198. int main() {
  199.     wczytajZPliku();
  200.     cout << "Done" << endl;
  201.     wyznaczMacierzAlfa();
  202.     wyznaczWektorBeta();
  203.     wyswietlAlfa();
  204.     cout << endl;
  205.     wyswietlBeta();
  206.     cout << endl;
  207.     cout << endl;
  208.     liczSiedela();
  209.     generujRaport();
  210.     return 0;
  211. }
  212.  
  213.  
  214. //for (int i = 0; i < n; ++i) {
  215. //// suma k + 1
  216. //for (int j = 1; j < (i - 1); ++j) {
  217. //suma_k_1 += alfa[i][j] * x[j];
  218. //}
  219. //// suma k
  220. //for (int j = (i + 1); j < n; ++j) {
  221. //suma_k += alfa[i][j] * x[j];
  222. //}
  223. //// suma beta
  224. //x[i] = beta[i] + suma_k + suma_k_1;
  225. //iteruj = stopIteracji(suma_k, suma_k_1);
  226. //suma_k = 0;
  227. //suma_k_1 = 0;
  228. //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement