Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Determinant(A)   // Используется алгоритм Барейса, сложность O(n^3)
  2. {
  3.     var N = A.length, B = [], denom = 1, exchanges = 0;
  4.     for (var i = 0; i < N; ++i)
  5.     { B[ i ] = [];
  6.         for (var j = 0; j < N; ++j) B[ i ][j] = A[ i ][j];
  7.     }
  8.     for (var i = 0; i < N-1; ++i)
  9.     { var maxN = i, maxValue = Math.abs(B[ i ][ i ]);
  10.         for (var j = i+1; j < N; ++j)
  11.         { var value = Math.abs(B[j][ i ]);
  12.             if (value > maxValue){ maxN = j; maxValue = value; }
  13.         }
  14.         if (maxN > i)
  15.         { var temp = B[ i ]; B[ i ] = B[maxN]; B[maxN] = temp;
  16.             ++exchanges;
  17.         }
  18.         else { if (maxValue == 0) return maxValue; }
  19.         var value1 = B[ i ][ i ];
  20.         for (var j = i+1; j < N; ++j)
  21.         { var value2 = B[j][ i ];
  22.             B[j][ i ] = 0;
  23.             for (var k = i+1; k < N; ++k) B[j][k] = (B[j][k]*value1-B[ i ][k]*value2)/denom;
  24.         }
  25.         denom = value1;
  26.     }
  27.     if (exchanges%2) return -B[N-1][N-1];
  28.     else return B[N-1][N-1];
  29. }
  30.  
  31. function AdjugateMatrix(A)   // A - двумерный квадратный массив
  32. {
  33.     var N = A.length, adjA = [];
  34.     for (var i = 0; i < N; i++)
  35.     {
  36.         adjA[ i ] = [];
  37.         for (var j = 0; j < N; j++)
  38.         { var B = [], sign = ((i+j)%2==0) ? 1 : -1;
  39.             for (var m = 0; m < j; m++)
  40.             { B[m] = [];
  41.                 for (var n = 0; n < i; n++)   B[m][n] = A[m][n];
  42.                 for (var n = i+1; n < N; n++) B[m][n-1] = A[m][n];
  43.             }
  44.             for (var m = j+1; m < N; m++)
  45.             { B[m-1] = [];
  46.                 for (var n = 0; n < i; n++)   B[m-1][n] = A[m][n];
  47.                 for (var n = i+1; n < N; n++) B[m-1][n-1] = A[m][n];
  48.             }
  49.             adjA[ i ][j] = sign*Determinant(B);   // Функцию Determinant см. выше
  50.         }
  51.     }
  52.     return adjA;
  53. }
  54.  
  55. function InverseMatrix(A)   // A - двумерный квадратный массив
  56. {
  57.     var det = Determinant(A);                // Функцию Determinant см. выше
  58.     if (det == 0) return false;
  59.     var N = A.length, A = AdjugateMatrix(A); // Функцию AdjugateMatrix см. выше
  60.     for (var i = 0; i < N; i++)
  61.     { for (var j = 0; j < N; j++) A[ i ][j] /= det; }
  62.     return A;
  63. }
  64.  
  65. var matrix = [[3, 5, -2], [1, -3, 2], [6, 7, -3]];
  66. console.log(InverseMatrix(matrix));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement