Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 22x 22x 22x 22x 22x 22x 22x 13x 13x 22x 3x 3x 22x 4x 4x 22x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 22x 2x 2x 2x 2x 2x | /**
* @license Apache-2.0
*
* Copyright (c) 2026 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
// MODULES //
var isLayout = require( '@stdlib/blas/base/assert/is-layout' );
var isColumnMajor = require( '@stdlib/ndarray/base/assert/is-column-major-string' );
var format = require( '@stdlib/string/format' );
var base = require( './base.js' );
// MAIN //
/**
* Computes the reciprocal pivot growth factor norm(A)/norm(U) for a general banded matrix `A`.
*
* ## Notes
*
* - The norm is used. If this is much less than 1, the stability of the LU factorization of the (equilibrated) matrix `A` could be poor. This also means that the solution `X`, estimated condition numbers, and error bounds could be unreliable.
* - Matrix `AB` is the matrix A in band storage, in rows 0 to `KL+KU`. The j-th column of A is stored in the j-th column of the matrix `AB` as `AB( KU+i-j, j ) = A( i, j )` for `max( 0, j - KU ) <= i <= min( N - 1, j + KL )`.
* - Matrix `AFB` stores the details of the LU factorization of the band matrix `A`, as computed by `DGBTRF`. `U` is stored as an upper triangular band matrix with KL+KU superdiagonals in rows 0 to `KL+KU+1`, and the multipliers used during the factorization are stored in rows `KL+KU+1` to `2*KL+KU`.
* - The leading dimension of `AB`, `LDAB` >= `KL+KU+1`.
* - The leading dimension of `AFB`, `LDAFB` >= `2*KL+KU+1`.
*
* @param {string} order - order of matrix `A`
* @param {NonNegativeInteger} N - number of rows in matrix `A`
* @param {NonNegativeInteger} KL - number of subdiagonals within the band of matrix `A`
* @param {NonNegativeInteger} KU - number of superdiagonals within the band of matrix `A`
* @param {NonNegativeInteger} NCOLS - number of columns in matrix `A`
* @param {Float64Array} AB - the matrix `A` in band storage
* @param {PositiveInteger} LDAB - the leading dimension of the matrix `AB`
* @param {Float64Array} AFB - details of the LU factorization of the band matrix `A`
* @param {PositiveInteger} LDAFB - the leading dimension of the matrix `AFB`
* @throws {TypeError} first argument must be a valid order
* @throws {RangeError} seventh argument must be >= KL+KU+1
* @throws {RangeError} ninth argument must be >= 2*KL+KU+1
* @returns {number} the reciprocal pivot growth factor
*
* @example
* var Float64Array = require( '@stdlib/array/float64' );
*
* var AB = new Float64Array( [ 0.0, 2.0, 5.0, 8.0, 1.0, 4.0, 7.0, 10.0, 3.0, 6.0, 9.0, 0.0 ] );
* var AFB = new Float64Array( [ 0.0, 0.0, 5.0, 8.0, 0.0, 4.0, 7.0, 10.0, 3.0, 6.0, 9.0, 1.8272, 0.3333, 0.1111, -0.2716, 0.0 ] );
*
* var out = dlagbrpvgrw( 'row-major', 4, 1, 1, 4, AB, 3, AFB, 4 );
* // returns 1.0
*/
function dlagbrpvgrw( order, N, KL, KU, NCOLS, AB, LDAB, AFB, LDAFB ) {
var safb1;
var safb2;
var sab1;
var sab2;
if ( !isLayout( order ) ) {
throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) );
}
if ( LDAB < KL + KU + 1 ) {
throw new RangeError( format( 'invalid argument. Seventh argument must be greater than or equal to KL + KU + 1 = %d. Value: `%d`.', KL + KU + 1, LDAB ) );
}
if ( LDAFB < ( 2*KL ) + KU + 1 ) {
throw new RangeError( format( 'invalid argument. Ninth argument must be greater than or equal to ( 2*KL ) + KU + 1 = %d. Value: `%d`.', ( 2*KL ) + KU + 1, LDAFB ) );
}
if ( isColumnMajor( order ) ) {
sab1 = 1;
sab2 = LDAB;
safb1 = 1;
safb2 = LDAFB;
} else { // order === 'row-major'
sab1 = N;
sab2 = 1;
safb1 = N;
safb2 = 1;
}
return base( N, KL, KU, NCOLS, AB, sab1, sab2, 0, AFB, safb1, safb2, 0 );
}
// EXPORTS //
module.exports = dlagbrpvgrw;
|