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 99 100 | 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 2x 2x 44x 44x 44x 44x 44x 13x 13x 44x 3x 3x 44x 3x 3x 44x 9x 3x 3x 6x 6x 44x 16x 3x 3x 13x 13x 13x 19x 44x 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 max = require( '@stdlib/math/base/special/fast/max' );
var format = require( '@stdlib/string/format' );
var base = require( './base.js' );
// MAIN //
/**
* Computes row and column scale factors intended to equilibrate an M-by-N matrix `A` and reduce its condition number.
*
* ## Notes
*
* - The row scale factors are stored in `R` (which should have `M` indexed elements) and the column scale factors are stored in `C` (which should have `N` indexed elements).
* - If the status code is greater than `M`, `R`, `ROWCND`, and `AMAX` contain valid values, but `C` and `COLCND` do not. If the status code is greater than zero and less than or equal to `M`, only `AMAX` contains a valid value. Elements which do not contain valid values are left unmodified.
*
* @param {string} order - storage layout of `A`
* @param {NonNegativeInteger} M - number of rows in `A`
* @param {NonNegativeInteger} N - number of columns in `A`
* @param {Float64Array} A - input matrix
* @param {PositiveInteger} LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`)
* @param {Float64Array} R - output array for the row scale factors
* @param {Float64Array} C - output array for the column scale factors
* @param {Float64Array} out - three element output array whose elements are set to `[ ROWCND, COLCND, AMAX ]`
* @throws {TypeError} first argument must be a valid order
* @throws {RangeError} second argument must be a nonnegative integer
* @throws {RangeError} third argument must be a nonnegative integer
* @throws {RangeError} fifth argument must be greater than or equal to max(1,M) (for column-major) or max(1,N) (for row-major)
* @returns {integer} status code
*
* @example
* var Float64Array = require( '@stdlib/array/float64' );
*
* var A = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
* var R = new Float64Array( 2 );
* var C = new Float64Array( 2 );
* var out = new Float64Array( 3 );
*
* dgeequ( 'row-major', 2, 2, A, 2, R, C, out );
* // R => <Float64Array>[ 0.5, 0.25 ]
* // C => <Float64Array>[ ~1.333, 1.0 ]
* // out => <Float64Array>[ 0.5, 0.75, 4.0 ]
*/
function dgeequ( order, M, N, A, LDA, R, C, out ) { // eslint-disable-line stdlib/jsdoc-doctest-decimal-point
var strideA1;
var strideA2;
if ( !isLayout( order ) ) {
throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) );
}
if ( M < 0 ) {
throw new RangeError( format( 'invalid argument. Second argument must be a nonnegative integer. Value: `%d`.', M ) );
}
if ( N < 0 ) {
throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', N ) );
}
if ( isColumnMajor( order ) ) {
if ( LDA < max( 1, M ) ) {
throw new RangeError( format( 'invalid argument. Fifth argument must be greater than or equal to max(1,%d). Value: `%d`.', M, LDA ) );
}
strideA1 = 1;
strideA2 = LDA;
} else { // order === 'row-major'
if ( LDA < max( 1, N ) ) {
throw new RangeError( format( 'invalid argument. Fifth argument must be greater than or equal to max(1,%d). Value: `%d`.', N, LDA ) );
}
strideA1 = LDA;
strideA2 = 1;
}
return base( M, N, A, strideA1, strideA2, 0, R, 1, 0, C, 1, 0, out, 1, 0 );
}
// EXPORTS //
module.exports = dgeequ;
|