Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Wyznacznik przez rozkład LU
- // Data: 10.02.2011
- // (C)2012 mgr Jerzy Wałaszek
- //-----------------------------
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- using namespace std;
- const double eps = 1e-12;
- // Funkcja realizuje algorytm rozkładu LU
- //---------------------------------------
- bool lu(int n, double ** A)
- {
- int i,j,k;
- for(k = 0; k < n - 1; k++)
- {
- if(fabs(A[k][k]) < eps) return false;
- for(i = k + 1; i < n; i++)
- A[i][k] /= A[k][k];
- for(i = k + 1; i < n; i++)
- for(j = k + 1; j < n; j++)
- A[i][j] -= A[i][k] * A[k][j];
- }
- return true;
- }
- // Program główny
- int main()
- {
- double ** A,det;
- int n,i,j;
- cout << setprecision(4) << fixed;
- // odczytujemy stopień macierzy A
- cin >> n;
- // tworzymy macierz A o odpowiednich rozmiarach
- A = new double * [n];
- for(i = 0; i < n; i++) A[i] = new double [n];
- // odczytujemy dane dla macierzy A
- for(i = 0; i < n; i++)
- for(j = 0; j < n; j++) cin >> A[i][j];
- // obliczamy wyznacznik
- if(lu(n,A))
- {
- det = A[0][0];
- for(i = 1; i < n; i++) det *= A[i][i];
- cout << det << endl;
- }
- else
- cout << "DZIELNIK ZERO\n";
- // usuwamy macierz z pamięci
- for(i = 0; i < n; i++) delete [] A[i];
- delete [] A;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement