Trabalho de fatoração lu por pivoteamento parcial
real a(100,100), L(100,100), U(100,100), p(100), b(100), c(100)
real pivo, m, aux, soma, y(100), x(100)
integer i, j, k, r, n
print*, 'Informe o tamanho n da matriz A'
read * , n
if (n.gt.100) then
stop
print*, 'O valor de n deve ser menor ou igual a 100'
endif
C Deve-se preencher a matriz A, da esquerda pra direita, percorrendo
C as linhas, quando acabar a primeira linha v para a segunda, e
C assim sucessivamente e sempre percorrendo da esquerda para direita
print *, 'Preencha a matriz A, percorrendo as linhas:'
do i = 1,n
read *, (A(i,j), j=1,n)
enddo
print *, 'Defina o vetor b:'
do i=1,n
read *, b(i)
enddo
do i = 1,n
p(i)=i
enddo
do k=1,(n-1)
pivo=abs(a(k,k))
r=k
do i=(k+1),n
if (abs(a(i,k)).gt.pivo) then
pivo=abs(a(i,k))
r=i
endif
enddo
if (pivo.eq.0) then
print *, 'A matriz ‚ singular, logo o determinante ‚ zero'
stop
endif
if (r.ne.k) then
aux = p(k)
p(k) = p(r)
p(r) = aux
do j=1,n
aux = a(k,j)
a(k,j) = a(r,j)
a(r,j) = aux
enddo
endif
do i=(k+1), n
m = a(i,k)/a(k,k)
a(i,k) = m
L(i,k) = m
do j = (k+1), n
a(i,j) = a(i,j) - m*a(k,j)
enddo
enddo
enddo
do i=1,n
r=p(i)
c(i)=b(r)
enddo
print *, 'Novo vetor b`:'
do i=1,n
print *, c(i)
enddo
C Fazendo Ax = b e A = LU
C