mathjs 10.4.2 → 10.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
};
|