DIAGONALS

Extracts the diagonal terms of a matrix.

Function Return Value

Array containing the diagonal terms of matrix A.  It is rank-1 or rank-2 depending on the rank of A. When A  is a rank-3 array, the result is a rank-2 array consisting of each separate set of diagonals. (Output)

Required Argument

A — Matrix from which to extract the diagonal. This is a rank-2 or rank-3 array of type real, double, complex, or double complex. The output is a rank-1 or rank-2 array, respectively. (Input)

FORTRAN 90 Interface

DIAGONALS (A)

Description

Extracts a rank-1 array whose values are the diagonal terms of the rank-2 array A. The size of the array is the smaller of the two dimensions of the rank-2 array.

Examples

Dense Matrix Example  (operator_ex32.f90)

 

      use linear_operators 

      implicit none

! This is the equivalent of Example 4 (using operators) for LIN_EIG_GEN.

 

      integer, parameter :: n=17

      real(kind(1d0)), parameter :: one=1d0

      real(kind(1d0)), dimension(n,n) :: A, C

      real(kind(1d0)) variation(n), eta

      complex(kind(1d0)), dimension(n,n) :: U, V, e(n), d(n)

 

! Generate a random matrix.

      A = rand(A)

 

! Compute the eigenvalues, left- and right- eigenvectors.

      D = EIG(A, W=V); E = EIG(.t.A, W=U)

 

! Compute condition numbers and variations of eigenvalues.

      variation = norm(A)/abs(diagonals( U .hx. V))

 

! Now perturb the data in the matrix by the relative factors 

! eta=sqrt(epsilon) and solve for values again.  Check the 

! differences compared to the estimates.  They should not exceed 

! the bounds.

      eta = sqrt(epsilon(one))

      C = A + eta*(2*rand(A)-1)*A

      D = EIG(C)

 

! Looking at the differences of absolute values accounts for 

! switching signs on the imaginary parts.

      if (count(abs(d)-abs(e) > eta*variation) == 0) then

         write (*,*) 'Example 4 for LIN_EIG_GEN (operators) is correct.'

      end if

      end 


Visual Numerics, Inc.
Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260