Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
doubleprecision, | intent(out) | :: | a(lda,n) | |||
integer, | intent(in) | :: | lda | |||
integer, | intent(in) | :: | n |
subroutine mat_inverse_hilbert(a,lda,n) ! ident_1="@(#) M_LA mat_inverse_hilbert(3fp) generate doubleprecision inverse hilbert matrix" ! ! References: ! Forsythe, G. E. and C. B. Moler. Computer Solution of Linear Algebraic Systems. Englewood Cliffs, NJ: Prentice-Hall, 1967. integer,intent(in) :: lda integer,intent(in) :: n doubleprecision,intent(out) :: a(lda,n) doubleprecision :: p doubleprecision :: r integer :: i integer :: j integer :: ip1 p = dble(n) do i = 1, n if (i.ne.1) p = (dble(n-i+1) * p * dble(n+i-1)) / dble(i-1)**2 r = p * p a(i,i) = r / dble(2*i-1) if (i.eq.n) cycle ip1 = i + 1 do j = ip1, n r = (-1) * (dble(n-j+1) * r * (n+j-1)) / dble(j-1)**2 a(i,j) = r/ dble(i+j-1) a(j,i) = a(i,j) enddo enddo end subroutine mat_inverse_hilbert