real a(20,20), b(20,20), c(20,20), t(20,20) dimension indx(20) read *,n do i=1,n read *, (a(i,j),j=1,n) end do print *,"Input Matrix:" do i=1,n write (*, 10) (a(i,j),j=1,n) 10 format(5f10.2) end do print *,"---------------------------------------------" call ludcmp(a,n,20,indx,d) print *,"Output of the subroutine" do i=1,n write (*, 10) (a(i,j),j=1,n) end do print *,"---------------------------------------------" do i=1,n do j=1,n b(i,j)=0 if (i.eq.j)b(i,j)=1 c(i,j)=0 t(i,j)=0 end do end do do i=1,n-1 do j=i+1,n b(j,i)=a(j,i) end do end do print *, "The L Matrix:" do i=1,n write (*, 10) (b(i,j),j=1,n) end do print *,"---------------------------------------------" do i=1,n do j=1,i c(j,i)=a(j,i) end do end do print *, "The U Matrix:" do i=1,n write (*, 10) (c(i,j),j=1,n) end do print *,"---------------------------------------------" do i=1,n do j=1,n do k=1,n t(i,j)=t(i,j)+b(i,k)*c(k,j) end do end do end do print *, "L times U" do i=1,n write (*, 10) (t(i,j),j=1,n) end do print *,"---------------------------------------------" end SUBROUTINE LUDCMP(A,N,NP,INDX,D) PARAMETER (NMAX=100,TINY=1.0E-20) DIMENSION A(NP,NP),INDX(N),VV(NMAX) D=1. DO 12 I=1,N AAMAX=0. DO 11 J=1,N IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J)) 11 CONTINUE IF (AAMAX.EQ.0.) PAUSE 'Singular matrix.' VV(I)=1./AAMAX 12 CONTINUE DO 19 J=1,N DO 14 I=1,J-1 SUM=A(I,J) DO 13 K=1,I-1 SUM=SUM-A(I,K)*A(K,J) 13 CONTINUE A(I,J)=SUM 14 CONTINUE AAMAX=0. DO 16 I=J,N SUM=A(I,J) DO 15 K=1,J-1 SUM=SUM-A(I,K)*A(K,J) 15 CONTINUE A(I,J)=SUM DUM=VV(I)*ABS(SUM) IF(DUM.GE.AAMAX) THEN IMAX=I AAMAX=DUM ENDIF 16 CONTINUE IF (J.NE.IMAX) THEN DO 17 K=1,N DUM=A(IMAX,K) A(IMAX,K)=A(J,K) A(J,K)=DUM 17 CONTINUE D=-D VV(IMAX)=VV(J) ENDIF INDX(J)=IMAX IF (A(J,J).EQ.0.) A(J,J)=TINY IF (J.NE.N) THEN DUM=1./A(J,J) DO 18 I=J+1,N A(I,J)=A(I,J)*DUM 18 CONTINUE ENDIF 19 CONTINUE RETURN END