feat:node-modules
This commit is contained in:
76
node_modules/mathjs/lib/cjs/function/algebra/decomposition/schur.js
generated
vendored
Normal file
76
node_modules/mathjs/lib/cjs/function/algebra/decomposition/schur.js
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.createSchur = void 0;
|
||||
var _factory = require("../../../utils/factory.js");
|
||||
const name = 'schur';
|
||||
const dependencies = ['typed', 'matrix', 'identity', 'multiply', 'qr', 'norm', 'subtract'];
|
||||
const createSchur = exports.createSchur = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
|
||||
let {
|
||||
typed,
|
||||
matrix,
|
||||
identity,
|
||||
multiply,
|
||||
qr,
|
||||
norm,
|
||||
subtract
|
||||
} = _ref;
|
||||
/**
|
||||
*
|
||||
* Performs a real Schur decomposition of the real matrix A = UTU' where U is orthogonal
|
||||
* and T is upper quasi-triangular.
|
||||
* https://en.wikipedia.org/wiki/Schur_decomposition
|
||||
*
|
||||
* Syntax:
|
||||
*
|
||||
* math.schur(A)
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* const A = [[1, 0], [-4, 3]]
|
||||
* math.schur(A) // returns {T: [[3, 4], [0, 1]], R: [[0, 1], [-1, 0]]}
|
||||
*
|
||||
* See also:
|
||||
*
|
||||
* sylvester, lyap, qr
|
||||
*
|
||||
* @param {Array | Matrix} A Matrix A
|
||||
* @return {{U: Array | Matrix, T: Array | Matrix}} Object containing both matrix U and T of the Schur Decomposition A=UTU'
|
||||
*/
|
||||
return typed(name, {
|
||||
Array: function (X) {
|
||||
const r = _schur(matrix(X));
|
||||
return {
|
||||
U: r.U.valueOf(),
|
||||
T: r.T.valueOf()
|
||||
};
|
||||
},
|
||||
Matrix: function (X) {
|
||||
return _schur(X);
|
||||
}
|
||||
});
|
||||
function _schur(X) {
|
||||
const n = X.size()[0];
|
||||
let A = X;
|
||||
let U = identity(n);
|
||||
let k = 0;
|
||||
let A0;
|
||||
do {
|
||||
A0 = A;
|
||||
const QR = qr(A);
|
||||
const Q = QR.Q;
|
||||
const R = QR.R;
|
||||
A = multiply(R, Q);
|
||||
U = multiply(U, Q);
|
||||
if (k++ > 100) {
|
||||
break;
|
||||
}
|
||||
} while (norm(subtract(A, A0)) > 1e-4);
|
||||
return {
|
||||
U,
|
||||
T: A
|
||||
};
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user