mathjs 10.4.2 → 10.5.1

Sign up to get free protection for your applications and to get access to all the features.
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
  };