version 1.6, 2010/08/13 21:03:46
|
version 1.8, 2011/07/22 07:38:05
|
Line 1
|
Line 1
|
SUBROUTINE DGGLSE( M, N, P, A, LDA, B, LDB, C, D, X, WORK, LWORK, |
SUBROUTINE DGGLSE( M, N, P, A, LDA, B, LDB, C, D, X, 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 183
|
Line 183
|
* |
* |
* Compute the GRQ factorization of matrices B and A: |
* Compute the GRQ factorization of matrices B and A: |
* |
* |
* B*Q' = ( 0 T12 ) P Z'*A*Q' = ( R11 R12 ) N-P |
* B*Q**T = ( 0 T12 ) P Z**T*A*Q**T = ( R11 R12 ) N-P |
* N-P P ( 0 R22 ) M+P-N |
* N-P P ( 0 R22 ) M+P-N |
* N-P P |
* N-P P |
* |
* |
* where T12 and R11 are upper triangular, and Q and Z are |
* where T12 and R11 are upper triangular, and Q and Z are |
* orthogonal. |
* orthogonal. |
Line 194
|
Line 194
|
$ WORK( P+MN+1 ), LWORK-P-MN, INFO ) |
$ WORK( P+MN+1 ), LWORK-P-MN, INFO ) |
LOPT = WORK( P+MN+1 ) |
LOPT = WORK( P+MN+1 ) |
* |
* |
* Update c = Z'*c = ( c1 ) N-P |
* Update c = Z**T *c = ( c1 ) N-P |
* ( c2 ) M+P-N |
* ( c2 ) M+P-N |
* |
* |
CALL DORMQR( 'Left', 'Transpose', M, 1, MN, A, LDA, WORK( P+1 ), |
CALL DORMQR( 'Left', 'Transpose', M, 1, MN, A, LDA, WORK( P+1 ), |
$ C, MAX( 1, M ), WORK( P+MN+1 ), LWORK-P-MN, INFO ) |
$ C, MAX( 1, M ), WORK( P+MN+1 ), LWORK-P-MN, INFO ) |
Line 254
|
Line 254
|
CALL DAXPY( NR, -ONE, D, 1, C( N-P+1 ), 1 ) |
CALL DAXPY( NR, -ONE, D, 1, C( N-P+1 ), 1 ) |
END IF |
END IF |
* |
* |
* Backward transformation x = Q'*x |
* Backward transformation x = Q**T*x |
* |
* |
CALL DORMRQ( 'Left', 'Transpose', N, 1, P, B, LDB, WORK( 1 ), X, |
CALL DORMRQ( 'Left', 'Transpose', N, 1, P, B, LDB, WORK( 1 ), X, |
$ N, WORK( P+MN+1 ), LWORK-P-MN, INFO ) |
$ N, WORK( P+MN+1 ), LWORK-P-MN, INFO ) |