pinv_rel Function

private pure function pinv_rel(A, method, tol) result(Apinv)

Calculates the pseudoinverse of a matrix A.

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in), dimension(:, :), contiguous :: A
character(len=*), intent(in), optional :: method
real(kind=rk), intent(in), optional :: tol

Return Value real(kind=rk), dimension(size(A,2), size(A,1))


Calls

proc~~pinv_rel~~CallsGraph proc~pinv_rel forinv::pinv_rel proc~pinvlu_rel forinv::pinvLU_rel proc~pinv_rel->proc~pinvlu_rel proc~pinvsvd_rel forinv::pinvSVD_rel proc~pinv_rel->proc~pinvsvd_rel proc~gemm forinv::gemm proc~pinvlu_rel->proc~gemm proc~invlu_rel forinv::invLU_rel proc~pinvlu_rel->proc~invlu_rel svd svd proc~pinvsvd_rel->svd

Called by

proc~~pinv_rel~~CalledByGraph proc~pinv_rel forinv::pinv_rel interface~inv forinv::inv interface~inv->proc~pinv_rel program~test1 test1 program~test1->interface~inv program~test2 test2 program~test2->interface~inv program~test3 test3 program~test3->interface~inv

Source Code

   pure function pinv_rel(A, method, tol) result(Apinv)
#elif defined (IMPURE)
   impure function pinv_rel(A, method, tol) result(Apinv)
#endif

      ! Inputs:
      real(rk),     dimension(:, :), contiguous, intent(in) :: A
      real(rk),     intent(in), optional                    :: tol
      character(*), intent(in), optional                    :: method

      ! Outputs:
      real(rk), dimension(size(A,2), size(A,1))          :: Apinv ! Pseudoinverse of A


      if (present(method)) then
         select case (method)
            case('gesvd','gesdd')
            Apinv = pinvSVD_rel(A, method, tol)
            case('getrf')
            Apinv = pinvLU_rel(A)
            case default
            error stop 'method is not valid.'
         end select
      else
         Apinv = pinvSVD_rel(A, tol=tol)
      end if

   end function pinv_rel