version 1.7, 2010/12/21 13:53:27
|
version 1.8, 2011/07/22 07:38:05
|
Line 1
|
Line 1
|
SUBROUTINE DGGGLM( N, M, P, A, LDA, B, LDB, D, X, Y, WORK, LWORK, |
SUBROUTINE DGGGLM( N, M, P, A, LDA, B, LDB, D, X, Y, WORK, LWORK, |
$ INFO ) |
$ INFO ) |
* |
* |
* -- LAPACK driver routine (version 3.2) -- |
* -- LAPACK driver routine (version 3.3.1) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* November 2006 |
* -- April 2011 -- |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER INFO, LDA, LDB, LWORK, M, N, P |
INTEGER INFO, LDA, LDB, LWORK, M, N, P |
Line 186
|
Line 186
|
* |
* |
* Compute the GQR factorization of matrices A and B: |
* Compute the GQR factorization of matrices A and B: |
* |
* |
* Q'*A = ( R11 ) M, Q'*B*Z' = ( T11 T12 ) M |
* Q**T*A = ( R11 ) M, Q**T*B*Z**T = ( T11 T12 ) M |
* ( 0 ) N-M ( 0 T22 ) N-M |
* ( 0 ) N-M ( 0 T22 ) N-M |
* M M+P-N N-M |
* M M+P-N N-M |
* |
* |
* where R11 and T22 are upper triangular, and Q and Z are |
* where R11 and T22 are upper triangular, and Q and Z are |
* orthogonal. |
* orthogonal. |
Line 197
|
Line 197
|
$ WORK( M+NP+1 ), LWORK-M-NP, INFO ) |
$ WORK( M+NP+1 ), LWORK-M-NP, INFO ) |
LOPT = WORK( M+NP+1 ) |
LOPT = WORK( M+NP+1 ) |
* |
* |
* Update left-hand-side vector d = Q'*d = ( d1 ) M |
* Update left-hand-side vector d = Q**T*d = ( d1 ) M |
* ( d2 ) N-M |
* ( d2 ) N-M |
* |
* |
CALL DORMQR( 'Left', 'Transpose', N, 1, M, A, LDA, WORK, D, |
CALL DORMQR( 'Left', 'Transpose', N, 1, M, A, LDA, WORK, D, |
$ MAX( 1, N ), WORK( M+NP+1 ), LWORK-M-NP, INFO ) |
$ MAX( 1, N ), WORK( M+NP+1 ), LWORK-M-NP, INFO ) |
Line 245
|
Line 245
|
CALL DCOPY( M, D, 1, X, 1 ) |
CALL DCOPY( M, D, 1, X, 1 ) |
END IF |
END IF |
* |
* |
* Backward transformation y = Z'*y |
* Backward transformation y = Z**T *y |
* |
* |
CALL DORMRQ( 'Left', 'Transpose', P, 1, NP, |
CALL DORMRQ( 'Left', 'Transpose', P, 1, NP, |
$ B( MAX( 1, N-P+1 ), 1 ), LDB, WORK( M+1 ), Y, |
$ B( MAX( 1, N-P+1 ), 1 ), LDB, WORK( M+1 ), Y, |