SROTI/DROTI |
| Apply sparse Givens rotation |
| indx | Array containing the indices {ki} of the interesting |
|
| elements of x. The indices must satisfy the following: |
|
| 1 ≤ indx(i) ≤ n, i = 1, 2, …, m |
|
| indx(i) ≠ indx( j), 1 ≤ i ≠ j ≤ m |
|
| where n is the length of y. |
| y | Array containing the elements of y, y(i) = yi. |
| c | The scalar c. |
| s | The scalar s. |
Output | x and y | If m ≤ 0 or if c = 1 and s = 0, then x and y are |
|
| unchanged. Otherwise, the result vectors overwrite the |
|
| input. Only the elements of y whose indices are |
|
| included in indx are changed. |
Notes The result is unspecified if any element of indx is out of range, if any two elements of indx have the same value, or if x, indx, and y overlap such that any index or any element of x or y share a memory location.
Fortran Equivalent
SUBROUTINE SROTI (M, X,INDX, Y, C,S) REAL*4 C,S,TEMP,X(*),Y(*)
INTEGER*4 INDX(*)
IF ( M .LE. 0 ) RETURN
IF ( C .EQ. 1.0 .AND. S .EQ. 0.00 ) RETURN DO 10 I = 1, M
TEMP = C * X(I) + S * Y(INDX(I)) Y(INDX(I)) = C * Y(INDX(I)) - S * X(I) X(I) = TEMP
10CONTINUE RETURN END
Example Apply a Givens rotation to x and y, where x is a sparse vector with interesting elements x1, x4, x5, and x9 stored in
INTEGER*4 | M,INDX(4) |
REAL*8 | X(4),Y(20),C,S |
DATA | INDX / 1, 4, 5, 9 / |
M = 4 |
|
CALL DROTI (M,X,INDX,Y,C,S)
122HP MLIB User’s Guide