cggsvp.f.html

来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 427 行 · 第 1/3 页

HTML
427
字号
</span>         CALL <a name="CGERQ2.268"></a><a href="cgerq2.f.html#CGERQ2.1">CGERQ2</a>( L, N, B, LDB, TAU, WORK, INFO )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Update A := A*Z'
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CUNMR2.272"></a><a href="cunmr2.f.html#CUNMR2.1">CUNMR2</a>( <span class="string">'Right'</span>, <span class="string">'Conjugate transpose'</span>, M, N, L, B, LDB,
     $                TAU, A, LDA, WORK, INFO )
         IF( WANTQ ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Update Q := Q*Z'
</span><span class="comment">*</span><span class="comment">
</span>            CALL <a name="CUNMR2.278"></a><a href="cunmr2.f.html#CUNMR2.1">CUNMR2</a>( <span class="string">'Right'</span>, <span class="string">'Conjugate transpose'</span>, N, N, L, B,
     $                   LDB, TAU, Q, LDQ, WORK, INFO )
         END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Clean up B
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CLASET.284"></a><a href="claset.f.html#CLASET.1">CLASET</a>( <span class="string">'Full'</span>, L, N-L, CZERO, CZERO, B, LDB )
         DO 60 J = N - L + 1, N
            DO 50 I = J - N + L + 1, L
               B( I, J ) = CZERO
   50       CONTINUE
   60    CONTINUE
<span class="comment">*</span><span class="comment">
</span>      END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Let              N-L     L
</span><span class="comment">*</span><span class="comment">                A = ( A11    A12 ) M,
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     then the following does the complete QR decomposition of A11:
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              A11 = U*(  0  T12 )*P1'
</span><span class="comment">*</span><span class="comment">                      (  0   0  )
</span><span class="comment">*</span><span class="comment">
</span>      DO 70 I = 1, N - L
         IWORK( I ) = 0
   70 CONTINUE
      CALL <a name="CGEQPF.304"></a><a href="cgeqpf.f.html#CGEQPF.1">CGEQPF</a>( M, N-L, A, LDA, IWORK, TAU, WORK, RWORK, INFO )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Determine the effective rank of A11
</span><span class="comment">*</span><span class="comment">
</span>      K = 0
      DO 80 I = 1, MIN( M, N-L )
         IF( CABS1( A( I, I ) ).GT.TOLA )
     $      K = K + 1
   80 CONTINUE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Update A12 := U'*A12, where A12 = A( 1:M, N-L+1:N )
</span><span class="comment">*</span><span class="comment">
</span>      CALL <a name="CUNM2R.316"></a><a href="cunm2r.f.html#CUNM2R.1">CUNM2R</a>( <span class="string">'Left'</span>, <span class="string">'Conjugate transpose'</span>, M, L, MIN( M, N-L ),
     $             A, LDA, TAU, A( 1, N-L+1 ), LDA, WORK, INFO )
<span class="comment">*</span><span class="comment">
</span>      IF( WANTU ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Copy the details of U, and form U
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CLASET.323"></a><a href="claset.f.html#CLASET.1">CLASET</a>( <span class="string">'Full'</span>, M, M, CZERO, CZERO, U, LDU )
         IF( M.GT.1 )
     $      CALL <a name="CLACPY.325"></a><a href="clacpy.f.html#CLACPY.1">CLACPY</a>( <span class="string">'Lower'</span>, M-1, N-L, A( 2, 1 ), LDA, U( 2, 1 ),
     $                   LDU )
         CALL <a name="CUNG2R.327"></a><a href="cung2r.f.html#CUNG2R.1">CUNG2R</a>( M, M, MIN( M, N-L ), U, LDU, TAU, WORK, INFO )
      END IF
<span class="comment">*</span><span class="comment">
</span>      IF( WANTQ ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Update Q( 1:N, 1:N-L )  = Q( 1:N, 1:N-L )*P1
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CLAPMT.334"></a><a href="clapmt.f.html#CLAPMT.1">CLAPMT</a>( FORWRD, N, N-L, Q, LDQ, IWORK )
      END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Clean up A: set the strictly lower triangular part of
</span><span class="comment">*</span><span class="comment">     A(1:K, 1:K) = 0, and A( K+1:M, 1:N-L ) = 0.
</span><span class="comment">*</span><span class="comment">
</span>      DO 100 J = 1, K - 1
         DO 90 I = J + 1, K
            A( I, J ) = CZERO
   90    CONTINUE
  100 CONTINUE
      IF( M.GT.K )
     $   CALL <a name="CLASET.346"></a><a href="claset.f.html#CLASET.1">CLASET</a>( <span class="string">'Full'</span>, M-K, N-L, CZERO, CZERO, A( K+1, 1 ), LDA )
<span class="comment">*</span><span class="comment">
</span>      IF( N-L.GT.K ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        RQ factorization of ( T11 T12 ) = ( 0 T12 )*Z1
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CGERQ2.352"></a><a href="cgerq2.f.html#CGERQ2.1">CGERQ2</a>( K, N-L, A, LDA, TAU, WORK, INFO )
<span class="comment">*</span><span class="comment">
</span>         IF( WANTQ ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Update Q( 1:N,1:N-L ) = Q( 1:N,1:N-L )*Z1'
</span><span class="comment">*</span><span class="comment">
</span>            CALL <a name="CUNMR2.358"></a><a href="cunmr2.f.html#CUNMR2.1">CUNMR2</a>( <span class="string">'Right'</span>, <span class="string">'Conjugate transpose'</span>, N, N-L, K, A,
     $                   LDA, TAU, Q, LDQ, WORK, INFO )
         END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Clean up A
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CLASET.364"></a><a href="claset.f.html#CLASET.1">CLASET</a>( <span class="string">'Full'</span>, K, N-L-K, CZERO, CZERO, A, LDA )
         DO 120 J = N - L - K + 1, N - L
            DO 110 I = J - N + L + K + 1, K
               A( I, J ) = CZERO
  110       CONTINUE
  120    CONTINUE
<span class="comment">*</span><span class="comment">
</span>      END IF
<span class="comment">*</span><span class="comment">
</span>      IF( M.GT.K ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        QR factorization of A( K+1:M,N-L+1:N )
</span><span class="comment">*</span><span class="comment">
</span>         CALL <a name="CGEQR2.377"></a><a href="cgeqr2.f.html#CGEQR2.1">CGEQR2</a>( M-K, L, A( K+1, N-L+1 ), LDA, TAU, WORK, INFO )
<span class="comment">*</span><span class="comment">
</span>         IF( WANTU ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Update U(:,K+1:M) := U(:,K+1:M)*U1
</span><span class="comment">*</span><span class="comment">
</span>            CALL <a name="CUNM2R.383"></a><a href="cunm2r.f.html#CUNM2R.1">CUNM2R</a>( <span class="string">'Right'</span>, <span class="string">'No transpose'</span>, M, M-K, MIN( M-K, L ),
     $                   A( K+1, N-L+1 ), LDA, TAU, U( 1, K+1 ), LDU,
     $                   WORK, INFO )
         END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Clean up
</span><span class="comment">*</span><span class="comment">
</span>         DO 140 J = N - L + 1, N
            DO 130 I = J - N + K + L + 1, M
               A( I, J ) = CZERO
  130       CONTINUE
  140    CONTINUE
<span class="comment">*</span><span class="comment">
</span>      END IF
<span class="comment">*</span><span class="comment">
</span>      RETURN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     End of <a name="CGGSVP.400"></a><a href="cggsvp.f.html#CGGSVP.1">CGGSVP</a>
</span><span class="comment">*</span><span class="comment">
</span>      END

</pre>

 </body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?