daily pastebin goal
64%
SHARE
TWEET

Untitled

a guest Mar 25th, 2019 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <fstream>
  4. #include <string>
  5. #include <iomanip>
  6. #include <math.h>
  7. double TOLX = 1.0e-5;
  8. double TOL0 = 1.0e-5;
  9. int nmax = 15;
  10. const int SIZE = 4;
  11.  
  12. double A[SIZE][SIZE] = {    {100.,1.,-2.,3.},
  13.                             {4.,300.,-5.,6.},
  14.                             {7.,-8.,400.,9.},
  15.                             {-10.,11.,-12.,200.} };
  16. double B[SIZE] = { 395.,603.,-415.,-606. };
  17.  
  18. double estymator(double x2[], double x1[]) {
  19.     double max = 0;
  20.     double tab[SIZE];
  21.     for (int i = 0; i < SIZE; i++) {
  22.         tab[i] = x2[i] - x1[i];
  23.         if (fabs(tab[i]) > max)
  24.             max = fabs(tab[i]);
  25.     }
  26.     std::cout << "Estymator: " << max << std::endl;
  27.     return max;
  28. }
  29. double residuum(double x[], double b[], double a[][SIZE]) {
  30.     double r[SIZE] = { 0.,0.,0.,0. };
  31.     double max;
  32.     for (int i = 0; i < SIZE; i++)
  33.     {
  34.         for (int j = 0; j < SIZE; j++)
  35.         {
  36.             r[i] += a[i][j] * x[j];
  37.         }
  38.         r[i] = fabs(r[i] - b[i]);
  39.     }
  40.     max = r[0];
  41.     for (int i = 1; i < SIZE; i++)
  42.     {
  43.         if (r[i] > max)
  44.         {
  45.             max = r[i];
  46.         }
  47.     }
  48.     std::cout << "Residuum=" << max << " ";
  49.     return max;
  50. }
  51. double jacobi(double tab[][SIZE], double b[SIZE]) {
  52.     double arr[SIZE][SIZE],D[SIZE], b2[SIZE], x2[SIZE], x1[SIZE] = { 1.,1.,1.,1. };
  53.     int n = 0;
  54.     for (int i = 0; i < SIZE; i++)
  55.     {
  56.         for (int j = 0; j < SIZE; j++)
  57.         {
  58.             arr[i][j] = tab[i][j];
  59.         }
  60.     }
  61.     //D^-1
  62.     for (int i = 0; i < SIZE; i++)
  63.     {
  64.         D[i] = 1. / arr[i][i];
  65.         arr[i][i] = 0;
  66.         //ok
  67.     }
  68.     //b * D --> wspolczynnik c
  69.     for (int i = 0; i < SIZE; i++)
  70.     {
  71.         b2[i] = D[i] * b[i];
  72.         //ok
  73.     }
  74.     //przeksztalcenie macierzy A
  75.     for (int i = 0; i < SIZE; i++)
  76.     {
  77.         for (int j = 0; j < SIZE; j++)
  78.         {
  79.             if(i!=j)
  80.             arr[i][j] = arr[i][j] * ((-1)*D[i]);
  81.         }
  82.     }
  83.     int num = 0;
  84.     //algorytm
  85.     for (int k = 0; k < nmax; k++)
  86.         {
  87.             for (int i = 0; i < SIZE; i++)
  88.             {
  89.                 x2[i] = b2[i];
  90.                 for (int j = 0; j < SIZE; j++)
  91.                 {
  92.                     x2[i] += arr[i][j] * x1[j];
  93.                 }
  94.             }
  95.             num++;
  96.             std::cout << "Iteracja " << num << "  ";
  97.             for (int i = 0; i < SIZE; i++)
  98.             {
  99.                 std::cout << "x" << i+1 << "=" << x2[i] << "  ";
  100.             }
  101.             residuum(x2, B, A);
  102.             if(estymator(x2, x1) < TOLX && residuum(x2, B, A) < TOL0)break;
  103.             for (int i = 0; i < SIZE; i++) {
  104.                 x1[i] = x2[i];
  105.             }
  106.             std::cout << std::endl<<std::endl;
  107.         }  
  108.     return 0;
  109. }
  110. int main() {
  111.    
  112.     double X[SIZE] = {1.,1.,1.,1.};
  113.     jacobi(A, B);
  114.     getchar();
  115.     return 0;
  116. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top