UNPKG

ts-math

Version:

A collection of math functions and packages written in Typescript

79 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cholesky = void 0; const _1 = require("."); // Generate a rows x cols matrix according to the supplied function. function create(rows, cols, func) { var res = new Array(rows); for (let i = 0; i < rows; i++) { res[i] = new Array(cols); for (let j = 0; j < cols; j++) res[i][j] = func(i, j); } return res; } function retZero() { return 0; } // arange(5) -> [0,1,2,3,4] // arange(1,5) -> [1,2,3,4] // arange(5,1,-1) -> [5,4,3,2] function arange(start, end, step) { var rl = []; step = step || 1; if (end === undefined) { end = start; start = 0; } if (start === end || step === 0) { return []; } if (start < end && step < 0) { return []; } if (start > end && step > 0) { return []; } if (step > 0) { for (let i = start; i < end; i += step) { rl.push(i); } } else { for (let i = start; i > end; i += step) { rl.push(i); } } return rl; } // Generate a rows x cols matrix of zeros. function zeros(rows, cols) { return create(rows, cols, retZero); } // sum of an array function sum(arr) { let sum = 0; let i = arr.length; while (--i >= 0) sum += arr[i]; return sum; } // A -> T // A=TT' // T is lower triangular matrix function cholesky(A) { const size = A.length; const T = zeros(A.length, A[0].length); let parts; arange(0, size, 1).forEach((i) => { parts = arange(0, i, 1).map((t) => _1.sqr(T[i][t])); T[i][i] = Math.sqrt(A[i][i] - sum(parts)); arange(i + 1, size, 1).forEach((j) => { parts = arange(0, i, 1).map((t) => T[i][t] * T[j][t]); T[j][i] = (A[i][j] - sum(parts)) / T[i][i]; }); }); return T; } exports.cholesky = cholesky; //# sourceMappingURL=cholesky.js.map