version 1.7, 2010/12/21 13:53:25
|
version 1.8, 2011/07/22 07:38:04
|
Line 1
|
Line 1
|
SUBROUTINE DGELSY( M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK, |
SUBROUTINE DGELSY( M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK, |
$ WORK, LWORK, INFO ) |
$ WORK, LWORK, 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, NRHS, RANK |
INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK |
Line 42
|
Line 42
|
* A * P = Q * [ T11 0 ] * Z |
* A * P = Q * [ T11 0 ] * Z |
* [ 0 0 ] |
* [ 0 0 ] |
* The minimum-norm solution is then |
* The minimum-norm solution is then |
* X = P * Z' [ inv(T11)*Q1'*B ] |
* X = P * Z**T [ inv(T11)*Q1**T*B ] |
* [ 0 ] |
* [ 0 ] |
* where Q1 consists of the first RANK columns of Q. |
* where Q1 consists of the first RANK columns of Q. |
* |
* |
* This routine is basically identical to the original xGELSX except |
* This routine is basically identical to the original xGELSX except |
Line 325
|
Line 325
|
* workspace: 2*MN. |
* workspace: 2*MN. |
* Details of Householder rotations stored in WORK(MN+1:2*MN) |
* Details of Householder rotations stored in WORK(MN+1:2*MN) |
* |
* |
* B(1:M,1:NRHS) := Q' * B(1:M,1:NRHS) |
* B(1:M,1:NRHS) := Q**T * B(1:M,1:NRHS) |
* |
* |
CALL DORMQR( 'Left', 'Transpose', M, NRHS, MN, A, LDA, WORK( 1 ), |
CALL DORMQR( 'Left', 'Transpose', M, NRHS, MN, A, LDA, WORK( 1 ), |
$ B, LDB, WORK( 2*MN+1 ), LWORK-2*MN, INFO ) |
$ B, LDB, WORK( 2*MN+1 ), LWORK-2*MN, INFO ) |
Line 344
|
Line 344
|
30 CONTINUE |
30 CONTINUE |
40 CONTINUE |
40 CONTINUE |
* |
* |
* B(1:N,1:NRHS) := Y' * B(1:N,1:NRHS) |
* B(1:N,1:NRHS) := Y**T * B(1:N,1:NRHS) |
* |
* |
IF( RANK.LT.N ) THEN |
IF( RANK.LT.N ) THEN |
CALL DORMRZ( 'Left', 'Transpose', N, NRHS, RANK, N-RANK, A, |
CALL DORMRZ( 'Left', 'Transpose', N, NRHS, RANK, N-RANK, A, |