!!!!!!!!!! SUBROUTINE inverse(n, A, M) !This subroutine Computes the inverse !This method of inverse uses the identity matrix !with row reduced echelon techniques. ! This is the program I made in the Gauss. Elimination lab ! (my error that day benefitted me now!) IMPLICIT NONE INTEGER :: i, j, k, rows REAL :: factor INTEGER, INTENT(IN) :: n REAL, DIMENSION(n,n) :: A REAL, INTENT(OUT), DIMENSION(n,n) :: M REAL, DIMENSION(1,n) :: s1, s2 !Create identity matrix M(1:n,1:n) = 0 DO i = 1,n M(i,i) = 1 ENDDO !Forward elimination DO k = 1, n-1 !Complete Pivoting Strategy IF (A(k,k) == 0.) THEN DO i=k+1,n IF (A(i,k) == MAXVAL(A(k+1:n,k))) THEN rows = i s1(1,1:n) = A(i,1:n) !For Matrix A s2(1,1:n) = M(i,1:n) !For Identity Matrix M ENDIF ENDDO !Switch the rows A(rows,1:n) = A(k,1:n) A(k,1:n) = s1(1,1:n) M(rows,1:n) = M(k,1:n) M(k,1:n) = s2(1,1:n) ENDIF !Continue Forward Elimination DO i = k+1, n IF (A(k,k) .NE. 1) THEN M(k,1:n) = M(k,1:n)/A(k,k) A(k,1:n) = A(k,1:n)/A(k,k) ENDIF factor = A(i,k) / A(k,k) DO j = 1,n !IF (i == 3) THEN A(i,j) = A(i,j) - factor*A(k,j) M(i,j) = M(i,j) - factor*M(k,j) ENDDO ENDDO ENDDO !Make the last element equal to 1 IF (A(n,n) .NE. 1) THEN M(n,1:n) = M(n,1:n)/A(n,n) A(n,1:n) = A(n,1:n)/A(n,n) ENDIF !Backwards Elimination DO k = n, 2, -1 DO i = 1, k-1, 1 factor = A(i,k) / A(k,k) DO j = 1,n A(i,j) = A(i,j) - factor*A(k,j) M(i,j) = M(i,j) - factor*M(k,j) ENDDO ENDDO ENDDO END SUBROUTINE inverse !!!!!!!!!! !!!!!!!!!! SUBROUTINE datafit(d, n, p, outp) IMPLICIT NONE INTEGER, INTENT(IN) :: d, n !Polynomial order, and Point matrix length INTEGER :: i, j, k INTEGER, INTENT(OUT) :: outp REAL :: sum1, sum2, sum2b, sd, se, favg, ne, corr REAL, DIMENSION(n,2) :: p REAL, DIMENSION(:,:), ALLOCATABLE :: A, AI !X sum matrix and inverse REAL, DIMENSION(:), ALLOCATABLE :: B, coef !Y matrix, and coeff sol matrix ALLOCATE(A(d+1,d+1), AI(d+1,d+1), B(d+1), coef(d+1))
Next Page →
Next Page →
← Previous Page
← Previous Page