sggsvp.f.html
来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 418 行 · 第 1/3 页
HTML
418 行
</span> CALL <a name="SORMR2.262"></a><a href="sormr2.f.html#SORMR2.1">SORMR2</a>( <span class="string">'Right'</span>, <span class="string">'Transpose'</span>, M, N, L, B, LDB, TAU, A,
$ LDA, 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 := Q*Z'
</span><span class="comment">*</span><span class="comment">
</span> CALL <a name="SORMR2.269"></a><a href="sormr2.f.html#SORMR2.1">SORMR2</a>( <span class="string">'Right'</span>, <span class="string">'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="SLASET.275"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'Full'</span>, L, N-L, ZERO, ZERO, B, LDB )
DO 60 J = N - L + 1, N
DO 50 I = J - N + L + 1, L
B( I, J ) = ZERO
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="SGEQPF.295"></a><a href="sgeqpf.f.html#SGEQPF.1">SGEQPF</a>( M, N-L, A, LDA, IWORK, TAU, WORK, 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( ABS( 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="SORM2R.307"></a><a href="sorm2r.f.html#SORM2R.1">SORM2R</a>( <span class="string">'Left'</span>, <span class="string">'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="SLASET.314"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'Full'</span>, M, M, ZERO, ZERO, U, LDU )
IF( M.GT.1 )
$ CALL <a name="SLACPY.316"></a><a href="slacpy.f.html#SLACPY.1">SLACPY</a>( <span class="string">'Lower'</span>, M-1, N-L, A( 2, 1 ), LDA, U( 2, 1 ),
$ LDU )
CALL <a name="SORG2R.318"></a><a href="sorg2r.f.html#SORG2R.1">SORG2R</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="SLAPMT.325"></a><a href="slapmt.f.html#SLAPMT.1">SLAPMT</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 ) = ZERO
90 CONTINUE
100 CONTINUE
IF( M.GT.K )
$ CALL <a name="SLASET.337"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'Full'</span>, M-K, N-L, ZERO, ZERO, 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="SGERQ2.343"></a><a href="sgerq2.f.html#SGERQ2.1">SGERQ2</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="SORMR2.349"></a><a href="sormr2.f.html#SORMR2.1">SORMR2</a>( <span class="string">'Right'</span>, <span class="string">'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="SLASET.355"></a><a href="slaset.f.html#SLASET.1">SLASET</a>( <span class="string">'Full'</span>, K, N-L-K, ZERO, ZERO, A, LDA )
DO 120 J = N - L - K + 1, N - L
DO 110 I = J - N + L + K + 1, K
A( I, J ) = ZERO
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="SGEQR2.368"></a><a href="sgeqr2.f.html#SGEQR2.1">SGEQR2</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="SORM2R.374"></a><a href="sorm2r.f.html#SORM2R.1">SORM2R</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 ) = ZERO
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="SGGSVP.391"></a><a href="sggsvp.f.html#SGGSVP.1">SGGSVP</a>
</span><span class="comment">*</span><span class="comment">
</span> END
</pre>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?