Advertisement
dark-s0ul

oksana amo lab3 2 part

Dec 6th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include <iostream>
  4. #include <math.h>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. const int N = 4;
  10. const int M = 5;
  11.  
  12. void SimpleIteration() {
  13.     double q = 0, result[N], x0[N];
  14.  
  15.     double matrix[N][M] = {
  16.         {  9,   0,  1, -3,  -5 }, //[3] - [0]
  17.         {  3,  19, 11,  8, 149 }, //[0]
  18.         { -1, -12, 20,  8,  -1 }, //[3] * -1 + [2]
  19.         {  5,   0, 11, 18, 107 }  //[1] + [2] - [3] - [0]
  20.     };
  21.  
  22.     for (int i = 0; i < N; i++) {
  23.         double a = matrix[i][i];
  24.         matrix[i][M - 1] /= a;
  25.         for (int j = 0; j < N; j++) {
  26.             if (j != i) {
  27.                 matrix[i][j] /= a * -1;
  28.             } else {
  29.                 matrix[i][j] = 0;
  30.             }
  31.         }
  32.     }
  33.     for (int i = 0; i < N; i++) {
  34.         double a = 0;
  35.         for (int j = 0; j < N; j++) {
  36.             a += abs(matrix[i][j]);
  37.         }
  38.         if (q < a) {
  39.             q = a;
  40.         }
  41.     }
  42.     for (int i = 0; i < N; i++) {
  43.         x0[i] = matrix[i][M - 1];
  44.     }
  45.  
  46.     printf("-------------------------------------\n");
  47.     printf("|%7s |%7s |%7s |%7s |\n", "x1", "x2", "x3", "x4");
  48.     printf("-------------------------------------\n");
  49.    
  50.     float t = abs((1 - q) * 1e-2 / q);
  51.     while (true) {
  52.         printf("|");
  53.         for (int i = 0; i < N; i++) {
  54.             result[i] = matrix[i][M - 1];
  55.             for (int j = 0; j < N; j++) {
  56.                 result[i] += matrix[i][j] * x0[j];
  57.             }
  58.             printf("%7.3f |", result[i]);
  59.         }
  60.         printf("\n-------------------------------------\n");
  61.         double a = abs(result[0] - x0[0]);
  62.         for (int i = 1; i < N; i++) {
  63.             if (abs(result[i] - x0[i]) > a) {
  64.                 a = abs(result[i] - x0[i]);
  65.             }
  66.         }
  67.  
  68.         if (a <= t) break;
  69.  
  70.         for (int i = 0; i < N; i++) {
  71.             x0[i] = result[i];
  72.         }
  73.     }
  74. }
  75.  
  76. void main() {
  77.  
  78.  
  79.     printf("\nSimple iteration method\n");
  80.     SimpleIteration();
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement