Facebook
From ja, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 208
  1. #include <iostream>
  2. #include <math.h>
  3. #include <string>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. double n = 5.0;
  9. double epsilon = 0.0001;
  10. double mli = 30.0;
  11.  
  12. double dane[] = { 10, 1, 1, 1, 2, 8, 3, 20, 4, 2, 1, 20, 5, 1, 40, 9, 5, -8, 3, 0, 1, 10, 1, -8, 6, 2, 1, 1, 20, -13 };
  13.  
  14. double macierzA[5][5];
  15. double macierzAlfa[5][5];
  16. double wektor[5];
  17. double wektorBeta[5];
  18. double x_nowy[5], x_stary[5];
  19. int x=0;
  20. void funkcja_b()
  21. {
  22.         std::cout << "Macierz alfa"<<endl;
  23.         //tworzenie macierzy alfa
  24.         for (int i = 0; i < n; i++)
  25.         {
  26.                 for (int j = 0; j < n;j++)
  27.                 {
  28.                         if (i == j){           
  29.                                 macierzAlfa[i][j] = 0;
  30.                         }
  31.                         else{
  32.                                 if (macierzA[i][i] != 0){
  33.                                         macierzAlfa[i][j] = -(macierzA[i][j] / macierzA[i][i]);
  34.                                 }
  35.                                 else{
  36.                                         std::cout << "Podczas tworzenia macierzy alfa wystapilo dzielenie przez 0. Program nie będzie dalej liczył." << endl << endl;
  37.                                         getchar();
  38.                                         exit(1);
  39.                                 }
  40.                         }      
  41.                 }
  42.         }
  43.  
  44.         //tworzenie wektora beta
  45.  
  46.         for (int i = 0; i < n; i++){
  47.                 wektorBeta[i] = wektor[i] / macierzA[i][i];
  48.                
  49.         }
  50.  
  51. }
  52.  
  53. void funkcja_c()
  54. {      
  55.  
  56.         double norma3 = 0.0;
  57.         int licznik = 0;
  58.  
  59.         for (int i = 0; i <= n; i++){
  60.                 x_nowy[i] = 0;
  61.         }
  62.  
  63.         for (int i = 0; i <= n; i++){
  64.                 x_nowy[i] = wektorBeta[i];
  65.         }
  66.  
  67.         do{
  68.                 for (int i = 1; i < n; i++)
  69.                 {
  70.                         x_stary[i] = x_nowy[i];
  71.                 }
  72.  
  73.                 licznik++;
  74.  
  75.                 for (int i = 1; i <= n; i++){
  76.  
  77.                         for (int j = 1; j <= i - 1;j++){
  78.                                 x_nowy[i] += macierzAlfa[i][j] * x_nowy[j];
  79.                         }
  80.                         for (int j = i + 1; j <= n; j++){
  81.                                 x_nowy[i] += macierzAlfa[i][j] * x_stary[j];
  82.                         }
  83.                         x_nowy[i] += wektorBeta[i];
  84.                 }
  85.                 //norma
  86.                 norma3 = 0.0;
  87.                 for (int i = 1; i <= n; i++){
  88.                                 norma3 += pow(x_nowy[i]-x_stary[i], 2);
  89.                 }
  90.                 norma3 = sqrt(norma3/n);
  91.        
  92.         } while (norma3 > epsilon && licznik < mli);
  93.  
  94.         cout << endl <<"Licznik iteracji " << licznik << endl << " norma3 " << norma3 << endl;
  95. }
  96.  
  97. int main()
  98. {
  99.         //wpisywanie do macierzy
  100.         for (int i = 0; i < n; i++)
  101.         {
  102.                 for (int j = 0; j < n; j++)
  103.                 {
  104.                         macierzA[i][j] = dane[x];
  105.                         //cout << macierzA[i][j] << " ";
  106.                         x++;
  107.                 }
  108.                 wektor[i] = dane[x];
  109.                 x++;
  110.                 //cout << endl;
  111.         }
  112.  
  113.  
  114.         funkcja_b();
  115.  
  116.         cout << "Macierz Alfa" << endl;
  117.         for (int i = 0; i < n; i++){
  118.                 for (int j = 0; j < n; j++){
  119.                         cout << macierzA[i][j] << "             ";
  120.                 }
  121.                 cout << endl;
  122.         }
  123.  
  124.         cout << endl<< "wektor Beta" << endl;
  125.         for (int i = 0; i < n; i++){
  126.                 cout << wektorBeta[i] << endl;
  127.         }
  128.  
  129.         funkcja_c();
  130.  
  131.  
  132.         getchar();
  133.         return 0;
  134. }