Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. //Вычисление обратной матрицы
  2. void Gauss_Zhordan(int N)
  3. {
  4.     int i, j, k, l, u;
  5.     double elem, tmp;
  6.     printf("Inverse:\n");
  7.  
  8.     //Заполнение добавочной матрицы
  9.     for (i = 0; i < N; ++i){
  10.         for (j = N + i + 1; j <= 2 * N; ++j){
  11.             matrix_1[i][j] = 0;
  12.         }
  13.     }
  14.     for (i = 0; i < N; ++i){
  15.         matrix_1[i][N + i + 1] = 1;
  16.     }
  17.  
  18.     //Приведение к верхней треугольной форме
  19.     for (i = 1; i < N; ++i){
  20.         for (j = i; j < N; ++j){
  21.             l = i;
  22.             while (matrix_1[i-1][i-1] == 0)
  23.             {
  24.                 for (u = 0; u <= N; ++u){
  25.                     tmp = matrix_1[i-1][u];
  26.                     matrix_1[i-1][u] = matrix_1[l][u];
  27.                     matrix_1[l][u] = tmp;
  28.                 }
  29.                 ++l;
  30.             }
  31.             elem = matrix_1[j][i-1] / matrix_1[i-1][i-1];
  32.             for (k = 0; k <= 2 * N; ++k){
  33.                 matrix_1[j][k] = matrix_1[j][k] - elem * matrix_1[i-1][k];
  34.             }
  35.         }
  36.     }
  37.  
  38.     //Приведение к диагональной форме
  39.     for (i = N - 2; i >= 0; --i){
  40.         for (j = i; j >= 0; --j){
  41.             l = i;
  42.             while (matrix_1[i+1][i+1] == 0)
  43.             {
  44.                 for (u = 0; u <= N; ++u){
  45.                     tmp = matrix_1[i+1][u];
  46.                     matrix_1[i+1][u] = matrix_1[l][u];
  47.                     matrix_1[l][u] = tmp;
  48.                 }
  49.                 --l;
  50.             }
  51.             elem = matrix_1[j][i+1] / matrix_1[i+1][i+1];
  52.             for (k = 0; k <= 2 * N; ++k){
  53.                 matrix_1[j][k] = matrix_1[j][k] - elem * matrix_1[i+1][k];
  54.             }
  55.         }
  56.     }
  57.  
  58.     //Приведение к единичной матрице
  59.     for (i = 0; i < N; ++i){
  60.         for (j = N + 1; j <= 2 * N; ++j)
  61.             matrix_1[i][j] /= matrix_1[i][i];
  62.     }
  63.  
  64.     //Печать обратной матрицы
  65.     for (i = 0; i < N; ++i){
  66.         for (j = N + 1; j <= 2 * N; ++j){
  67.             printf("%.3lf ", matrix_1[i][j]);
  68.         }
  69.         printf("\n");
  70.     }
  71.  
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement