Previous Next Contents Generated Index Doc Set Home



Rank-2 Update to a Hermitian Matrix in Packed Storage

The subroutines described in this section compute the following result for the Hermitian matrix A in packed storage and vectors x and y:

Calling Sequence

CALL ZHPR2 
(UPLO, N, ZALPHA, ZX, INCX, ZY, INCY, ZA)
CALL CHPR2 
(UPLO, N, CALPHA, CX, INCX, CY, INCY, CA)






void zhpr2 
(char uplo, int n, doublecomplex *zalpha, 
doublecomplex *zx, int incx, doublecomplex *zy, int 
incy, doublecomplex *za)
void chpr2 
(char uplo, int n, complex *calpha, complex *x, int 
incx, complex *cy, int incy, complex *ca)

Arguments

UPLO

Indicates whether the values in a matrix reside in the upper or lower triangle of the array in which the matrix is stored. The legal values for UPLO are listed below. Any value not listed below is illegal.

'L' or 'l'

Only the lower triangle of the array will be referenced.

'U' or 'u'

Only the upper triangle of the array will be referenced.

N

Size of a matrix with N rows and N columns. N 0.

xALPHA

Scalar that scales the input value of the matrix A.

xX

X and INCX describe a vector of length N. X contains an input vector.

INCX

Scalar that contains the storage spacing between successive elements of the vector. INCX 0. If INCX = 1, then elements of the vector are contiguous in memory. INCX may take on values besides 1 to allow the programmer to extract from a matrix a vector that is not stored in contiguous memory locations.

If X is a one-dimensional array and INCX = -1 then the array will be accessed in reverse order.

If X is a two-dimensional array and INCX = LDA then the vector will be a row of the array.

If X is a two-dimensional array and INCX = LDA+1 then the vector will be a diagonal of the array.

xY

Y and INCY describe a vector of length N. Y contains an input vector.

INCY

Scalar that contains the storage spacing between successive elements of the vector Y. INCY 0. If INCY = 1, then elements of the vector are contiguous in memory. INCY may take on values besides 1 to allow the programmer to extract from a matrix a vector that is not stored in contiguous memory locations.

If Y is a one-dimensional array and INCY = -1 then the array will be accessed in reverse order.

If Y is a two-dimensional array and INCY = LDA then the vector will be a row of the array.

If Y is a two-dimensional array and INCY = LDA+1 then the vector will be a diagonal of the array.

xA

One-dimensional array that contains the input matrix on entry to the subroutine and the result matrix on exit. The matrix is in packed storage; the array must have at least enough elements to store the non-redundant elements of the matrix.

Sample Program

 
      PROGRAM TEST
      IMPLICIT NONE
C
      REAL       RZERO
      COMPLEX    ONE
      INTEGER    LENGTA, N
      PARAMETER (N = 3)
      PARAMETER (LENGTA = (N * N + N) / 2)
      PARAMETER (RZERO = 0.0E0)
C
      COMPLEX    AP(LENGTA), X(N), Y(N)
      INTEGER    I
C
      EXTERNAL   CHPR2
      INTRINSIC  CMPLX, CONJG, REAL
C
C     Initialize the array AP to store in packed Hermitian form
C     the matrix A shown below.  Initialize the arrays X and Y
C     to store the vectors x and y shown below.
C
C          1+0i  2+3i  5+6i        1-1i        4-4i
C     A =  2-3i  4+0i  7+8i    x = 2-2i    y = 4-4i
C          5-6i  7-8i  9+0i        3-3i        4-4i
C
      DATA AP / (1.0,8E8), (2.0,3.0), (4.0,8E8),
     $          (5.0,6.0), (7.0,8.0), (9.0,8E8) /
      DATA X / (1.0,-1.0), (2.0,-2.0), (3.0,-3.0) /
      DATA Y / (4.0,-4.0), (4.0,-4.0), (4.0,-4.0) /
C
      PRINT 1000
      PRINT 1010, REAL (AP(1)), RZERO, AP(2), AP(4)
      PRINT 1010, CONJG (AP(2)), REAL (AP(3)), RZERO, AP(5)
      PRINT 1010, CONJG (AP(4)), CONJG (AP(5)), REAL (AP(6)), 
     $   RZERO
      PRINT 1020
      PRINT 1030, AP
      PRINT 1040
      DO 20, I = 1, N
        PRINT 1050, X(I), Y(I)
   20 CONTINUE
      CALL CHPR2 ('UPPER TRIANGULAR A', N, ONE, X, 1, Y, 1, AP)
      PRINT 1060
      PRINT 1010, REAL (AP(1)), RZERO, AP(2), AP(4)
      PRINT 1010, CONJG (AP(2)), REAL (AP(3)), RZERO, AP(5)
      PRINT 1010, CONJG (AP(4)), CONJG (AP(5)), REAL (AP(6)), 
     $   RZERO
C
 1000 FORMAT (1X, 'A in full form:')
 1010 FORMAT (1X, 3(2X, '(', F5.1, ',', F5.1, ')'))
 1020 FORMAT (/1X, 'A in packed form:  (* in unused elements)')
 1030 FORMAT (4(: 3X, '(', F5.1, ',', F5.1, ')'))
 1040 FORMAT (/10X, 'x ', 13X, 'y')
 1050 FORMAT (1X, 2(2X, '(', F5.1, ',', F5.1, ')'))
 1060 FORMAT (/1X, 'A + xy'' + yx'':')
C
      END
 

Sample Output

 
 A in full form:
   (  1.0,  0.0)  (  2.0,  3.0)  (  5.0,  6.0)
   (  2.0, -3.0)  (  4.0,  0.0)  (  7.0,  8.0)
   (  5.0, -6.0)  (  7.0, -8.0)  (  9.0,  0.0)



 A in packed form:  (* in unused elements)
   (  1.0,*****)   (  2.0,  3.0)   (  4.0,*****)   (  5.0,  6.0)
   (  7.0,  8.0)   (  9.0,*****)



          x              y
   (  1.0, -1.0)  (  4.0, -4.0)
   (  2.0, -2.0)  (  4.0, -4.0)
   (  3.0, -3.0)  (  4.0, -4.0)



 A + xy' + yx':
   (  1.0,  0.0)  (  2.0,  3.0)  (  5.0,  6.0)
   (  2.0, -3.0)  (  4.0,  0.0)  (  7.0,  8.0)
   (  5.0, -6.0)  (  7.0, -8.0)  (  9.0,  0.0)






Previous Next Contents Generated Index Doc Set Home