06/07/19 15:39:04
>>689
MODULE mod_det
IMPLICIT NONE
CONTAINS
RECURSIVE FUNCTION det(a) RESULT(res)
IMPLICIT NONE
REAL (KIND = 8), INTENT(IN) :: a(:, :)
REAL (KIND = 8) :: res, wk(SIZE(a, 1) - 1, SIZE(a, 1) - 1)
INTEGER :: i, n
n = SIZE(a, 1)
res = 0.0d0
IF (n == 1) THEN
res = a(1, 1)
ELSE
DO i = 1, n
wk(:, 1:i - 1) = a(2:, 1:i - 1)
wk(:, i:n - 1) = a(2:, i + 1: n)
res = res + REAL((-1)**(i - 1), KIND = 8) * a(1, i) * det(wk)
END DO
END IF
RETURN
END FUNCTION det
END MODULE mod_det
>>693