real*8 function trige( A, b, N, x) integer*4 N real*8 A(*,3), b(*), x(*) ! Function to solve b = A*x by Gaussian elimination where ! the matrix A is a packed tridiagonal matrix ! Inputs ! A Packed tridiagonal matrix, N by N unpacked ! b Column vector ! N Number of elements used in matrix A and vector b ! Output ! x Solution of b = A*x ! determ Determinant of A parameter( MAXN = 500 ) integer*4 i real*8 alpha(MAXN), beta(MAXN), gamma(MAXN), coeff, determ !* Unpack diagonals of triangular matrix into vectors do i=1,(N-1) alpha(i) = A(i+1,1) beta(i) = A(i,2) gamma(i) = A(i,) enddo beta(N) = A(N,2) !* Perform forward elimination do i=2,N coeff = alpha(i-1)/beta(i-1) beta(i) = beta(i) - coeff*gamma(i-1) b(i) = b(i) - coeff*b(i-1) enddo !* Compute determinant as product of diagonal elements determ = 1.0 do i=1,N determ = determ*beta(i) enddo !* Perform back substitution x(N) = b(N)/beta(N) do i=(N-1),1,-1 x(i) = (b(i) - gamma(i)*x(i+1))/beta(i) enddo trige = determ ! Return the determinant return end