mathjs 11.9.1 → 11.10.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +10 -0
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesIndexClass.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesIndexTransform.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +28 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSubset.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSubsetTransform.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesZeta.generated.js +46 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesZeta.generated.js +42 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +52 -40
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +159 -136
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +19 -1
- package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +15 -0
- package/lib/cjs/expression/node/utils/assign.js +7 -2
- package/lib/cjs/expression/transform/index.transform.js +9 -6
- package/lib/cjs/expression/transform/quantileSeq.transform.js +50 -0
- package/lib/cjs/expression/transform/subset.transform.js +7 -3
- package/lib/cjs/factoriesAny.js +14 -0
- package/lib/cjs/factoriesNumber.js +7 -0
- package/lib/cjs/function/matrix/concat.js +2 -29
- package/lib/cjs/function/matrix/subset.js +86 -24
- package/lib/cjs/function/special/zeta.js +169 -0
- package/lib/cjs/function/statistics/quantileSeq.js +39 -17
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +19 -9
- package/lib/cjs/type/matrix/MatrixIndex.js +38 -6
- package/lib/cjs/type/matrix/function/index.js +6 -4
- package/lib/cjs/type/matrix/utils/broadcast.js +8 -14
- package/lib/cjs/utils/array.js +253 -19
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesIndexClass.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesIndexTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +20 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSubset.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSubsetTransform.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesZeta.generated.js +38 -0
- package/lib/esm/entry/dependenciesAny.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesZeta.generated.js +34 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +53 -41
- package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -1
- package/lib/esm/entry/pureFunctionsAny.generated.js +140 -118
- package/lib/esm/entry/pureFunctionsNumber.generated.js +18 -1
- package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/special/zeta.js +8 -0
- package/lib/esm/expression/node/utils/assign.js +7 -2
- package/lib/esm/expression/transform/index.transform.js +9 -6
- package/lib/esm/expression/transform/quantileSeq.transform.js +41 -0
- package/lib/esm/expression/transform/subset.transform.js +7 -3
- package/lib/esm/factoriesAny.js +2 -0
- package/lib/esm/factoriesNumber.js +1 -1
- package/lib/esm/function/matrix/concat.js +3 -30
- package/lib/esm/function/matrix/subset.js +85 -25
- package/lib/esm/function/special/zeta.js +146 -0
- package/lib/esm/function/statistics/quantileSeq.js +30 -16
- package/lib/esm/type/matrix/DenseMatrix.js +20 -10
- package/lib/esm/type/matrix/MatrixIndex.js +39 -7
- package/lib/esm/type/matrix/function/index.js +6 -4
- package/lib/esm/type/matrix/utils/broadcast.js +8 -14
- package/lib/esm/utils/array.js +241 -20
- package/lib/esm/version.js +1 -1
- package/package.json +1 -1
- package/types/index.d.ts +16 -0
@@ -8,13 +8,17 @@ var _factory = require("../../utils/factory.js");
|
|
8
8
|
var _errorTransform = require("./utils/errorTransform.js");
|
9
9
|
var _subset = require("../../function/matrix/subset.js");
|
10
10
|
var name = 'subset';
|
11
|
-
var dependencies = ['typed', 'matrix'];
|
11
|
+
var dependencies = ['typed', 'matrix', 'zeros', 'add'];
|
12
12
|
var createSubsetTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
13
13
|
var typed = _ref.typed,
|
14
|
-
matrix = _ref.matrix
|
14
|
+
matrix = _ref.matrix,
|
15
|
+
zeros = _ref.zeros,
|
16
|
+
add = _ref.add;
|
15
17
|
var subset = (0, _subset.createSubset)({
|
16
18
|
typed: typed,
|
17
|
-
matrix: matrix
|
19
|
+
matrix: matrix,
|
20
|
+
zeros: zeros,
|
21
|
+
add: add
|
18
22
|
});
|
19
23
|
|
20
24
|
/**
|
package/lib/cjs/factoriesAny.js
CHANGED
@@ -1485,6 +1485,12 @@ Object.defineProperty(exports, "createQuantileSeq", {
|
|
1485
1485
|
return _quantileSeq.createQuantileSeq;
|
1486
1486
|
}
|
1487
1487
|
});
|
1488
|
+
Object.defineProperty(exports, "createQuantileSeqTransform", {
|
1489
|
+
enumerable: true,
|
1490
|
+
get: function get() {
|
1491
|
+
return _quantileSeqTransform.createQuantileSeqTransform;
|
1492
|
+
}
|
1493
|
+
});
|
1488
1494
|
Object.defineProperty(exports, "createQuantumOfCirculation", {
|
1489
1495
|
enumerable: true,
|
1490
1496
|
get: function get() {
|
@@ -2109,6 +2115,12 @@ Object.defineProperty(exports, "createZeros", {
|
|
2109
2115
|
return _zeros.createZeros;
|
2110
2116
|
}
|
2111
2117
|
});
|
2118
|
+
Object.defineProperty(exports, "createZeta", {
|
2119
|
+
enumerable: true,
|
2120
|
+
get: function get() {
|
2121
|
+
return _zeta.createZeta;
|
2122
|
+
}
|
2123
|
+
});
|
2112
2124
|
Object.defineProperty(exports, "createZpk2tf", {
|
2113
2125
|
enumerable: true,
|
2114
2126
|
get: function get() {
|
@@ -2213,6 +2225,7 @@ var _fft = require("./function/matrix/fft.js");
|
|
2213
2225
|
var _ifft = require("./function/matrix/ifft.js");
|
2214
2226
|
var _solveODE = require("./function/numeric/solveODE.js");
|
2215
2227
|
var _erf = require("./function/special/erf.js");
|
2228
|
+
var _zeta = require("./function/special/zeta.js");
|
2216
2229
|
var _mode = require("./function/statistics/mode.js");
|
2217
2230
|
var _prod = require("./function/statistics/prod.js");
|
2218
2231
|
var _format = require("./function/string/format.js");
|
@@ -2398,5 +2411,6 @@ var _concatTransform = require("./expression/transform/concat.transform.js");
|
|
2398
2411
|
var _diffTransform = require("./expression/transform/diff.transform.js");
|
2399
2412
|
var _stdTransform = require("./expression/transform/std.transform.js");
|
2400
2413
|
var _sumTransform = require("./expression/transform/sum.transform.js");
|
2414
|
+
var _quantileSeqTransform = require("./expression/transform/quantileSeq.transform.js");
|
2401
2415
|
var _cumsumTransform = require("./expression/transform/cumsum.transform.js");
|
2402
2416
|
var _varianceTransform = require("./expression/transform/variance.transform.js");
|
@@ -779,6 +779,12 @@ Object.defineProperty(exports, "createVersion", {
|
|
779
779
|
});
|
780
780
|
exports.createXgcd = void 0;
|
781
781
|
exports.createXor = void 0;
|
782
|
+
Object.defineProperty(exports, "createZeta", {
|
783
|
+
enumerable: true,
|
784
|
+
get: function get() {
|
785
|
+
return _zeta.createZeta;
|
786
|
+
}
|
787
|
+
});
|
782
788
|
var _index = require("./plain/number/index.js");
|
783
789
|
var _factory = require("./utils/factory.js");
|
784
790
|
var _noop = require("./utils/noop.js");
|
@@ -855,6 +861,7 @@ var _largerEq = require("./function/relational/largerEq.js");
|
|
855
861
|
var _deepEqual = require("./function/relational/deepEqual.js");
|
856
862
|
var _unequal = require("./function/relational/unequal.js");
|
857
863
|
var _erf = require("./function/special/erf.js");
|
864
|
+
var _zeta = require("./function/special/zeta.js");
|
858
865
|
var _mode = require("./function/statistics/mode.js");
|
859
866
|
var _prod = require("./function/statistics/prod.js");
|
860
867
|
var _max = require("./function/statistics/max.js");
|
@@ -97,7 +97,7 @@ var createConcat = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
97
97
|
}
|
98
98
|
var res = matrices.shift();
|
99
99
|
while (matrices.length) {
|
100
|
-
res =
|
100
|
+
res = (0, _array.concat)(res, matrices.shift(), dim);
|
101
101
|
}
|
102
102
|
return asMatrix ? matrix(res) : res;
|
103
103
|
},
|
@@ -106,31 +106,4 @@ var createConcat = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
106
106
|
}
|
107
107
|
});
|
108
108
|
});
|
109
|
-
|
110
|
-
/**
|
111
|
-
* Recursively concatenate two matrices.
|
112
|
-
* The contents of the matrices is not cloned.
|
113
|
-
* @param {Array} a Multi dimensional array
|
114
|
-
* @param {Array} b Multi dimensional array
|
115
|
-
* @param {number} concatDim The dimension on which to concatenate (zero-based)
|
116
|
-
* @param {number} dim The current dim (zero-based)
|
117
|
-
* @return {Array} c The concatenated matrix
|
118
|
-
* @private
|
119
|
-
*/
|
120
|
-
exports.createConcat = createConcat;
|
121
|
-
function _concat(a, b, concatDim, dim) {
|
122
|
-
if (dim < concatDim) {
|
123
|
-
// recurse into next dimension
|
124
|
-
if (a.length !== b.length) {
|
125
|
-
throw new _DimensionError.DimensionError(a.length, b.length);
|
126
|
-
}
|
127
|
-
var c = [];
|
128
|
-
for (var i = 0; i < a.length; i++) {
|
129
|
-
c[i] = _concat(a[i], b[i], concatDim, dim + 1);
|
130
|
-
}
|
131
|
-
return c;
|
132
|
-
} else {
|
133
|
-
// concatenate this dimension
|
134
|
-
return a.concat(b);
|
135
|
-
}
|
136
|
-
}
|
109
|
+
exports.createConcat = createConcat;
|
@@ -11,10 +11,12 @@ var _customs = require("../../utils/customs.js");
|
|
11
11
|
var _DimensionError = require("../../error/DimensionError.js");
|
12
12
|
var _factory = require("../../utils/factory.js");
|
13
13
|
var name = 'subset';
|
14
|
-
var dependencies = ['typed', 'matrix'];
|
14
|
+
var dependencies = ['typed', 'matrix', 'zeros', 'add'];
|
15
15
|
var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
16
16
|
var typed = _ref.typed,
|
17
|
-
matrix = _ref.matrix
|
17
|
+
matrix = _ref.matrix,
|
18
|
+
zeros = _ref.zeros,
|
19
|
+
add = _ref.add;
|
18
20
|
/**
|
19
21
|
* Get or set a subset of a matrix or string.
|
20
22
|
*
|
@@ -26,13 +28,15 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
26
28
|
*
|
27
29
|
* // get a subset
|
28
30
|
* const d = [[1, 2], [3, 4]]
|
29
|
-
* math.subset(d, math.index(1, 0))
|
30
|
-
* math.subset(d, math.index([0, 1], 1))
|
31
|
+
* math.subset(d, math.index(1, 0)) // returns 3
|
32
|
+
* math.subset(d, math.index([0, 1], 1)) // returns [[2], [4]]
|
33
|
+
* math.subset(d, math.index([false, true], 0)) // returns [[3]]
|
31
34
|
*
|
32
35
|
* // replace a subset
|
33
36
|
* const e = []
|
34
|
-
* const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]]
|
35
|
-
* const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 6], [0, 7]]
|
37
|
+
* const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 0, 6]]
|
38
|
+
* const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 0, 6], [0, 7, 0]]
|
39
|
+
* math.subset(g, math.index([false, true], 1), 8) // returns [[5, 0, 6], [0, 8, 0]]
|
36
40
|
*
|
37
41
|
* // get submatrix using ranges
|
38
42
|
* const M = [
|
@@ -40,7 +44,7 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
40
44
|
* [4,5,6],
|
41
45
|
* [7,8,9]
|
42
46
|
* ]
|
43
|
-
* math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1,2,3],[4,5,6]]
|
47
|
+
* math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1, 2, 3], [4, 5, 6]]
|
44
48
|
*
|
45
49
|
* See also:
|
46
50
|
*
|
@@ -59,36 +63,80 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
59
63
|
* math.matrix elements will be left undefined.
|
60
64
|
* @return {Array | Matrix | string} Either the retrieved subset or the updated matrix.
|
61
65
|
*/
|
66
|
+
|
62
67
|
return typed(name, {
|
63
68
|
// get subset
|
64
|
-
'Array, Index': function ArrayIndex(value, index) {
|
65
|
-
var m = matrix(value);
|
66
|
-
var subset = m.subset(index); // returns a Matrix
|
67
|
-
return index.isScalar() ? subset : subset.valueOf(); // return an Array (like the input)
|
68
|
-
},
|
69
|
-
|
70
69
|
'Matrix, Index': function MatrixIndex(value, index) {
|
70
|
+
if ((0, _array.isEmptyIndex)(index)) {
|
71
|
+
return matrix();
|
72
|
+
}
|
73
|
+
(0, _array.validateIndexSourceSize)(value, index);
|
71
74
|
return value.subset(index);
|
72
75
|
},
|
76
|
+
'Array, Index': typed.referTo('Matrix, Index', function (subsetRef) {
|
77
|
+
return function (value, index) {
|
78
|
+
var subsetResult = subsetRef(matrix(value), index);
|
79
|
+
return index.isScalar() ? subsetResult : subsetResult.valueOf();
|
80
|
+
};
|
81
|
+
}),
|
73
82
|
'Object, Index': _getObjectProperty,
|
74
83
|
'string, Index': _getSubstring,
|
75
84
|
// set subset
|
76
|
-
'Array, Index, any': function ArrayIndexAny(value, index, replacement) {
|
77
|
-
return matrix((0, _object.clone)(value)).subset(index, replacement, undefined).valueOf();
|
78
|
-
},
|
79
|
-
'Array, Index, any, any': function ArrayIndexAnyAny(value, index, replacement, defaultValue) {
|
80
|
-
return matrix((0, _object.clone)(value)).subset(index, replacement, defaultValue).valueOf();
|
81
|
-
},
|
82
|
-
'Matrix, Index, any': function MatrixIndexAny(value, index, replacement) {
|
83
|
-
return value.clone().subset(index, replacement);
|
84
|
-
},
|
85
85
|
'Matrix, Index, any, any': function MatrixIndexAnyAny(value, index, replacement, defaultValue) {
|
86
|
-
|
86
|
+
if ((0, _array.isEmptyIndex)(index)) {
|
87
|
+
return value;
|
88
|
+
}
|
89
|
+
(0, _array.validateIndexSourceSize)(value, index);
|
90
|
+
return value.clone().subset(index, _broadcastReplacement(replacement, index), defaultValue);
|
87
91
|
},
|
92
|
+
'Array, Index, any, any': typed.referTo('Matrix, Index, any, any', function (subsetRef) {
|
93
|
+
return function (value, index, replacement, defaultValue) {
|
94
|
+
var subsetResult = subsetRef(matrix(value), index, replacement, defaultValue);
|
95
|
+
return subsetResult.isMatrix ? subsetResult.valueOf() : subsetResult;
|
96
|
+
};
|
97
|
+
}),
|
98
|
+
'Array, Index, any': typed.referTo('Matrix, Index, any, any', function (subsetRef) {
|
99
|
+
return function (value, index, replacement) {
|
100
|
+
return subsetRef(matrix(value), index, replacement, undefined).valueOf();
|
101
|
+
};
|
102
|
+
}),
|
103
|
+
'Matrix, Index, any': typed.referTo('Matrix, Index, any, any', function (subsetRef) {
|
104
|
+
return function (value, index, replacement) {
|
105
|
+
return subsetRef(value, index, replacement, undefined);
|
106
|
+
};
|
107
|
+
}),
|
88
108
|
'string, Index, string': _setSubstring,
|
89
109
|
'string, Index, string, string': _setSubstring,
|
90
110
|
'Object, Index, any': _setObjectProperty
|
91
111
|
});
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Broadcasts a replacment value to be the same size as index
|
115
|
+
* @param {number | BigNumber | Array | Matrix} replacement Replacement value to try to broadcast
|
116
|
+
* @param {*} index Index value
|
117
|
+
* @returns broadcasted replacement that matches the size of index
|
118
|
+
*/
|
119
|
+
|
120
|
+
function _broadcastReplacement(replacement, index) {
|
121
|
+
if (typeof replacement === 'string') {
|
122
|
+
throw new Error('can\'t boradcast a string');
|
123
|
+
}
|
124
|
+
if (index._isScalar) {
|
125
|
+
return replacement;
|
126
|
+
}
|
127
|
+
var indexSize = index.size();
|
128
|
+
if (indexSize.every(function (d) {
|
129
|
+
return d > 0;
|
130
|
+
})) {
|
131
|
+
try {
|
132
|
+
return add(replacement, zeros(indexSize));
|
133
|
+
} catch (error) {
|
134
|
+
return replacement;
|
135
|
+
}
|
136
|
+
} else {
|
137
|
+
return replacement;
|
138
|
+
}
|
139
|
+
}
|
92
140
|
});
|
93
141
|
|
94
142
|
/**
|
@@ -104,6 +152,10 @@ function _getSubstring(str, index) {
|
|
104
152
|
// TODO: better error message
|
105
153
|
throw new TypeError('Index expected');
|
106
154
|
}
|
155
|
+
if ((0, _array.isEmptyIndex)(index)) {
|
156
|
+
return '';
|
157
|
+
}
|
158
|
+
(0, _array.validateIndexSourceSize)(Array.from(str), index);
|
107
159
|
if (index.size().length !== 1) {
|
108
160
|
throw new _DimensionError.DimensionError(index.size().length, 1);
|
109
161
|
}
|
@@ -125,7 +177,7 @@ function _getSubstring(str, index) {
|
|
125
177
|
* @param {string} str string to be replaced
|
126
178
|
* @param {Index} index An index or list of indices (character positions)
|
127
179
|
* @param {string} replacement Replacement string
|
128
|
-
* @param {string} [defaultValue] Default value to be
|
180
|
+
* @param {string} [defaultValue] Default value to be used when resizing
|
129
181
|
* the string. is ' ' by default
|
130
182
|
* @returns {string} result
|
131
183
|
* @private
|
@@ -135,6 +187,10 @@ function _setSubstring(str, index, replacement, defaultValue) {
|
|
135
187
|
// TODO: better error message
|
136
188
|
throw new TypeError('Index expected');
|
137
189
|
}
|
190
|
+
if ((0, _array.isEmptyIndex)(index)) {
|
191
|
+
return str;
|
192
|
+
}
|
193
|
+
(0, _array.validateIndexSourceSize)(Array.from(str), index);
|
138
194
|
if (index.size().length !== 1) {
|
139
195
|
throw new _DimensionError.DimensionError(index.size().length, 1);
|
140
196
|
}
|
@@ -184,6 +240,9 @@ function _setSubstring(str, index, replacement, defaultValue) {
|
|
184
240
|
* @private
|
185
241
|
*/
|
186
242
|
function _getObjectProperty(object, index) {
|
243
|
+
if ((0, _array.isEmptyIndex)(index)) {
|
244
|
+
return undefined;
|
245
|
+
}
|
187
246
|
if (index.size().length !== 1) {
|
188
247
|
throw new _DimensionError.DimensionError(index.size(), 1);
|
189
248
|
}
|
@@ -203,6 +262,9 @@ function _getObjectProperty(object, index) {
|
|
203
262
|
* @private
|
204
263
|
*/
|
205
264
|
function _setObjectProperty(object, index, replacement) {
|
265
|
+
if ((0, _array.isEmptyIndex)(index)) {
|
266
|
+
return object;
|
267
|
+
}
|
206
268
|
if (index.size().length !== 1) {
|
207
269
|
throw new _DimensionError.DimensionError(index.size(), 1);
|
208
270
|
}
|
@@ -0,0 +1,169 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createZeta = void 0;
|
7
|
+
var _factory = require("../../utils/factory.js");
|
8
|
+
var name = 'zeta';
|
9
|
+
var dependencies = ['typed', 'config', 'multiply', 'pow', 'divide', 'factorial', 'equal', 'smallerEq', 'isNegative', 'gamma', 'sin', 'subtract', 'add', '?Complex', '?BigNumber', 'pi'];
|
10
|
+
var createZeta = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
11
|
+
var typed = _ref.typed,
|
12
|
+
config = _ref.config,
|
13
|
+
multiply = _ref.multiply,
|
14
|
+
pow = _ref.pow,
|
15
|
+
divide = _ref.divide,
|
16
|
+
factorial = _ref.factorial,
|
17
|
+
equal = _ref.equal,
|
18
|
+
smallerEq = _ref.smallerEq,
|
19
|
+
isNegative = _ref.isNegative,
|
20
|
+
gamma = _ref.gamma,
|
21
|
+
sin = _ref.sin,
|
22
|
+
subtract = _ref.subtract,
|
23
|
+
add = _ref.add,
|
24
|
+
Complex = _ref.Complex,
|
25
|
+
_BigNumber = _ref.BigNumber,
|
26
|
+
pi = _ref.pi;
|
27
|
+
/**
|
28
|
+
* Compute the Riemann Zeta function of a value using an infinite series for
|
29
|
+
* all of the complex plane using Riemann's Functional equation.
|
30
|
+
*
|
31
|
+
* Based off the paper by Xavier Gourdon and Pascal Sebah
|
32
|
+
* ( http://numbers.computation.free.fr/Constants/Miscellaneous/zetaevaluations.pdf )
|
33
|
+
*
|
34
|
+
* Implementation and slight modification by Anik Patel
|
35
|
+
*
|
36
|
+
* Note: the implementation is accurate up to about 6 digits.
|
37
|
+
*
|
38
|
+
* Syntax:
|
39
|
+
*
|
40
|
+
* math.zeta(n)
|
41
|
+
*
|
42
|
+
* Examples:
|
43
|
+
*
|
44
|
+
* math.zeta(5) // returns 1.0369277551433895
|
45
|
+
* math.zeta(-0.5) // returns -0.2078862249773449
|
46
|
+
* math.zeta(math.i) // returns 0.0033002236853253153 - 0.4181554491413212i
|
47
|
+
*
|
48
|
+
*
|
49
|
+
* @param {number | Complex | BigNumber} s A Real, Complex or BigNumber parameter to the Riemann Zeta Function
|
50
|
+
* @return {number | Complex | BigNumber} The Riemann Zeta of `s`
|
51
|
+
*/
|
52
|
+
return typed(name, {
|
53
|
+
number: function number(s) {
|
54
|
+
return zetaNumeric(s, function (value) {
|
55
|
+
return value;
|
56
|
+
}, function () {
|
57
|
+
return 20;
|
58
|
+
});
|
59
|
+
},
|
60
|
+
BigNumber: function BigNumber(s) {
|
61
|
+
return zetaNumeric(s, function (value) {
|
62
|
+
return new _BigNumber(value);
|
63
|
+
}, function () {
|
64
|
+
// epsilon is for example 1e-12. Extract the positive exponent 12 from that
|
65
|
+
return Math.abs(Math.log10(config.epsilon));
|
66
|
+
});
|
67
|
+
},
|
68
|
+
Complex: zetaComplex
|
69
|
+
});
|
70
|
+
|
71
|
+
/**
|
72
|
+
* @param {number | BigNumber} s
|
73
|
+
* @param {(value: number) => number | BigNumber} createValue
|
74
|
+
* @param {(value: number | BigNumber | Complex) => number} determineDigits
|
75
|
+
* @returns {number | BigNumber}
|
76
|
+
*/
|
77
|
+
function zetaNumeric(s, createValue, determineDigits) {
|
78
|
+
if (equal(s, 0)) {
|
79
|
+
return createValue(-0.5);
|
80
|
+
}
|
81
|
+
if (equal(s, 1)) {
|
82
|
+
return createValue(NaN);
|
83
|
+
}
|
84
|
+
if (!isFinite(s)) {
|
85
|
+
return isNegative(s) ? createValue(NaN) : createValue(1);
|
86
|
+
}
|
87
|
+
return zeta(s, createValue, determineDigits, function (s) {
|
88
|
+
return s;
|
89
|
+
});
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* @param {Complex} s
|
94
|
+
* @returns {Complex}
|
95
|
+
*/
|
96
|
+
function zetaComplex(s) {
|
97
|
+
if (s.re === 0 && s.im === 0) {
|
98
|
+
return new Complex(-0.5);
|
99
|
+
}
|
100
|
+
if (s.re === 1) {
|
101
|
+
return new Complex(NaN, NaN);
|
102
|
+
}
|
103
|
+
if (s.re === Infinity && s.im === 0) {
|
104
|
+
return new Complex(1);
|
105
|
+
}
|
106
|
+
if (s.im === Infinity || s.re === -Infinity) {
|
107
|
+
return new Complex(NaN, NaN);
|
108
|
+
}
|
109
|
+
return zeta(s, function (value) {
|
110
|
+
return value;
|
111
|
+
}, function (s) {
|
112
|
+
return Math.round(1.3 * 15 + 0.9 * Math.abs(s.im));
|
113
|
+
}, function (s) {
|
114
|
+
return s.re;
|
115
|
+
});
|
116
|
+
}
|
117
|
+
|
118
|
+
/**
|
119
|
+
* @param {number | BigNumber | Complex} s
|
120
|
+
* @param {(value: number) => number | BigNumber | Complex} createValue
|
121
|
+
* @param {(value: number | BigNumber | Complex) => number} determineDigits
|
122
|
+
* @param {(value: number | BigNumber | Complex) => number} getRe
|
123
|
+
* @returns {*|number}
|
124
|
+
*/
|
125
|
+
function zeta(s, createValue, determineDigits, getRe) {
|
126
|
+
var n = determineDigits(s);
|
127
|
+
if (getRe(s) > -(n - 1) / 2) {
|
128
|
+
return f(s, createValue(n), createValue);
|
129
|
+
} else {
|
130
|
+
// Function Equation for reflection to x < 1
|
131
|
+
var c = multiply(pow(2, s), pow(createValue(pi), subtract(s, 1)));
|
132
|
+
c = multiply(c, sin(multiply(divide(createValue(pi), 2), s)));
|
133
|
+
c = multiply(c, gamma(subtract(1, s)));
|
134
|
+
return multiply(c, zeta(subtract(1, s), createValue, determineDigits, getRe));
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
/**
|
139
|
+
* Calculate a portion of the sum
|
140
|
+
* @param {number | BigNumber} k a positive integer
|
141
|
+
* @param {number | BigNumber} n a positive integer
|
142
|
+
* @return {number} the portion of the sum
|
143
|
+
**/
|
144
|
+
function d(k, n) {
|
145
|
+
var S = k;
|
146
|
+
for (var j = k; smallerEq(j, n); j = add(j, 1)) {
|
147
|
+
var factor = divide(multiply(factorial(add(n, subtract(j, 1))), pow(4, j)), multiply(factorial(subtract(n, j)), factorial(multiply(2, j))));
|
148
|
+
S = add(S, factor);
|
149
|
+
}
|
150
|
+
return multiply(n, S);
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Calculate the positive Riemann Zeta function
|
155
|
+
* @param {number} s a real or complex number with s.re > 1
|
156
|
+
* @param {number} n a positive integer
|
157
|
+
* @param {(number) => number | BigNumber | Complex} createValue
|
158
|
+
* @return {number} Riemann Zeta of s
|
159
|
+
**/
|
160
|
+
function f(s, n, createValue) {
|
161
|
+
var c = divide(1, multiply(d(createValue(0), n), subtract(1, pow(2, subtract(1, s)))));
|
162
|
+
var S = createValue(0);
|
163
|
+
for (var k = createValue(1); smallerEq(k, n); k = add(k, 1)) {
|
164
|
+
S = add(S, divide(multiply(Math.pow(-1, k - 1), d(k, n)), pow(k, s)));
|
165
|
+
}
|
166
|
+
return multiply(c, S);
|
167
|
+
}
|
168
|
+
});
|
169
|
+
exports.createZeta = createZeta;
|
@@ -5,17 +5,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.createQuantileSeq = void 0;
|
7
7
|
var _is = require("../../utils/is.js");
|
8
|
-
var _number = require("../../utils/number.js");
|
9
8
|
var _array = require("../../utils/array.js");
|
10
9
|
var _factory = require("../../utils/factory.js");
|
10
|
+
var _apply = require("../matrix/apply.js");
|
11
11
|
var name = 'quantileSeq';
|
12
|
-
var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare'];
|
12
|
+
var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
|
13
13
|
var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
14
14
|
var typed = _ref.typed,
|
15
15
|
add = _ref.add,
|
16
16
|
multiply = _ref.multiply,
|
17
17
|
partitionSelect = _ref.partitionSelect,
|
18
|
-
compare = _ref.compare
|
18
|
+
compare = _ref.compare,
|
19
|
+
isInteger = _ref.isInteger;
|
19
20
|
/**
|
20
21
|
* Compute the prob order quantile of a matrix or a list with values.
|
21
22
|
* The sequence is sorted and the middle value is returned.
|
@@ -50,6 +51,40 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
|
|
50
51
|
* @param {Boolean} sorted=false is data sorted in ascending order
|
51
52
|
* @return {Number, BigNumber, Unit, Array} Quantile(s)
|
52
53
|
*/
|
54
|
+
|
55
|
+
var apply = (0, _apply.createApply)({
|
56
|
+
typed: typed,
|
57
|
+
isInteger: isInteger
|
58
|
+
});
|
59
|
+
/**
|
60
|
+
* Check if array value types are valid, throw error otherwise.
|
61
|
+
* @param {number | BigNumber | Unit} x
|
62
|
+
* @param {number | BigNumber | Unit} x
|
63
|
+
* @private
|
64
|
+
*/
|
65
|
+
var validate = typed({
|
66
|
+
'number | BigNumber | Unit': function numberBigNumberUnit(x) {
|
67
|
+
return x;
|
68
|
+
}
|
69
|
+
});
|
70
|
+
return typed(name, {
|
71
|
+
'Array|Matrix, number|BigNumber|Array': function ArrayMatrixNumberBigNumberArray(data, prob) {
|
72
|
+
return quantileSeq(data, prob, false);
|
73
|
+
},
|
74
|
+
'Array|Matrix, number|BigNumber|Array, boolean': quantileSeq,
|
75
|
+
'Array|Matrix, number|BigNumber|Array, number': function ArrayMatrixNumberBigNumberArrayNumber(data, prob, dim) {
|
76
|
+
return _quantileSeqDim(data, prob, false, dim);
|
77
|
+
},
|
78
|
+
'Array|Matrix, number|BigNumber|Array, boolean, number': function ArrayMatrixNumberBigNumberArrayBooleanNumber(data, prob, sorted, dim) {
|
79
|
+
return _quantileSeqDim(data, prob, sorted, dim);
|
80
|
+
}
|
81
|
+
});
|
82
|
+
function _quantileSeqDim(data, prob, sorted, dim) {
|
83
|
+
// return [1.3, 1.2]
|
84
|
+
return apply(data, dim, function (x) {
|
85
|
+
return quantileSeq(x, prob, sorted);
|
86
|
+
});
|
87
|
+
}
|
53
88
|
function quantileSeq(data, probOrN, sorted) {
|
54
89
|
var probArr, dataArr, one;
|
55
90
|
if (arguments.length < 2 || arguments.length > 3) {
|
@@ -69,7 +104,7 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
|
|
69
104
|
}
|
70
105
|
if (probOrN > 1) {
|
71
106
|
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
72
|
-
if (!
|
107
|
+
if (!isInteger(probOrN)) {
|
73
108
|
throw new Error('N must be a positive integer');
|
74
109
|
}
|
75
110
|
var nPlusOne = probOrN + 1;
|
@@ -223,18 +258,5 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
|
|
223
258
|
var one = new fracPart.constructor(1);
|
224
259
|
return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));
|
225
260
|
}
|
226
|
-
|
227
|
-
/**
|
228
|
-
* Check if array value types are valid, throw error otherwise.
|
229
|
-
* @param {number | BigNumber | Unit} x
|
230
|
-
* @param {number | BigNumber | Unit} x
|
231
|
-
* @private
|
232
|
-
*/
|
233
|
-
var validate = typed({
|
234
|
-
'number | BigNumber | Unit': function numberBigNumberUnit(x) {
|
235
|
-
return x;
|
236
|
-
}
|
237
|
-
});
|
238
|
-
return quantileSeq;
|
239
261
|
});
|
240
262
|
exports.createQuantileSeq = createQuantileSeq;
|
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 11.
|
10
|
-
* @date 2023-
|
9
|
+
* @version 11.10.0
|
10
|
+
* @date 2023-08-23
|
11
11
|
*
|
12
12
|
* @license
|
13
13
|
* Copyright (C) 2013-2023 Jos de Jong <wjosdejong@gmail.com>
|
@@ -339,6 +339,18 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
339
339
|
} else {
|
340
340
|
// set a submatrix
|
341
341
|
|
342
|
+
// broadcast submatrix
|
343
|
+
if (!(0, _object.deepStrictEqual)(sSize, iSize)) {
|
344
|
+
try {
|
345
|
+
if (sSize.length === 0) {
|
346
|
+
submatrix = (0, _array.broadcastTo)([submatrix], iSize);
|
347
|
+
} else {
|
348
|
+
submatrix = (0, _array.broadcastTo)(submatrix, iSize);
|
349
|
+
}
|
350
|
+
sSize = (0, _array.arraySize)(submatrix);
|
351
|
+
} catch (_unused) {}
|
352
|
+
}
|
353
|
+
|
342
354
|
// validate dimensions
|
343
355
|
if (iSize.length < matrix._size.length) {
|
344
356
|
throw new _DimensionError.DimensionError(iSize.length, matrix._size.length, '<');
|
@@ -975,19 +987,17 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
975
987
|
|
976
988
|
/**
|
977
989
|
* Preprocess data, which can be an Array or DenseMatrix with nested Arrays and
|
978
|
-
* Matrices.
|
990
|
+
* Matrices. Clones all (nested) Arrays, and replaces all nested Matrices with Arrays
|
979
991
|
* @memberof DenseMatrix
|
980
|
-
* @param {Array} data
|
992
|
+
* @param {Array | Matrix} data
|
981
993
|
* @return {Array} data
|
982
994
|
*/
|
983
995
|
function preprocess(data) {
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
data[i] = preprocess(elem.valueOf());
|
990
|
-
}
|
996
|
+
if ((0, _is.isMatrix)(data)) {
|
997
|
+
return preprocess(data.valueOf());
|
998
|
+
}
|
999
|
+
if ((0, _is.isArray)(data)) {
|
1000
|
+
return data.map(preprocess);
|
991
1001
|
}
|
992
1002
|
return data;
|
993
1003
|
}
|