123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.createSlu = void 0;
- var _number = require("../../../utils/number.js");
- var _factory = require("../../../utils/factory.js");
- var _csSqr = require("../sparse/csSqr.js");
- var _csLu = require("../sparse/csLu.js");
- var name = 'slu';
- var dependencies = ['typed', 'abs', 'add', 'multiply', 'transpose', 'divideScalar', 'subtract', 'larger', 'largerEq', 'SparseMatrix'];
- var createSlu = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
- var typed = _ref.typed,
- abs = _ref.abs,
- add = _ref.add,
- multiply = _ref.multiply,
- transpose = _ref.transpose,
- divideScalar = _ref.divideScalar,
- subtract = _ref.subtract,
- larger = _ref.larger,
- largerEq = _ref.largerEq,
- SparseMatrix = _ref.SparseMatrix;
- var csSqr = (0, _csSqr.createCsSqr)({
- add: add,
- multiply: multiply,
- transpose: transpose
- });
- var csLu = (0, _csLu.createCsLu)({
- abs: abs,
- divideScalar: divideScalar,
- multiply: multiply,
- subtract: subtract,
- larger: larger,
- largerEq: largerEq,
- SparseMatrix: SparseMatrix
- });
- /**
- * Calculate the Sparse Matrix LU decomposition with full pivoting. Sparse Matrix `A` is decomposed in two matrices (`L`, `U`) and two permutation vectors (`pinv`, `q`) where
- *
- * `P * A * Q = L * U`
- *
- * Syntax:
- *
- * math.slu(A, order, threshold)
- *
- * Examples:
- *
- * const A = math.sparse([[4,3], [6, 3]])
- * math.slu(A, 1, 0.001)
- * // returns:
- * // {
- * // L: [[1, 0], [1.5, 1]]
- * // U: [[4, 3], [0, -1.5]]
- * // p: [0, 1]
- * // q: [0, 1]
- * // }
- *
- * See also:
- *
- * lup, lsolve, usolve, lusolve
- *
- * @param {SparseMatrix} A A two dimensional sparse matrix for which to get the LU decomposition.
- * @param {Number} order The Symbolic Ordering and Analysis order:
- * 0 - Natural ordering, no permutation vector q is returned
- * 1 - Matrix must be square, symbolic ordering and analisis is performed on M = A + A'
- * 2 - Symbolic ordering and analisis is performed on M = A' * A. Dense columns from A' are dropped, A recreated from A'.
- * This is appropriatefor LU factorization of unsymmetric matrices.
- * 3 - Symbolic ordering and analisis is performed on M = A' * A. This is best used for LU factorization is matrix M has no dense rows.
- * A dense row is a row with more than 10*sqr(columns) entries.
- * @param {Number} threshold Partial pivoting threshold (1 for partial pivoting)
- *
- * @return {Object} The lower triangular matrix, the upper triangular matrix and the permutation vectors.
- */
- return typed(name, {
- 'SparseMatrix, number, number': function SparseMatrixNumberNumber(a, order, threshold) {
- // verify order
- if (!(0, _number.isInteger)(order) || order < 0 || order > 3) {
- throw new Error('Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]');
- }
- // verify threshold
- if (threshold < 0 || threshold > 1) {
- throw new Error('Partial pivoting threshold must be a number from 0 to 1');
- }
- // perform symbolic ordering and analysis
- var s = csSqr(order, a, false);
- // perform lu decomposition
- var f = csLu(a, s, threshold);
- // return decomposition
- return {
- L: f.L,
- U: f.U,
- p: f.pinv,
- q: s.q,
- toString: function toString() {
- return 'L: ' + this.L.toString() + '\nU: ' + this.U.toString() + '\np: ' + this.p.toString() + (this.q ? '\nq: ' + this.q.toString() : '') + '\n';
- }
- };
- }
- });
- });
- exports.createSlu = createSlu;
|