RANK

 


   more...

Computes the mathematical rank of a matrix.

Function Return Value

Integer rank of A. The output function value is an integer with a value equal to the number of singular values that are greater than a tolerance. (Output)

Required Argument

A — Matrix for which the rank is to be computed. The argument must be rank-2 or rank-3 (box) array of type single, double, complex, or double complex. (Input)

Optional Arguments, Packaged Options

This function uses LIN_SOL_SVD to compute the singular values of the argument. The singular values are then compared with the value of the tolerance to compute the rank.

The option and derived type names are given in the following tables:

Option Names for RANK

Option Value

?_rank_set_small

1

?_rank_for_lin_sol_svd

2

 

Name of Unallocated Option Array to Use for Setting Options

Use

Derived Type

?_rank_options(:)

Use when setting options for calls hereafter.

?_options

?_rank_options_once(:)

Use when setting options for next call only.

?_options

For a description on how to use these options, see Matrix Optional Data Changes. See LIN_SOL_SVD in Chapter 1, “Linear Systems” for the specific options for these routines.

FORTRAN 90 Interface

RANK (A)

Description

Computes the mathematical rank of a rank-2 or rank-3 array. The output function value is an integer with a value equal to the number of singular values that are greater than a tolerance. The default value for this tolerance is ɛ1/2s1, where ɛ is machine precision and s1 is the largest singular value of the matrix. 

Examples

Example 1

 

use linear_operators

real (kind(1e0)) A(5,5)

A = rand (A)

write (*,*) rank(A)

A=1.0

write (*,*) rank(A)

end

Output

5

1

Parallel Example

 

use linear_operators

use mpi_setup_int

 

integer, parameter :: N=3, nr=4

integer r(nr)

real (kind(1.e0)) s_mat(N,N), s_box(N,N,nr)

! Setup for MPI

mp_nprocs = mp_setup()

 

if (mp_rank == 0) then

s_mat = reshape((/1.,0.,0.,epsilon(1.0e0)/),(/n,n/))

s_box = spread(s_mat,dim=3,ncopies=nr)

end if

 

r = rank(s_box)

 

mp_nprocs = mp_setup ('Final')

 

end