"""
determinant(mat)
Given a non singluar matrix, calculate its determinant using LU decomposition.
L and U are lower triangular and upper triangular matrices respectively such that
A = L*U
If we want to find the determinant, then
det(A) = det(LU) = det(L)*det(U)
Determinant of triangualar matrices is the product of their diagonal entries. Hence, makes finding the determinant easy.
"""
function determinant(mat)
n, m = size(mat)
if n != m
DomainError(mat, "The matrix should be a square matrix.")
end
L, U = lu_decompose(mat)
l_prod = prod([L[i, i] for i in 1:n])
u_prod = prod([U[i, i] for i in 1:n])
return l_prod * u_prod
end