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.
Files changed (130) hide show
  1. package/HISTORY.md +36 -0
  2. package/docs/datatypes/matrices.md +17 -0
  3. package/docs/expressions/syntax.md +11 -4
  4. package/docs/reference/functions/fix.md +1 -0
  5. package/docs/reference/functions/floor.md +4 -0
  6. package/docs/reference/functions/lgamma.md +46 -0
  7. package/docs/reference/functions/pinv.md +44 -0
  8. package/docs/reference/functions/pow.md +8 -2
  9. package/docs/reference/functions/resolve.md +2 -2
  10. package/docs/reference/functions/simplifyConstant.md +52 -0
  11. package/docs/reference/functions/stirlingS2.md +5 -1
  12. package/docs/reference/functions.md +2 -0
  13. package/lib/browser/math.js +6 -6
  14. package/lib/browser/math.js.map +1 -1
  15. package/lib/cjs/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +5 -2
  17. package/lib/cjs/entry/dependenciesAny/dependenciesFix.generated.js +9 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesIndexNode.generated.js +0 -3
  20. package/lib/cjs/entry/dependenciesAny/dependenciesLgamma.generated.js +23 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesPinv.generated.js +53 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesPow.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +6 -0
  24. package/lib/cjs/entry/dependenciesAny.generated.js +16 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesCeil.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesFix.generated.js +6 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesFloor.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesIndexNode.generated.js +0 -3
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesLgamma.generated.js +20 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  32. package/lib/cjs/entry/impureFunctionsAny.generated.js +96 -95
  33. package/lib/cjs/entry/impureFunctionsNumber.generated.js +11 -11
  34. package/lib/cjs/entry/pureFunctionsAny.generated.js +227 -196
  35. package/lib/cjs/entry/pureFunctionsNumber.generated.js +36 -25
  36. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +6 -0
  37. package/lib/cjs/expression/embeddedDocs/function/arithmetic/pow.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/function/matrix/pinv.js +15 -0
  39. package/lib/cjs/expression/embeddedDocs/function/probability/lgamma.js +15 -0
  40. package/lib/cjs/expression/node/IndexNode.js +26 -61
  41. package/lib/cjs/factoriesAny.js +16 -0
  42. package/lib/cjs/factoriesNumber.js +44 -27
  43. package/lib/cjs/function/algebra/resolve.js +3 -3
  44. package/lib/cjs/function/arithmetic/ceil.js +75 -39
  45. package/lib/cjs/function/arithmetic/fix.js +54 -16
  46. package/lib/cjs/function/arithmetic/floor.js +79 -37
  47. package/lib/cjs/function/arithmetic/nthRoot.js +1 -3
  48. package/lib/cjs/function/arithmetic/pow.js +25 -6
  49. package/lib/cjs/function/arithmetic/round.js +27 -47
  50. package/lib/cjs/function/combinatorics/stirlingS2.js +42 -12
  51. package/lib/cjs/function/matrix/det.js +37 -31
  52. package/lib/cjs/function/matrix/pinv.js +223 -0
  53. package/lib/cjs/function/probability/lgamma.js +146 -0
  54. package/lib/cjs/header.js +2 -2
  55. package/lib/cjs/plain/number/arithmetic.js +17 -31
  56. package/lib/cjs/plain/number/probability.js +43 -3
  57. package/lib/cjs/type/matrix/function/sparse.js +6 -0
  58. package/lib/cjs/utils/latex.js +6 -0
  59. package/lib/cjs/utils/lruQueue.js +1 -3
  60. package/lib/cjs/utils/number.js +17 -2
  61. package/lib/cjs/utils/object.js +3 -1
  62. package/lib/cjs/version.js +1 -1
  63. package/lib/esm/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  64. package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +4 -2
  65. package/lib/esm/entry/dependenciesAny/dependenciesFix.generated.js +6 -0
  66. package/lib/esm/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  67. package/lib/esm/entry/dependenciesAny/dependenciesIndexNode.generated.js +0 -2
  68. package/lib/esm/entry/dependenciesAny/dependenciesLgamma.generated.js +12 -0
  69. package/lib/esm/entry/dependenciesAny/dependenciesPinv.generated.js +32 -0
  70. package/lib/esm/entry/dependenciesAny/dependenciesPow.generated.js +2 -0
  71. package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +4 -0
  72. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  73. package/lib/esm/entry/dependenciesNumber/dependenciesCeil.generated.js +2 -0
  74. package/lib/esm/entry/dependenciesNumber/dependenciesFix.generated.js +4 -0
  75. package/lib/esm/entry/dependenciesNumber/dependenciesFloor.generated.js +2 -0
  76. package/lib/esm/entry/dependenciesNumber/dependenciesIndexNode.generated.js +0 -2
  77. package/lib/esm/entry/dependenciesNumber/dependenciesLgamma.generated.js +10 -0
  78. package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -0
  79. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  80. package/lib/esm/entry/impureFunctionsAny.generated.js +90 -89
  81. package/lib/esm/entry/impureFunctionsNumber.generated.js +12 -12
  82. package/lib/esm/entry/pureFunctionsAny.generated.js +191 -162
  83. package/lib/esm/entry/pureFunctionsNumber.generated.js +24 -14
  84. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +4 -0
  85. package/lib/esm/expression/embeddedDocs/function/arithmetic/pow.js +1 -1
  86. package/lib/esm/expression/embeddedDocs/function/matrix/pinv.js +8 -0
  87. package/lib/esm/expression/embeddedDocs/function/probability/lgamma.js +8 -0
  88. package/lib/esm/expression/node/BlockNode.js +3 -3
  89. package/lib/esm/expression/node/IndexNode.js +22 -59
  90. package/lib/esm/expression/parse.js +5 -5
  91. package/lib/esm/factoriesAny.js +2 -0
  92. package/lib/esm/factoriesNumber.js +21 -8
  93. package/lib/esm/function/algebra/decomposition/qr.js +2 -2
  94. package/lib/esm/function/algebra/resolve.js +3 -3
  95. package/lib/esm/function/algebra/solver/utils/solveValidation.js +5 -5
  96. package/lib/esm/function/algebra/sparse/csChol.js +2 -2
  97. package/lib/esm/function/algebra/sparse/csLeaf.js +2 -2
  98. package/lib/esm/function/algebra/sparse/csLu.js +3 -3
  99. package/lib/esm/function/arithmetic/ceil.js +61 -24
  100. package/lib/esm/function/arithmetic/fix.js +51 -13
  101. package/lib/esm/function/arithmetic/floor.js +65 -23
  102. package/lib/esm/function/arithmetic/nthRoot.js +1 -3
  103. package/lib/esm/function/arithmetic/nthRoots.js +1 -1
  104. package/lib/esm/function/arithmetic/pow.js +25 -6
  105. package/lib/esm/function/arithmetic/round.js +25 -43
  106. package/lib/esm/function/combinatorics/stirlingS2.js +41 -12
  107. package/lib/esm/function/matrix/det.js +35 -31
  108. package/lib/esm/function/matrix/expm.js +2 -2
  109. package/lib/esm/function/matrix/pinv.js +205 -0
  110. package/lib/esm/function/probability/gamma.js +1 -1
  111. package/lib/esm/function/probability/lgamma.js +137 -0
  112. package/lib/esm/function/string/bin.js +1 -1
  113. package/lib/esm/function/string/hex.js +1 -1
  114. package/lib/esm/function/string/oct.js +1 -1
  115. package/lib/esm/plain/number/arithmetic.js +16 -20
  116. package/lib/esm/plain/number/probability.js +33 -1
  117. package/lib/esm/type/complex/Complex.js +2 -2
  118. package/lib/esm/type/matrix/DenseMatrix.js +2 -2
  119. package/lib/esm/type/matrix/FibonacciHeap.js +2 -2
  120. package/lib/esm/type/matrix/SparseMatrix.js +13 -13
  121. package/lib/esm/type/matrix/function/sparse.js +6 -0
  122. package/lib/esm/type/unit/Unit.js +7 -7
  123. package/lib/esm/utils/latex.js +6 -0
  124. package/lib/esm/utils/lruQueue.js +1 -2
  125. package/lib/esm/utils/number.js +16 -4
  126. package/lib/esm/utils/object.js +3 -1
  127. package/lib/esm/version.js +1 -1
  128. package/package.json +20 -9
  129. package/types/index.d.ts +1806 -1363
  130. 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.4.2
10
- * @date 2022-03-29
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, root) {
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
- exports.gammaP = gammaP;
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
  *
@@ -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)")
@@ -67,6 +67,4 @@ function lruQueue(limit) {
67
67
  map = Object.create(null);
68
68
  }
69
69
  };
70
- }
71
-
72
- ;
70
+ }
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.cosh = exports.cbrt = exports.atanh = exports.asinh = exports.acosh = exports.DBL_EPSILON = void 0;
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
- exports.tanh = tanh;
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
+ }
@@ -232,7 +232,9 @@ function canDefineProperty() {
232
232
  try {
233
233
  if (Object.defineProperty) {
234
234
  Object.defineProperty({}, 'x', {
235
- get: function get() {}
235
+ get: function get() {
236
+ return null;
237
+ }
236
238
  });
237
239
  return true;
238
240
  }
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = '10.4.2'; // Note: This file is automatically generated when building math.js.
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 { lupDependencies } from './dependenciesLup.generated.js';
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
- lupDependencies,
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
  };