clabrd.f.html

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

HTML
353
字号
     $   RETURN
<span class="comment">*</span><span class="comment">
</span>      IF( M.GE.N ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Reduce to upper bidiagonal form
</span><span class="comment">*</span><span class="comment">
</span>         DO 10 I = 1, NB
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Update A(i:m,i)
</span><span class="comment">*</span><span class="comment">
</span>            CALL <a name="CLACGV.169"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, Y( I, 1 ), LDY )
            CALL CGEMV( <span class="string">'No transpose'</span>, M-I+1, I-1, -ONE, A( I, 1 ),
     $                  LDA, Y( I, 1 ), LDY, ONE, A( I, I ), 1 )
            CALL <a name="CLACGV.172"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, Y( I, 1 ), LDY )
            CALL CGEMV( <span class="string">'No transpose'</span>, M-I+1, I-1, -ONE, X( I, 1 ),
     $                  LDX, A( 1, I ), 1, ONE, A( I, I ), 1 )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Generate reflection Q(i) to annihilate A(i+1:m,i)
</span><span class="comment">*</span><span class="comment">
</span>            ALPHA = A( I, I )
            CALL <a name="CLARFG.179"></a><a href="clarfg.f.html#CLARFG.1">CLARFG</a>( M-I+1, ALPHA, A( MIN( I+1, M ), I ), 1,
     $                   TAUQ( I ) )
            D( I ) = ALPHA
            IF( I.LT.N ) THEN
               A( I, I ) = ONE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Compute Y(i+1:n,i)
</span><span class="comment">*</span><span class="comment">
</span>               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, M-I+1, N-I, ONE,
     $                     A( I, I+1 ), LDA, A( I, I ), 1, ZERO,
     $                     Y( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, M-I+1, I-1, ONE,
     $                     A( I, 1 ), LDA, A( I, I ), 1, ZERO,
     $                     Y( 1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, N-I, I-1, -ONE, Y( I+1, 1 ),
     $                     LDY, Y( 1, I ), 1, ONE, Y( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, M-I+1, I-1, ONE,
     $                     X( I, 1 ), LDX, A( I, I ), 1, ZERO,
     $                     Y( 1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, I-1, N-I, -ONE,
     $                     A( 1, I+1 ), LDA, Y( 1, I ), 1, ONE,
     $                     Y( I+1, I ), 1 )
               CALL CSCAL( N-I, TAUQ( I ), Y( I+1, I ), 1 )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Update A(i,i+1:n)
</span><span class="comment">*</span><span class="comment">
</span>               CALL <a name="CLACGV.205"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( N-I, A( I, I+1 ), LDA )
               CALL <a name="CLACGV.206"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I, A( I, 1 ), LDA )
               CALL CGEMV( <span class="string">'No transpose'</span>, N-I, I, -ONE, Y( I+1, 1 ),
     $                     LDY, A( I, 1 ), LDA, ONE, A( I, I+1 ), LDA )
               CALL <a name="CLACGV.209"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I, A( I, 1 ), LDA )
               CALL <a name="CLACGV.210"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, X( I, 1 ), LDX )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, I-1, N-I, -ONE,
     $                     A( 1, I+1 ), LDA, X( I, 1 ), LDX, ONE,
     $                     A( I, I+1 ), LDA )
               CALL <a name="CLACGV.214"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, X( I, 1 ), LDX )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Generate reflection P(i) to annihilate A(i,i+2:n)
</span><span class="comment">*</span><span class="comment">
</span>               ALPHA = A( I, I+1 )
               CALL <a name="CLARFG.219"></a><a href="clarfg.f.html#CLARFG.1">CLARFG</a>( N-I, ALPHA, A( I, MIN( I+2, N ) ),
     $                      LDA, TAUP( I ) )
               E( I ) = ALPHA
               A( I, I+1 ) = ONE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Compute X(i+1:m,i)
</span><span class="comment">*</span><span class="comment">
</span>               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, N-I, ONE, A( I+1, I+1 ),
     $                     LDA, A( I, I+1 ), LDA, ZERO, X( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, N-I, I, ONE,
     $                     Y( I+1, 1 ), LDY, A( I, I+1 ), LDA, ZERO,
     $                     X( 1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, I, -ONE, A( I+1, 1 ),
     $                     LDA, X( 1, I ), 1, ONE, X( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, I-1, N-I, ONE, A( 1, I+1 ),
     $                     LDA, A( I, I+1 ), LDA, ZERO, X( 1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, I-1, -ONE, X( I+1, 1 ),
     $                     LDX, X( 1, I ), 1, ONE, X( I+1, I ), 1 )
               CALL CSCAL( M-I, TAUP( I ), X( I+1, I ), 1 )
               CALL <a name="CLACGV.238"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( N-I, A( I, I+1 ), LDA )
            END IF
   10    CONTINUE
      ELSE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Reduce to lower bidiagonal form
</span><span class="comment">*</span><span class="comment">
</span>         DO 20 I = 1, NB
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Update A(i,i:n)
</span><span class="comment">*</span><span class="comment">
</span>            CALL <a name="CLACGV.249"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( N-I+1, A( I, I ), LDA )
            CALL <a name="CLACGV.250"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, A( I, 1 ), LDA )
            CALL CGEMV( <span class="string">'No transpose'</span>, N-I+1, I-1, -ONE, Y( I, 1 ),
     $                  LDY, A( I, 1 ), LDA, ONE, A( I, I ), LDA )
            CALL <a name="CLACGV.253"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, A( I, 1 ), LDA )
            CALL <a name="CLACGV.254"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, X( I, 1 ), LDX )
            CALL CGEMV( <span class="string">'Conjugate transpose'</span>, I-1, N-I+1, -ONE,
     $                  A( 1, I ), LDA, X( I, 1 ), LDX, ONE, A( I, I ),
     $                  LDA )
            CALL <a name="CLACGV.258"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, X( I, 1 ), LDX )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Generate reflection P(i) to annihilate A(i,i+1:n)
</span><span class="comment">*</span><span class="comment">
</span>            ALPHA = A( I, I )
            CALL <a name="CLARFG.263"></a><a href="clarfg.f.html#CLARFG.1">CLARFG</a>( N-I+1, ALPHA, A( I, MIN( I+1, N ) ), LDA,
     $                   TAUP( I ) )
            D( I ) = ALPHA
            IF( I.LT.M ) THEN
               A( I, I ) = ONE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Compute X(i+1:m,i)
</span><span class="comment">*</span><span class="comment">
</span>               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, N-I+1, ONE, A( I+1, I ),
     $                     LDA, A( I, I ), LDA, ZERO, X( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, N-I+1, I-1, ONE,
     $                     Y( I, 1 ), LDY, A( I, I ), LDA, ZERO,
     $                     X( 1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, I-1, -ONE, A( I+1, 1 ),
     $                     LDA, X( 1, I ), 1, ONE, X( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, I-1, N-I+1, ONE, A( 1, I ),
     $                     LDA, A( I, I ), LDA, ZERO, X( 1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, I-1, -ONE, X( I+1, 1 ),
     $                     LDX, X( 1, I ), 1, ONE, X( I+1, I ), 1 )
               CALL CSCAL( M-I, TAUP( I ), X( I+1, I ), 1 )
               CALL <a name="CLACGV.283"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( N-I+1, A( I, I ), LDA )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Update A(i+1:m,i)
</span><span class="comment">*</span><span class="comment">
</span>               CALL <a name="CLACGV.287"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, Y( I, 1 ), LDY )
               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, I-1, -ONE, A( I+1, 1 ),
     $                     LDA, Y( I, 1 ), LDY, ONE, A( I+1, I ), 1 )
               CALL <a name="CLACGV.290"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( I-1, Y( I, 1 ), LDY )
               CALL CGEMV( <span class="string">'No transpose'</span>, M-I, I, -ONE, X( I+1, 1 ),
     $                     LDX, A( 1, I ), 1, ONE, A( I+1, I ), 1 )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Generate reflection Q(i) to annihilate A(i+2:m,i)
</span><span class="comment">*</span><span class="comment">
</span>               ALPHA = A( I+1, I )
               CALL <a name="CLARFG.297"></a><a href="clarfg.f.html#CLARFG.1">CLARFG</a>( M-I, ALPHA, A( MIN( I+2, M ), I ), 1,
     $                      TAUQ( I ) )
               E( I ) = ALPHA
               A( I+1, I ) = ONE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              Compute Y(i+1:n,i)
</span><span class="comment">*</span><span class="comment">
</span>               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, M-I, N-I, ONE,
     $                     A( I+1, I+1 ), LDA, A( I+1, I ), 1, ZERO,
     $                     Y( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, M-I, I-1, ONE,
     $                     A( I+1, 1 ), LDA, A( I+1, I ), 1, ZERO,
     $                     Y( 1, I ), 1 )
               CALL CGEMV( <span class="string">'No transpose'</span>, N-I, I-1, -ONE, Y( I+1, 1 ),
     $                     LDY, Y( 1, I ), 1, ONE, Y( I+1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, M-I, I, ONE,
     $                     X( I+1, 1 ), LDX, A( I+1, I ), 1, ZERO,
     $                     Y( 1, I ), 1 )
               CALL CGEMV( <span class="string">'Conjugate transpose'</span>, I, N-I, -ONE,
     $                     A( 1, I+1 ), LDA, Y( 1, I ), 1, ONE,
     $                     Y( I+1, I ), 1 )
               CALL CSCAL( N-I, TAUQ( I ), Y( I+1, I ), 1 )
            ELSE
               CALL <a name="CLACGV.320"></a><a href="clacgv.f.html#CLACGV.1">CLACGV</a>( N-I+1, A( I, I ), LDA )
            END IF
   20    CONTINUE
      END IF
      RETURN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     End of <a name="CLABRD.326"></a><a href="clabrd.f.html#CLABRD.1">CLABRD</a>
</span><span class="comment">*</span><span class="comment">
</span>      END

</pre>

 </body>
</html>

⌨️ 快捷键说明

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