Guest User

Untitled

a guest
Apr 14th, 2013
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. // Nie używaj zmiennych globalnych, ani dyrektyw #define
  2. // Utrudniają one zrobienie ogólnych funkcji.
  3.  
  4. double ** matrix(int n);             // alokuje macierz nxn
  5. void free_matrix(double **A, int n); // zwalnia macierz nxn
  6. double det(double **A, int n);       // Liczy wyznacznik macierzy nxn
  7. void transpose(double **A, int n);   // Transponuje macierz nxn
  8.  
  9. // Kopiuje z A do B wszystkie elementy oprócz elementów z wiersza r i kolumny k
  10. void copyWithout(double **B, const double **A, int r, int k, int n);
  11.  
  12. // Odwraca macierz nxn
  13. void inverse(double **A, int n) {
  14.     double **B = matrix(n-1);        // Macierz pomocnicza.
  15.     double **D = matrix(n);          // Macierz dopełnień.
  16.    
  17.     // W każdej iteracji będziemy rozwijać wzór na elemencie A[r][k]
  18.     for (int r = 0; r < n; r++) {
  19.         for (int k = 0; k < n; k++) {
  20.             copyWithout(B, A, r, k, n);
  21.             int sign = ((r+k)%2 == 0) ? 1 : -1;
  22.             D[r][k] = sign * det(B, n-1);
  23.         }
  24.     }
  25.     transpose(D, n);
  26.     for (int r = 0; r < n; r++) {
  27.         for (int k = 0; k < n; k++) {
  28.             A[r][k] = D[r][k];
  29.         }
  30.     }
  31.        
  32.     free_matrix(D);
  33.     free_matrix(B);
  34. }
Advertisement
Add Comment
Please, Sign In to add comment