mathjs 10.4.2 → 10.5.1
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +36 -0
- package/docs/datatypes/matrices.md +17 -0
- package/docs/expressions/syntax.md +11 -4
- package/docs/reference/functions/fix.md +1 -0
- package/docs/reference/functions/floor.md +4 -0
- package/docs/reference/functions/lgamma.md +46 -0
- package/docs/reference/functions/pinv.md +44 -0
- package/docs/reference/functions/pow.md +8 -2
- package/docs/reference/functions/resolve.md +2 -2
- package/docs/reference/functions/simplifyConstant.md +52 -0
- package/docs/reference/functions/stirlingS2.md +5 -1
- package/docs/reference/functions.md +2 -0
- package/lib/browser/math.js +6 -6
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +5 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesFix.generated.js +9 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesIndexNode.generated.js +0 -3
- package/lib/cjs/entry/dependenciesAny/dependenciesLgamma.generated.js +23 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesPinv.generated.js +53 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesPow.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +16 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesCeil.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesFix.generated.js +6 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesFloor.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesIndexNode.generated.js +0 -3
- package/lib/cjs/entry/dependenciesNumber/dependenciesLgamma.generated.js +20 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +96 -95
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +11 -11
- package/lib/cjs/entry/pureFunctionsAny.generated.js +227 -196
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +36 -25
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +6 -0
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/pow.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/pinv.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/probability/lgamma.js +15 -0
- package/lib/cjs/expression/node/IndexNode.js +26 -61
- package/lib/cjs/factoriesAny.js +16 -0
- package/lib/cjs/factoriesNumber.js +44 -27
- package/lib/cjs/function/algebra/resolve.js +3 -3
- package/lib/cjs/function/arithmetic/ceil.js +75 -39
- package/lib/cjs/function/arithmetic/fix.js +54 -16
- package/lib/cjs/function/arithmetic/floor.js +79 -37
- package/lib/cjs/function/arithmetic/nthRoot.js +1 -3
- package/lib/cjs/function/arithmetic/pow.js +25 -6
- package/lib/cjs/function/arithmetic/round.js +27 -47
- package/lib/cjs/function/combinatorics/stirlingS2.js +42 -12
- package/lib/cjs/function/matrix/det.js +37 -31
- package/lib/cjs/function/matrix/pinv.js +223 -0
- package/lib/cjs/function/probability/lgamma.js +146 -0
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/plain/number/arithmetic.js +17 -31
- package/lib/cjs/plain/number/probability.js +43 -3
- package/lib/cjs/type/matrix/function/sparse.js +6 -0
- package/lib/cjs/utils/latex.js +6 -0
- package/lib/cjs/utils/lruQueue.js +1 -3
- package/lib/cjs/utils/number.js +17 -2
- package/lib/cjs/utils/object.js +3 -1
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +4 -2
- package/lib/esm/entry/dependenciesAny/dependenciesFix.generated.js +6 -0
- package/lib/esm/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesIndexNode.generated.js +0 -2
- package/lib/esm/entry/dependenciesAny/dependenciesLgamma.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesPinv.generated.js +32 -0
- package/lib/esm/entry/dependenciesAny/dependenciesPow.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesCeil.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesFix.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesFloor.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesIndexNode.generated.js +0 -2
- package/lib/esm/entry/dependenciesNumber/dependenciesLgamma.generated.js +10 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +90 -89
- package/lib/esm/entry/impureFunctionsNumber.generated.js +12 -12
- package/lib/esm/entry/pureFunctionsAny.generated.js +191 -162
- package/lib/esm/entry/pureFunctionsNumber.generated.js +24 -14
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +4 -0
- package/lib/esm/expression/embeddedDocs/function/arithmetic/pow.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/pinv.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/probability/lgamma.js +8 -0
- package/lib/esm/expression/node/BlockNode.js +3 -3
- package/lib/esm/expression/node/IndexNode.js +22 -59
- package/lib/esm/expression/parse.js +5 -5
- package/lib/esm/factoriesAny.js +2 -0
- package/lib/esm/factoriesNumber.js +21 -8
- package/lib/esm/function/algebra/decomposition/qr.js +2 -2
- package/lib/esm/function/algebra/resolve.js +3 -3
- package/lib/esm/function/algebra/solver/utils/solveValidation.js +5 -5
- package/lib/esm/function/algebra/sparse/csChol.js +2 -2
- package/lib/esm/function/algebra/sparse/csLeaf.js +2 -2
- package/lib/esm/function/algebra/sparse/csLu.js +3 -3
- package/lib/esm/function/arithmetic/ceil.js +61 -24
- package/lib/esm/function/arithmetic/fix.js +51 -13
- package/lib/esm/function/arithmetic/floor.js +65 -23
- package/lib/esm/function/arithmetic/nthRoot.js +1 -3
- package/lib/esm/function/arithmetic/nthRoots.js +1 -1
- package/lib/esm/function/arithmetic/pow.js +25 -6
- package/lib/esm/function/arithmetic/round.js +25 -43
- package/lib/esm/function/combinatorics/stirlingS2.js +41 -12
- package/lib/esm/function/matrix/det.js +35 -31
- package/lib/esm/function/matrix/expm.js +2 -2
- package/lib/esm/function/matrix/pinv.js +205 -0
- package/lib/esm/function/probability/gamma.js +1 -1
- package/lib/esm/function/probability/lgamma.js +137 -0
- package/lib/esm/function/string/bin.js +1 -1
- package/lib/esm/function/string/hex.js +1 -1
- package/lib/esm/function/string/oct.js +1 -1
- package/lib/esm/plain/number/arithmetic.js +16 -20
- package/lib/esm/plain/number/probability.js +33 -1
- package/lib/esm/type/complex/Complex.js +2 -2
- package/lib/esm/type/matrix/DenseMatrix.js +2 -2
- package/lib/esm/type/matrix/FibonacciHeap.js +2 -2
- package/lib/esm/type/matrix/SparseMatrix.js +13 -13
- package/lib/esm/type/matrix/function/sparse.js +6 -0
- package/lib/esm/type/unit/Unit.js +7 -7
- package/lib/esm/utils/latex.js +6 -0
- package/lib/esm/utils/lruQueue.js +1 -2
- package/lib/esm/utils/number.js +16 -4
- package/lib/esm/utils/object.js +3 -1
- package/lib/esm/version.js +1 -1
- package/package.json +20 -9
- package/types/index.d.ts +1806 -1363
- package/types/index.ts +705 -264
@@ -0,0 +1,146 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createLgamma = void 0;
|
7
|
+
|
8
|
+
var _index = require("../../plain/number/index.js");
|
9
|
+
|
10
|
+
var _factory = require("../../utils/factory.js");
|
11
|
+
|
12
|
+
var _number = require("../../utils/number.js");
|
13
|
+
|
14
|
+
/* eslint-disable no-loss-of-precision */
|
15
|
+
// References
|
16
|
+
// ----------
|
17
|
+
// [1] Hare, "Computing the Principal Branch of log-Gamma", Journal of Algorithms, 1997.
|
18
|
+
// [2] https://math.stackexchange.com/questions/1338753/how-do-i-calculate-values-for-gamma-function-with-complex-arguments
|
19
|
+
var name = 'lgamma';
|
20
|
+
var dependencies = ['Complex', 'typed'];
|
21
|
+
var createLgamma = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
22
|
+
var _Complex = _ref.Complex,
|
23
|
+
typed = _ref.typed;
|
24
|
+
// Stirling series is non-convergent, we need to use the recurrence `lgamma(z) = lgamma(z+1) - log z` to get
|
25
|
+
// sufficient accuracy.
|
26
|
+
//
|
27
|
+
// These two values are copied from Scipy implementation:
|
28
|
+
// https://github.com/scipy/scipy/blob/v1.8.0/scipy/special/_loggamma.pxd#L37
|
29
|
+
var SMALL_RE = 7;
|
30
|
+
var SMALL_IM = 7;
|
31
|
+
/**
|
32
|
+
* The coefficients are B[2*n]/(2*n*(2*n - 1)) where B[2*n] is the (2*n)th Bernoulli number. See (1.1) in [1].
|
33
|
+
*
|
34
|
+
* If you cannot access the paper, can also get these values from the formula in [2].
|
35
|
+
*
|
36
|
+
* 1 / 12 = 0.00833333333333333333333333333333
|
37
|
+
* 1 / 360 = 0.00277777777777777777777777777778
|
38
|
+
* ...
|
39
|
+
* 3617 / 133400 = 0.02955065359477124183006535947712
|
40
|
+
*/
|
41
|
+
|
42
|
+
var coeffs = [-2.955065359477124183e-2, 6.4102564102564102564e-3, -1.9175269175269175269e-3, 8.4175084175084175084e-4, -5.952380952380952381e-4, 7.9365079365079365079e-4, -2.7777777777777777778e-3, 8.3333333333333333333e-2];
|
43
|
+
/**
|
44
|
+
* Logarithm of the gamma function for real, positive numbers and complex numbers,
|
45
|
+
* using Lanczos approximation for numbers and Stirling series for complex numbers.
|
46
|
+
*
|
47
|
+
* Syntax:
|
48
|
+
*
|
49
|
+
* math.lgamma(n)
|
50
|
+
*
|
51
|
+
* Examples:
|
52
|
+
*
|
53
|
+
* math.lgamma(5) // returns 3.178053830347945
|
54
|
+
* math.lgamma(0) // returns Infinity
|
55
|
+
* math.lgamma(-0.5) // returns NaN
|
56
|
+
* math.lgamma(math.i) // returns -0.6509231993018536 - 1.8724366472624294i
|
57
|
+
*
|
58
|
+
* See also:
|
59
|
+
*
|
60
|
+
* gamma
|
61
|
+
*
|
62
|
+
* @param {number | Complex} n A real or complex number
|
63
|
+
* @return {number | Complex} The log gamma of `n`
|
64
|
+
*/
|
65
|
+
|
66
|
+
return typed(name, {
|
67
|
+
number: _index.lgammaNumber,
|
68
|
+
Complex: function Complex(n) {
|
69
|
+
var TWOPI = 6.2831853071795864769252842; // 2*pi
|
70
|
+
|
71
|
+
var LOGPI = 1.1447298858494001741434262; // log(pi)
|
72
|
+
|
73
|
+
var REFLECTION = 0.1;
|
74
|
+
|
75
|
+
if (n.isNaN()) {
|
76
|
+
return new _Complex(NaN, NaN);
|
77
|
+
} else if (n.im === 0) {
|
78
|
+
return new _Complex((0, _index.lgammaNumber)(n.re), 0);
|
79
|
+
} else if (n.re >= SMALL_RE || Math.abs(n.im) >= SMALL_IM) {
|
80
|
+
return lgammaStirling(n);
|
81
|
+
} else if (n.re <= REFLECTION) {
|
82
|
+
// Reflection formula. see Proposition 3.1 in [1]
|
83
|
+
var tmp = (0, _number.copysign)(TWOPI, n.im) * Math.floor(0.5 * n.re + 0.25); // TODO: `complex.js sin` doesn't have extremely high precision, so this value `a` may lose a little precision,
|
84
|
+
// causing the computation results to be less accurate than the lgamma of real numbers
|
85
|
+
|
86
|
+
var a = n.mul(Math.PI).sin().log();
|
87
|
+
var b = this(new _Complex(1 - n.re, -n.im));
|
88
|
+
return new _Complex(LOGPI, tmp).sub(a).sub(b);
|
89
|
+
} else if (n.im >= 0) {
|
90
|
+
return lgammaRecurrence(n);
|
91
|
+
} else {
|
92
|
+
return lgammaRecurrence(n.conjugate()).conjugate();
|
93
|
+
}
|
94
|
+
},
|
95
|
+
BigNumber: function BigNumber() {
|
96
|
+
throw new Error("mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber");
|
97
|
+
}
|
98
|
+
});
|
99
|
+
|
100
|
+
function lgammaStirling(z) {
|
101
|
+
// formula ref in [2]
|
102
|
+
// computation ref:
|
103
|
+
// https://github.com/scipy/scipy/blob/v1.8.0/scipy/special/_loggamma.pxd#L101
|
104
|
+
// left part
|
105
|
+
// x (log(x) - 1) + 1/2 (log(2PI) - log(x))
|
106
|
+
// => (x - 0.5) * log(x) - x + log(2PI) / 2
|
107
|
+
var leftPart = z.sub(0.5).mul(z.log()).sub(z).add(_index.lnSqrt2PI); // right part
|
108
|
+
|
109
|
+
var rz = new _Complex(1, 0).div(z);
|
110
|
+
var rzz = rz.div(z);
|
111
|
+
var a = coeffs[0];
|
112
|
+
var b = coeffs[1];
|
113
|
+
var r = 2 * rzz.re;
|
114
|
+
var s = rzz.re * rzz.re + rzz.im * rzz.im;
|
115
|
+
|
116
|
+
for (var i = 2; i < 8; i++) {
|
117
|
+
var tmp = b;
|
118
|
+
b = -s * a + coeffs[i];
|
119
|
+
a = r * a + tmp;
|
120
|
+
}
|
121
|
+
|
122
|
+
var rightPart = rz.mul(rzz.mul(a).add(b)); // plus left and right
|
123
|
+
|
124
|
+
return leftPart.add(rightPart);
|
125
|
+
}
|
126
|
+
|
127
|
+
function lgammaRecurrence(z) {
|
128
|
+
// computation ref:
|
129
|
+
// https://github.com/scipy/scipy/blob/v1.8.0/scipy/special/_loggamma.pxd#L78
|
130
|
+
var signflips = 0;
|
131
|
+
var sb = 0;
|
132
|
+
var shiftprod = z;
|
133
|
+
z = z.add(1);
|
134
|
+
|
135
|
+
while (z.re <= SMALL_RE) {
|
136
|
+
shiftprod = shiftprod.mul(z);
|
137
|
+
var nsb = shiftprod.im < 0 ? 1 : 0;
|
138
|
+
if (nsb !== 0 && sb === 0) signflips++;
|
139
|
+
sb = nsb;
|
140
|
+
z = z.add(1);
|
141
|
+
}
|
142
|
+
|
143
|
+
return lgammaStirling(z).sub(shiftprod.log()).sub(new _Complex(0, signflips * 2 * Math.PI * 1));
|
144
|
+
}
|
145
|
+
});
|
146
|
+
exports.createLgamma = createLgamma;
|
package/lib/cjs/header.js
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
* It features real and complex numbers, units, matrices, a large set of
|
7
7
|
* mathematical functions, and a flexible expression parser.
|
8
8
|
*
|
9
|
-
* @version 10.
|
10
|
-
* @date 2022-
|
9
|
+
* @version 10.5.1
|
10
|
+
* @date 2022-05-02
|
11
11
|
*
|
12
12
|
* @license
|
13
13
|
* Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
|
@@ -6,13 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
exports.absNumber = absNumber;
|
7
7
|
exports.addNumber = addNumber;
|
8
8
|
exports.cbrtNumber = cbrtNumber;
|
9
|
-
exports.ceilNumber = ceilNumber;
|
10
9
|
exports.cubeNumber = cubeNumber;
|
11
10
|
exports.divideNumber = divideNumber;
|
12
11
|
exports.expNumber = expNumber;
|
13
12
|
exports.expm1Number = expm1Number;
|
14
|
-
exports.fixNumber = fixNumber;
|
15
|
-
exports.floorNumber = floorNumber;
|
16
13
|
exports.gcdNumber = gcdNumber;
|
17
14
|
exports.lcmNumber = lcmNumber;
|
18
15
|
exports.log10Number = log10Number;
|
@@ -86,12 +83,6 @@ function cbrtNumber(x) {
|
|
86
83
|
|
87
84
|
cbrtNumber.signature = n1;
|
88
85
|
|
89
|
-
function ceilNumber(x) {
|
90
|
-
return Math.ceil(x);
|
91
|
-
}
|
92
|
-
|
93
|
-
ceilNumber.signature = n1;
|
94
|
-
|
95
86
|
function cubeNumber(x) {
|
96
87
|
return x * x * x;
|
97
88
|
}
|
@@ -109,18 +100,6 @@ function expm1Number(x) {
|
|
109
100
|
}
|
110
101
|
|
111
102
|
expm1Number.signature = n1;
|
112
|
-
|
113
|
-
function fixNumber(x) {
|
114
|
-
return x > 0 ? Math.floor(x) : Math.ceil(x);
|
115
|
-
}
|
116
|
-
|
117
|
-
fixNumber.signature = n1;
|
118
|
-
|
119
|
-
function floorNumber(x) {
|
120
|
-
return Math.floor(x);
|
121
|
-
}
|
122
|
-
|
123
|
-
floorNumber.signature = n1;
|
124
103
|
/**
|
125
104
|
* Calculate gcd for numbers
|
126
105
|
* @param {number} a
|
@@ -178,22 +157,26 @@ function lcmNumber(a, b) {
|
|
178
157
|
|
179
158
|
lcmNumber.signature = n2;
|
180
159
|
/**
|
181
|
-
* Calculate the logarithm of a value.
|
160
|
+
* Calculate the logarithm of a value, optionally to a given base.
|
182
161
|
* @param {number} x
|
162
|
+
* @param {number | null | undefined} base
|
183
163
|
* @return {number}
|
184
164
|
*/
|
185
165
|
|
186
|
-
function logNumber(x) {
|
166
|
+
function logNumber(x, y) {
|
167
|
+
if (y) {
|
168
|
+
return Math.log(x) / Math.log(y);
|
169
|
+
}
|
170
|
+
|
187
171
|
return Math.log(x);
|
188
172
|
}
|
189
|
-
|
190
|
-
logNumber.signature = n1;
|
191
173
|
/**
|
192
174
|
* Calculate the 10-base logarithm of a number
|
193
175
|
* @param {number} x
|
194
176
|
* @return {number}
|
195
177
|
*/
|
196
178
|
|
179
|
+
|
197
180
|
function log10Number(x) {
|
198
181
|
return (0, _number.log10)(x);
|
199
182
|
}
|
@@ -249,11 +232,12 @@ modNumber.signature = n2;
|
|
249
232
|
* Calculate the nth root of a, solve x^root == a
|
250
233
|
* http://rosettacode.org/wiki/Nth_root#JavaScript
|
251
234
|
* @param {number} a
|
252
|
-
* @param {number} root
|
235
|
+
* @param {number} [2] root
|
253
236
|
* @private
|
254
237
|
*/
|
255
238
|
|
256
|
-
function nthRootNumber(a
|
239
|
+
function nthRootNumber(a) {
|
240
|
+
var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
257
241
|
var inv = root < 0;
|
258
242
|
|
259
243
|
if (inv) {
|
@@ -304,8 +288,6 @@ function nthRootNumber(a, root) {
|
|
304
288
|
*/
|
305
289
|
}
|
306
290
|
|
307
|
-
nthRootNumber.signature = n2;
|
308
|
-
|
309
291
|
function signNumber(x) {
|
310
292
|
return (0, _number.sign)(x);
|
311
293
|
}
|
@@ -401,16 +383,20 @@ powNumber.signature = n2;
|
|
401
383
|
|
402
384
|
function roundNumber(value) {
|
403
385
|
var decimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
386
|
+
|
387
|
+
if (!(0, _number.isInteger)(decimals) || decimals < 0 || decimals > 15) {
|
388
|
+
throw new Error('Number of decimals in function round must be an integer from 0 to 15 inclusive');
|
389
|
+
}
|
390
|
+
|
404
391
|
return parseFloat((0, _number.toFixed)(value, decimals));
|
405
392
|
}
|
406
|
-
|
407
|
-
roundNumber.signature = n2;
|
408
393
|
/**
|
409
394
|
* Calculate the norm of a number, the absolute value.
|
410
395
|
* @param {number} x
|
411
396
|
* @return {number}
|
412
397
|
*/
|
413
398
|
|
399
|
+
|
414
400
|
function normNumber(x) {
|
415
401
|
return Math.abs(x);
|
416
402
|
}
|
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.gammaG = void 0;
|
7
7
|
exports.gammaNumber = gammaNumber;
|
8
|
-
exports.gammaP = void 0;
|
8
|
+
exports.lgammaN = exports.lgammaG = exports.gammaP = void 0;
|
9
|
+
exports.lgammaNumber = lgammaNumber;
|
10
|
+
exports.lnSqrt2PI = exports.lgammaSeries = void 0;
|
9
11
|
|
10
12
|
var _number = require("../../utils/number.js");
|
11
13
|
|
@@ -59,5 +61,43 @@ gammaNumber.signature = 'number'; // TODO: comment on the variables g and p
|
|
59
61
|
|
60
62
|
var gammaG = 4.7421875;
|
61
63
|
exports.gammaG = gammaG;
|
62
|
-
var gammaP = [0.99999999999999709182, 57.156235665862923517, -59.597960355475491248, 14.136097974741747174, -0.49191381609762019978, 0.33994649984811888699e-4, 0.46523628927048575665e-4, -0.98374475304879564677e-4, 0.15808870322491248884e-3, -0.21026444172410488319e-3, 0.21743961811521264320e-3, -0.16431810653676389022e-3, 0.84418223983852743293e-4, -0.26190838401581408670e-4, 0.36899182659531622704e-5];
|
63
|
-
|
64
|
+
var gammaP = [0.99999999999999709182, 57.156235665862923517, -59.597960355475491248, 14.136097974741747174, -0.49191381609762019978, 0.33994649984811888699e-4, 0.46523628927048575665e-4, -0.98374475304879564677e-4, 0.15808870322491248884e-3, -0.21026444172410488319e-3, 0.21743961811521264320e-3, -0.16431810653676389022e-3, 0.84418223983852743293e-4, -0.26190838401581408670e-4, 0.36899182659531622704e-5]; // lgamma implementation ref: https://mrob.com/pub/ries/lanczos-gamma.html#code
|
65
|
+
// log(2 * pi) / 2
|
66
|
+
|
67
|
+
exports.gammaP = gammaP;
|
68
|
+
var lnSqrt2PI = 0.91893853320467274178;
|
69
|
+
exports.lnSqrt2PI = lnSqrt2PI;
|
70
|
+
var lgammaG = 5; // Lanczos parameter "g"
|
71
|
+
|
72
|
+
exports.lgammaG = lgammaG;
|
73
|
+
var lgammaN = 7; // Range of coefficients "n"
|
74
|
+
|
75
|
+
exports.lgammaN = lgammaN;
|
76
|
+
var lgammaSeries = [1.000000000190015, 76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5];
|
77
|
+
exports.lgammaSeries = lgammaSeries;
|
78
|
+
|
79
|
+
function lgammaNumber(n) {
|
80
|
+
if (n < 0) return NaN;
|
81
|
+
if (n === 0) return Infinity;
|
82
|
+
if (!isFinite(n)) return n;
|
83
|
+
|
84
|
+
if (n < 0.5) {
|
85
|
+
// Use Euler's reflection formula:
|
86
|
+
// gamma(z) = PI / (sin(PI * z) * gamma(1 - z))
|
87
|
+
return Math.log(Math.PI / Math.sin(Math.PI * n)) - lgammaNumber(1 - n);
|
88
|
+
} // Compute the logarithm of the Gamma function using the Lanczos method
|
89
|
+
|
90
|
+
|
91
|
+
n = n - 1;
|
92
|
+
var base = n + lgammaG + 0.5; // Base of the Lanczos exponential
|
93
|
+
|
94
|
+
var sum = lgammaSeries[0]; // We start with the terms that have the smallest coefficients and largest denominator
|
95
|
+
|
96
|
+
for (var i = lgammaN - 1; i >= 1; i--) {
|
97
|
+
sum += lgammaSeries[i] / (n + i);
|
98
|
+
}
|
99
|
+
|
100
|
+
return lnSqrt2PI + (n + 0.5) * Math.log(base) - base + Math.log(sum);
|
101
|
+
}
|
102
|
+
|
103
|
+
lgammaNumber.signature = 'number';
|
@@ -17,6 +17,9 @@ var createSparse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
17
17
|
* Create a Sparse Matrix. The function creates a new `math.Matrix` object from
|
18
18
|
* an `Array`. A Matrix has utility functions to manipulate the data in the
|
19
19
|
* matrix, like getting the size and getting or setting values in the matrix.
|
20
|
+
* Note that a Sparse Matrix is always 2-dimensional, so for example if
|
21
|
+
* you create one from a plain array of _n_ numbers, you get an _n_ by 1
|
22
|
+
* Sparse "column vector".
|
20
23
|
*
|
21
24
|
* Syntax:
|
22
25
|
*
|
@@ -31,6 +34,9 @@ var createSparse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
31
34
|
* m.resize([3, 2], 5)
|
32
35
|
* m.valueOf() // Array [[1, 2], [3, 4], [5, 5]]
|
33
36
|
* m.get([1, 0]) // number 3
|
37
|
+
* let v = math.sparse([0, 0, 1])
|
38
|
+
* v.size() // Array [3, 1]
|
39
|
+
* v.get([2, 0]) // number 1
|
34
40
|
*
|
35
41
|
* See also:
|
36
42
|
*
|
package/lib/cjs/utils/latex.js
CHANGED
@@ -300,6 +300,9 @@ var latexFunctions = {
|
|
300
300
|
inv: {
|
301
301
|
1: '\\left(${args[0]}\\right)^{-1}'
|
302
302
|
},
|
303
|
+
pinv: {
|
304
|
+
1: '\\left(${args[0]}\\right)^{+}'
|
305
|
+
},
|
303
306
|
sqrtm: {
|
304
307
|
1: "{${args[0]}}".concat(latexOperators.pow, "{\\frac{1}{2}}")
|
305
308
|
},
|
@@ -322,6 +325,9 @@ var latexFunctions = {
|
|
322
325
|
gamma: {
|
323
326
|
1: '\\Gamma\\left(${args[0]}\\right)'
|
324
327
|
},
|
328
|
+
lgamma: {
|
329
|
+
1: '\\ln\\Gamma\\left(${args[0]}\\right)'
|
330
|
+
},
|
325
331
|
// relational
|
326
332
|
equal: {
|
327
333
|
2: "\\left(${args[0]}".concat(latexOperators.equal, "${args[1]}\\right)")
|
package/lib/cjs/utils/number.js
CHANGED
@@ -3,7 +3,9 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
6
|
+
exports.cbrt = exports.atanh = exports.asinh = exports.acosh = exports.DBL_EPSILON = void 0;
|
7
|
+
exports.copysign = copysign;
|
8
|
+
exports.cosh = void 0;
|
7
9
|
exports.digits = digits;
|
8
10
|
exports.expm1 = void 0;
|
9
11
|
exports.format = format;
|
@@ -752,5 +754,18 @@ var tanh = Math.tanh || function (x) {
|
|
752
754
|
var e = Math.exp(2 * x);
|
753
755
|
return (e - 1) / (e + 1);
|
754
756
|
};
|
757
|
+
/**
|
758
|
+
* Returns a value with the magnitude of x and the sign of y.
|
759
|
+
* @param {number} x
|
760
|
+
* @param {number} y
|
761
|
+
* @returns {number}
|
762
|
+
*/
|
763
|
+
|
764
|
+
|
765
|
+
exports.tanh = tanh;
|
755
766
|
|
756
|
-
|
767
|
+
function copysign(x, y) {
|
768
|
+
var signx = x > 0 ? true : x < 0 ? false : 1 / x === Infinity;
|
769
|
+
var signy = y > 0 ? true : y < 0 ? false : 1 / y === Infinity;
|
770
|
+
return signx ^ signy ? -x : x;
|
771
|
+
}
|
package/lib/cjs/utils/object.js
CHANGED
package/lib/cjs/version.js
CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.version = void 0;
|
7
|
-
var version = '10.
|
7
|
+
var version = '10.5.1'; // Note: This file is automatically generated when building math.js.
|
8
8
|
// Changes made in this file will be overwritten.
|
9
9
|
|
10
10
|
exports.version = version;
|
@@ -2,15 +2,19 @@
|
|
2
2
|
* THIS FILE IS AUTO-GENERATED
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
|
+
import { DenseMatrixDependencies } from './dependenciesDenseMatrixClass.generated.js';
|
5
6
|
import { equalScalarDependencies } from './dependenciesEqualScalar.generated.js';
|
6
7
|
import { matrixDependencies } from './dependenciesMatrix.generated.js';
|
7
8
|
import { roundDependencies } from './dependenciesRound.generated.js';
|
8
9
|
import { typedDependencies } from './dependenciesTyped.generated.js';
|
10
|
+
import { zerosDependencies } from './dependenciesZeros.generated.js';
|
9
11
|
import { createCeil } from '../../factoriesAny.js';
|
10
12
|
export var ceilDependencies = {
|
13
|
+
DenseMatrixDependencies,
|
11
14
|
equalScalarDependencies,
|
12
15
|
matrixDependencies,
|
13
16
|
roundDependencies,
|
14
17
|
typedDependencies,
|
18
|
+
zerosDependencies,
|
15
19
|
createCeil
|
16
20
|
};
|
@@ -2,7 +2,8 @@
|
|
2
2
|
* THIS FILE IS AUTO-GENERATED
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
|
-
import {
|
5
|
+
import { divideScalarDependencies } from './dependenciesDivideScalar.generated.js';
|
6
|
+
import { isZeroDependencies } from './dependenciesIsZero.generated.js';
|
6
7
|
import { matrixDependencies } from './dependenciesMatrix.generated.js';
|
7
8
|
import { multiplyDependencies } from './dependenciesMultiply.generated.js';
|
8
9
|
import { subtractDependencies } from './dependenciesSubtract.generated.js';
|
@@ -10,7 +11,8 @@ import { typedDependencies } from './dependenciesTyped.generated.js';
|
|
10
11
|
import { unaryMinusDependencies } from './dependenciesUnaryMinus.generated.js';
|
11
12
|
import { createDet } from '../../factoriesAny.js';
|
12
13
|
export var detDependencies = {
|
13
|
-
|
14
|
+
divideScalarDependencies,
|
15
|
+
isZeroDependencies,
|
14
16
|
matrixDependencies,
|
15
17
|
multiplyDependencies,
|
16
18
|
subtractDependencies,
|
@@ -3,16 +3,22 @@
|
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
5
|
import { ComplexDependencies } from './dependenciesComplexClass.generated.js';
|
6
|
+
import { DenseMatrixDependencies } from './dependenciesDenseMatrixClass.generated.js';
|
6
7
|
import { ceilDependencies } from './dependenciesCeil.generated.js';
|
8
|
+
import { equalScalarDependencies } from './dependenciesEqualScalar.generated.js';
|
7
9
|
import { floorDependencies } from './dependenciesFloor.generated.js';
|
8
10
|
import { matrixDependencies } from './dependenciesMatrix.generated.js';
|
9
11
|
import { typedDependencies } from './dependenciesTyped.generated.js';
|
12
|
+
import { zerosDependencies } from './dependenciesZeros.generated.js';
|
10
13
|
import { createFix } from '../../factoriesAny.js';
|
11
14
|
export var fixDependencies = {
|
12
15
|
ComplexDependencies,
|
16
|
+
DenseMatrixDependencies,
|
13
17
|
ceilDependencies,
|
18
|
+
equalScalarDependencies,
|
14
19
|
floorDependencies,
|
15
20
|
matrixDependencies,
|
16
21
|
typedDependencies,
|
22
|
+
zerosDependencies,
|
17
23
|
createFix
|
18
24
|
};
|
@@ -2,15 +2,19 @@
|
|
2
2
|
* THIS FILE IS AUTO-GENERATED
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
|
+
import { DenseMatrixDependencies } from './dependenciesDenseMatrixClass.generated.js';
|
5
6
|
import { equalScalarDependencies } from './dependenciesEqualScalar.generated.js';
|
6
7
|
import { matrixDependencies } from './dependenciesMatrix.generated.js';
|
7
8
|
import { roundDependencies } from './dependenciesRound.generated.js';
|
8
9
|
import { typedDependencies } from './dependenciesTyped.generated.js';
|
10
|
+
import { zerosDependencies } from './dependenciesZeros.generated.js';
|
9
11
|
import { createFloor } from '../../factoriesAny.js';
|
10
12
|
export var floorDependencies = {
|
13
|
+
DenseMatrixDependencies,
|
11
14
|
equalScalarDependencies,
|
12
15
|
matrixDependencies,
|
13
16
|
roundDependencies,
|
14
17
|
typedDependencies,
|
18
|
+
zerosDependencies,
|
15
19
|
createFloor
|
16
20
|
};
|
@@ -3,12 +3,10 @@
|
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
5
|
import { NodeDependencies } from './dependenciesNode.generated.js';
|
6
|
-
import { RangeDependencies } from './dependenciesRangeClass.generated.js';
|
7
6
|
import { sizeDependencies } from './dependenciesSize.generated.js';
|
8
7
|
import { createIndexNode } from '../../factoriesAny.js';
|
9
8
|
export var IndexNodeDependencies = {
|
10
9
|
NodeDependencies,
|
11
|
-
RangeDependencies,
|
12
10
|
sizeDependencies,
|
13
11
|
createIndexNode
|
14
12
|
};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/**
|
2
|
+
* THIS FILE IS AUTO-GENERATED
|
3
|
+
* DON'T MAKE CHANGES HERE
|
4
|
+
*/
|
5
|
+
import { ComplexDependencies } from './dependenciesComplexClass.generated.js';
|
6
|
+
import { typedDependencies } from './dependenciesTyped.generated.js';
|
7
|
+
import { createLgamma } from '../../factoriesAny.js';
|
8
|
+
export var lgammaDependencies = {
|
9
|
+
ComplexDependencies,
|
10
|
+
typedDependencies,
|
11
|
+
createLgamma
|
12
|
+
};
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/**
|
2
|
+
* THIS FILE IS AUTO-GENERATED
|
3
|
+
* DON'T MAKE CHANGES HERE
|
4
|
+
*/
|
5
|
+
import { ComplexDependencies } from './dependenciesComplexClass.generated.js';
|
6
|
+
import { addDependencies } from './dependenciesAdd.generated.js';
|
7
|
+
import { ctransposeDependencies } from './dependenciesCtranspose.generated.js';
|
8
|
+
import { deepEqualDependencies } from './dependenciesDeepEqual.generated.js';
|
9
|
+
import { divideScalarDependencies } from './dependenciesDivideScalar.generated.js';
|
10
|
+
import { dotDependencies } from './dependenciesDot.generated.js';
|
11
|
+
import { dotDivideDependencies } from './dependenciesDotDivide.generated.js';
|
12
|
+
import { equalDependencies } from './dependenciesEqual.generated.js';
|
13
|
+
import { invDependencies } from './dependenciesInv.generated.js';
|
14
|
+
import { matrixDependencies } from './dependenciesMatrix.generated.js';
|
15
|
+
import { multiplyDependencies } from './dependenciesMultiply.generated.js';
|
16
|
+
import { typedDependencies } from './dependenciesTyped.generated.js';
|
17
|
+
import { createPinv } from '../../factoriesAny.js';
|
18
|
+
export var pinvDependencies = {
|
19
|
+
ComplexDependencies,
|
20
|
+
addDependencies,
|
21
|
+
ctransposeDependencies,
|
22
|
+
deepEqualDependencies,
|
23
|
+
divideScalarDependencies,
|
24
|
+
dotDependencies,
|
25
|
+
dotDivideDependencies,
|
26
|
+
equalDependencies,
|
27
|
+
invDependencies,
|
28
|
+
matrixDependencies,
|
29
|
+
multiplyDependencies,
|
30
|
+
typedDependencies,
|
31
|
+
createPinv
|
32
|
+
};
|
@@ -5,6 +5,7 @@
|
|
5
5
|
import { ComplexDependencies } from './dependenciesComplexClass.generated.js';
|
6
6
|
import { fractionDependencies } from './dependenciesFraction.generated.js';
|
7
7
|
import { identityDependencies } from './dependenciesIdentity.generated.js';
|
8
|
+
import { invDependencies } from './dependenciesInv.generated.js';
|
8
9
|
import { matrixDependencies } from './dependenciesMatrix.generated.js';
|
9
10
|
import { multiplyDependencies } from './dependenciesMultiply.generated.js';
|
10
11
|
import { numberDependencies } from './dependenciesNumber.generated.js';
|
@@ -14,6 +15,7 @@ export var powDependencies = {
|
|
14
15
|
ComplexDependencies,
|
15
16
|
fractionDependencies,
|
16
17
|
identityDependencies,
|
18
|
+
invDependencies,
|
17
19
|
matrixDependencies,
|
18
20
|
multiplyDependencies,
|
19
21
|
numberDependencies,
|
@@ -2,6 +2,7 @@
|
|
2
2
|
* THIS FILE IS AUTO-GENERATED
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
|
+
import { bignumberDependencies } from './dependenciesBignumber.generated.js';
|
5
6
|
import { addScalarDependencies } from './dependenciesAddScalar.generated.js';
|
6
7
|
import { combinationsDependencies } from './dependenciesCombinations.generated.js';
|
7
8
|
import { divideScalarDependencies } from './dependenciesDivideScalar.generated.js';
|
@@ -10,11 +11,13 @@ import { isIntegerDependencies } from './dependenciesIsInteger.generated.js';
|
|
10
11
|
import { isNegativeDependencies } from './dependenciesIsNegative.generated.js';
|
11
12
|
import { largerDependencies } from './dependenciesLarger.generated.js';
|
12
13
|
import { multiplyScalarDependencies } from './dependenciesMultiplyScalar.generated.js';
|
14
|
+
import { numberDependencies } from './dependenciesNumber.generated.js';
|
13
15
|
import { powDependencies } from './dependenciesPow.generated.js';
|
14
16
|
import { subtractDependencies } from './dependenciesSubtract.generated.js';
|
15
17
|
import { typedDependencies } from './dependenciesTyped.generated.js';
|
16
18
|
import { createStirlingS2 } from '../../factoriesAny.js';
|
17
19
|
export var stirlingS2Dependencies = {
|
20
|
+
bignumberDependencies,
|
18
21
|
addScalarDependencies,
|
19
22
|
combinationsDependencies,
|
20
23
|
divideScalarDependencies,
|
@@ -23,6 +26,7 @@ export var stirlingS2Dependencies = {
|
|
23
26
|
isNegativeDependencies,
|
24
27
|
largerDependencies,
|
25
28
|
multiplyScalarDependencies,
|
29
|
+
numberDependencies,
|
26
30
|
powDependencies,
|
27
31
|
subtractDependencies,
|
28
32
|
typedDependencies,
|
@@ -170,6 +170,7 @@ export { largerEqDependencies } from './dependenciesAny/dependenciesLargerEq.gen
|
|
170
170
|
export { lcmDependencies } from './dependenciesAny/dependenciesLcm.generated.js';
|
171
171
|
export { leafCountDependencies } from './dependenciesAny/dependenciesLeafCount.generated.js';
|
172
172
|
export { leftShiftDependencies } from './dependenciesAny/dependenciesLeftShift.generated.js';
|
173
|
+
export { lgammaDependencies } from './dependenciesAny/dependenciesLgamma.generated.js';
|
173
174
|
export { logDependencies } from './dependenciesAny/dependenciesLog.generated.js';
|
174
175
|
export { log10Dependencies } from './dependenciesAny/dependenciesLog10.generated.js';
|
175
176
|
export { log1pDependencies } from './dependenciesAny/dependenciesLog1p.generated.js';
|
@@ -230,6 +231,7 @@ export { permutationsDependencies } from './dependenciesAny/dependenciesPermutat
|
|
230
231
|
export { phiDependencies } from './dependenciesAny/dependenciesPhi.generated.js';
|
231
232
|
export { piDependencies } from './dependenciesAny/dependenciesPi.generated.js';
|
232
233
|
export { pickRandomDependencies } from './dependenciesAny/dependenciesPickRandom.generated.js';
|
234
|
+
export { pinvDependencies } from './dependenciesAny/dependenciesPinv.generated.js';
|
233
235
|
export { planckChargeDependencies } from './dependenciesAny/dependenciesPlanckCharge.generated.js';
|
234
236
|
export { planckConstantDependencies } from './dependenciesAny/dependenciesPlanckConstant.generated.js';
|
235
237
|
export { planckLengthDependencies } from './dependenciesAny/dependenciesPlanckLength.generated.js';
|
@@ -2,9 +2,11 @@
|
|
2
2
|
* THIS FILE IS AUTO-GENERATED
|
3
3
|
* DON'T MAKE CHANGES HERE
|
4
4
|
*/
|
5
|
+
import { roundDependencies } from './dependenciesRound.generated.js';
|
5
6
|
import { typedDependencies } from './dependenciesTyped.generated.js';
|
6
7
|
import { createCeil } from '../../factoriesNumber.js';
|
7
8
|
export var ceilDependencies = {
|
9
|
+
roundDependencies,
|
8
10
|
typedDependencies,
|
9
11
|
createCeil
|
10
12
|
};
|