Computes the mathematical rank of a matrix.
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)
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)
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 |
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 located in Chapter 1, “Linear Systems” for the specific options for this routine.
RANK (A)
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 , where is machine precision and is the largest singular value of the matrix.
use linear_operators
real (kind(1e0)) A(5,5)
A = rand (A)
write (*,*) rank(A)
A=1.0
write (*,*) rank(A)
end
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
Visual Numerics, Inc. PHONE: 713.784.3131 FAX:713.781.9260 |