Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. // Wyznacznik przez rozkład LU
  2. // Data: 10.02.2011
  3. // (C)2012 mgr Jerzy Wałaszek
  4. //-----------------------------
  5.  
  6. #include <iostream>
  7. #include <iomanip>
  8. #include <cmath>
  9.  
  10. using namespace std;
  11.  
  12. const double eps = 1e-12;
  13.  
  14. // Funkcja realizuje algorytm rozkładu LU
  15. //---------------------------------------
  16. bool lu(int n, double ** A)
  17. {
  18. int i,j,k;
  19.  
  20. for(k = 0; k < n - 1; k++)
  21. {
  22. if(fabs(A[k][k]) < eps) return false;
  23. for(i = k + 1; i < n; i++)
  24. A[i][k] /= A[k][k];
  25. for(i = k + 1; i < n; i++)
  26. for(j = k + 1; j < n; j++)
  27. A[i][j] -= A[i][k] * A[k][j];
  28. }
  29. return true;
  30. }
  31.  
  32. // Program główny
  33.  
  34. int main()
  35. {
  36. double ** A,det;
  37. int n,i,j;
  38.  
  39. cout << setprecision(4) << fixed;
  40.  
  41. // odczytujemy stopień macierzy A
  42.  
  43. cin >> n;
  44.  
  45. // tworzymy macierz A o odpowiednich rozmiarach
  46.  
  47. A = new double * [n];
  48. for(i = 0; i < n; i++) A[i] = new double [n];
  49.  
  50. // odczytujemy dane dla macierzy A
  51.  
  52. for(i = 0; i < n; i++)
  53. for(j = 0; j < n; j++) cin >> A[i][j];
  54.  
  55. // obliczamy wyznacznik
  56.  
  57. if(lu(n,A))
  58. {
  59. det = A[0][0];
  60. for(i = 1; i < n; i++) det *= A[i][i];
  61. cout << det << endl;
  62. }
  63. else
  64. cout << "DZIELNIK ZERO\n";
  65.  
  66. // usuwamy macierz z pamięci
  67.  
  68. for(i = 0; i < n; i++) delete [] A[i];
  69. delete [] A;
  70. return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement