![]() ![]() | ![]() |
Mise à jour de lapack vers la version 3.3.0.
1: SUBROUTINE DPTTS2( N, NRHS, D, E, B, LDB ) 2: * 3: * -- LAPACK routine (version 3.2) -- 4: * -- LAPACK is a software package provided by Univ. of Tennessee, -- 5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 6: * November 2006 7: * 8: * .. Scalar Arguments .. 9: INTEGER LDB, N, NRHS 10: * .. 11: * .. Array Arguments .. 12: DOUBLE PRECISION B( LDB, * ), D( * ), E( * ) 13: * .. 14: * 15: * Purpose 16: * ======= 17: * 18: * DPTTS2 solves a tridiagonal system of the form 19: * A * X = B 20: * using the L*D*L' factorization of A computed by DPTTRF. D is a 21: * diagonal matrix specified in the vector D, L is a unit bidiagonal 22: * matrix whose subdiagonal is specified in the vector E, and X and B 23: * are N by NRHS matrices. 24: * 25: * Arguments 26: * ========= 27: * 28: * N (input) INTEGER 29: * The order of the tridiagonal matrix A. N >= 0. 30: * 31: * NRHS (input) INTEGER 32: * The number of right hand sides, i.e., the number of columns 33: * of the matrix B. NRHS >= 0. 34: * 35: * D (input) DOUBLE PRECISION array, dimension (N) 36: * The n diagonal elements of the diagonal matrix D from the 37: * L*D*L' factorization of A. 38: * 39: * E (input) DOUBLE PRECISION array, dimension (N-1) 40: * The (n-1) subdiagonal elements of the unit bidiagonal factor 41: * L from the L*D*L' factorization of A. E can also be regarded 42: * as the superdiagonal of the unit bidiagonal factor U from the 43: * factorization A = U'*D*U. 44: * 45: * B (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS) 46: * On entry, the right hand side vectors B for the system of 47: * linear equations. 48: * On exit, the solution vectors, X. 49: * 50: * LDB (input) INTEGER 51: * The leading dimension of the array B. LDB >= max(1,N). 52: * 53: * ===================================================================== 54: * 55: * .. Local Scalars .. 56: INTEGER I, J 57: * .. 58: * .. External Subroutines .. 59: EXTERNAL DSCAL 60: * .. 61: * .. Executable Statements .. 62: * 63: * Quick return if possible 64: * 65: IF( N.LE.1 ) THEN 66: IF( N.EQ.1 ) 67: $ CALL DSCAL( NRHS, 1.D0 / D( 1 ), B, LDB ) 68: RETURN 69: END IF 70: * 71: * Solve A * X = B using the factorization A = L*D*L', 72: * overwriting each right hand side vector with its solution. 73: * 74: DO 30 J = 1, NRHS 75: * 76: * Solve L * x = b. 77: * 78: DO 10 I = 2, N 79: B( I, J ) = B( I, J ) - B( I-1, J )*E( I-1 ) 80: 10 CONTINUE 81: * 82: * Solve D * L' * x = b. 83: * 84: B( N, J ) = B( N, J ) / D( N ) 85: DO 20 I = N - 1, 1, -1 86: B( I, J ) = B( I, J ) / D( I ) - B( I+1, J )*E( I ) 87: 20 CONTINUE 88: 30 CONTINUE 89: * 90: RETURN 91: * 92: * End of DPTTS2 93: * 94: END