Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
548 views
1
subroutine gauss(a, b)
2
!Eliminación de Gauss
3
!Entrada: a (matriz de coeficientes)
4
! b (términos independientes)
5
!Salida: a (matriz triangular superior salvo permutación de filas)
6
! b (términos independientes permutados)
7
8
implicit none
9
real(8), intent (inout) :: a(:,:)
10
real(8), intent (inout) :: b(:)
11
real(8) :: det, piv
12
integer :: i, j, k, n
13
14
n = size(b)
15
16
!Inicialización del determinante
17
det = 1d0
18
!Etapa k-ésima de la eliminación
19
do k = 1, n-1
20
piv = a(k,k)
21
!Comprobación de que el k-ésimo pivote no es nulo
22
if (dabs(piv) < 1.e-12) then
23
print*,"Pivote nulo en la etapa: ", k
24
stop
25
end if
26
!Actualización del determinante
27
det = det * piv
28
!Eliminación
29
a(k+1:n, k) = a(k+1:n, k)/piv
30
do j = k+1, n
31
a(k+1:n, j) = a(k+1:n, j)-a(k+1:n, k)*a(k, j)
32
end do
33
b(k+1:n) = b(k+1:n)-a(k+1:n, k)*b(k)
34
end do
35
!Comprobación de que el último pivote no es nulo
36
if (dabs(a(n, n)) < 1.e-12) then
37
print*,"Pivote nulo en la etapa: ", n
38
stop
39
end if
40
!Fin del cálculo del determinante
41
det = detgauss*a(n, n)
42
print*,"Determinante: ", det
43
44
return
45
end subroutine
46
gtyh3td6
47