sgtsv.f.html
来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 287 行 · 第 1/2 页
HTML
287 行
TEMP = D( I+1 )
D( I+1 ) = DU( I ) - FACT*TEMP
DL( I ) = DU( I+1 )
DU( I+1 ) = -FACT*DL( I )
DU( I ) = TEMP
TEMP = B( I, 1 )
B( I, 1 ) = B( I+1, 1 )
B( I+1, 1 ) = TEMP - FACT*B( I+1, 1 )
END IF
10 CONTINUE
IF( N.GT.1 ) THEN
I = N - 1
IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
IF( D( I ).NE.ZERO ) THEN
FACT = DL( I ) / D( I )
D( I+1 ) = D( I+1 ) - FACT*DU( I )
B( I+1, 1 ) = B( I+1, 1 ) - FACT*B( I, 1 )
ELSE
INFO = I
RETURN
END IF
ELSE
FACT = D( I ) / DL( I )
D( I ) = DL( I )
TEMP = D( I+1 )
D( I+1 ) = DU( I ) - FACT*TEMP
DU( I ) = TEMP
TEMP = B( I, 1 )
B( I, 1 ) = B( I+1, 1 )
B( I+1, 1 ) = TEMP - FACT*B( I+1, 1 )
END IF
END IF
IF( D( N ).EQ.ZERO ) THEN
INFO = N
RETURN
END IF
ELSE
DO 40 I = 1, N - 2
IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> No row interchange required
</span><span class="comment">*</span><span class="comment">
</span> IF( D( I ).NE.ZERO ) THEN
FACT = DL( I ) / D( I )
D( I+1 ) = D( I+1 ) - FACT*DU( I )
DO 20 J = 1, NRHS
B( I+1, J ) = B( I+1, J ) - FACT*B( I, J )
20 CONTINUE
ELSE
INFO = I
RETURN
END IF
DL( I ) = ZERO
ELSE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Interchange rows I and I+1
</span><span class="comment">*</span><span class="comment">
</span> FACT = D( I ) / DL( I )
D( I ) = DL( I )
TEMP = D( I+1 )
D( I+1 ) = DU( I ) - FACT*TEMP
DL( I ) = DU( I+1 )
DU( I+1 ) = -FACT*DL( I )
DU( I ) = TEMP
DO 30 J = 1, NRHS
TEMP = B( I, J )
B( I, J ) = B( I+1, J )
B( I+1, J ) = TEMP - FACT*B( I+1, J )
30 CONTINUE
END IF
40 CONTINUE
IF( N.GT.1 ) THEN
I = N - 1
IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
IF( D( I ).NE.ZERO ) THEN
FACT = DL( I ) / D( I )
D( I+1 ) = D( I+1 ) - FACT*DU( I )
DO 50 J = 1, NRHS
B( I+1, J ) = B( I+1, J ) - FACT*B( I, J )
50 CONTINUE
ELSE
INFO = I
RETURN
END IF
ELSE
FACT = D( I ) / DL( I )
D( I ) = DL( I )
TEMP = D( I+1 )
D( I+1 ) = DU( I ) - FACT*TEMP
DU( I ) = TEMP
DO 60 J = 1, NRHS
TEMP = B( I, J )
B( I, J ) = B( I+1, J )
B( I+1, J ) = TEMP - FACT*B( I+1, J )
60 CONTINUE
END IF
END IF
IF( D( N ).EQ.ZERO ) THEN
INFO = N
RETURN
END IF
END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Back solve with the matrix U from the factorization.
</span><span class="comment">*</span><span class="comment">
</span> IF( NRHS.LE.2 ) THEN
J = 1
70 CONTINUE
B( N, J ) = B( N, J ) / D( N )
IF( N.GT.1 )
$ B( N-1, J ) = ( B( N-1, J )-DU( N-1 )*B( N, J ) ) / D( N-1 )
DO 80 I = N - 2, 1, -1
B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J )-DL( I )*
$ B( I+2, J ) ) / D( I )
80 CONTINUE
IF( J.LT.NRHS ) THEN
J = J + 1
GO TO 70
END IF
ELSE
DO 100 J = 1, NRHS
B( N, J ) = B( N, J ) / D( N )
IF( N.GT.1 )
$ B( N-1, J ) = ( B( N-1, J )-DU( N-1 )*B( N, J ) ) /
$ D( N-1 )
DO 90 I = N - 2, 1, -1
B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J )-DL( I )*
$ B( I+2, J ) ) / D( I )
90 CONTINUE
100 CONTINUE
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="SGTSV.260"></a><a href="sgtsv.f.html#SGTSV.1">SGTSV</a>
</span><span class="comment">*</span><span class="comment">
</span> END
</pre>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?