mathjs 7.2.0 → 7.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 (159) hide show
  1. package/HISTORY.md +34 -0
  2. package/dist/math.js +3421 -2476
  3. package/dist/math.min.js +5 -5
  4. package/dist/math.min.map +1 -1
  5. package/docs/expressions/syntax.md +30 -4
  6. package/docs/reference/functions/bin.md +38 -0
  7. package/docs/reference/functions/ceil.md +10 -1
  8. package/docs/reference/functions/fix.md +10 -2
  9. package/docs/reference/functions/floor.md +12 -3
  10. package/docs/reference/functions/hex.md +38 -0
  11. package/docs/reference/functions/lsolve.md +2 -1
  12. package/docs/reference/functions/lsolveAll.md +45 -0
  13. package/docs/reference/functions/oct.md +38 -0
  14. package/docs/reference/functions/rotationMatrix.md +51 -0
  15. package/docs/reference/functions/round.md +6 -2
  16. package/docs/reference/functions/usolve.md +2 -1
  17. package/docs/reference/functions/usolveAll.md +45 -0
  18. package/docs/reference/functions.md +8 -2
  19. package/es/entry/dependenciesAny/dependenciesBin.generated.js +10 -0
  20. package/es/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  21. package/es/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  22. package/es/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  23. package/es/entry/dependenciesAny/dependenciesHex.generated.js +10 -0
  24. package/es/entry/dependenciesAny/dependenciesLsolveAll.generated.js +22 -0
  25. package/es/entry/dependenciesAny/dependenciesOct.generated.js +10 -0
  26. package/es/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +30 -0
  27. package/es/entry/dependenciesAny/dependenciesUsolveAll.generated.js +22 -0
  28. package/es/entry/dependenciesAny.generated.js +6 -0
  29. package/es/entry/impureFunctionsAny.generated.js +63 -57
  30. package/es/entry/pureFunctionsAny.generated.js +323 -277
  31. package/es/expression/embeddedDocs/embeddedDocs.js +12 -0
  32. package/es/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  33. package/es/expression/embeddedDocs/function/algebra/lsolveAll.js +8 -0
  34. package/es/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  35. package/es/expression/embeddedDocs/function/algebra/usolveAll.js +8 -0
  36. package/es/expression/embeddedDocs/function/matrix/rotationMatrix.js +8 -0
  37. package/es/expression/embeddedDocs/function/utils/bin.js +8 -0
  38. package/es/expression/embeddedDocs/function/utils/hex.js +8 -0
  39. package/es/expression/embeddedDocs/function/utils/oct.js +8 -0
  40. package/es/expression/parse.js +28 -1
  41. package/es/factoriesAny.js +6 -0
  42. package/es/function/algebra/solver/lsolve.js +42 -69
  43. package/es/function/algebra/solver/lsolveAll.js +213 -0
  44. package/es/function/algebra/solver/lusolve.js +12 -27
  45. package/es/function/algebra/solver/usolve.js +41 -64
  46. package/es/function/algebra/solver/usolveAll.js +213 -0
  47. package/es/function/algebra/solver/utils/solveValidation.js +66 -107
  48. package/es/function/arithmetic/ceil.js +88 -4
  49. package/es/function/arithmetic/fix.js +43 -6
  50. package/es/function/arithmetic/floor.js +90 -6
  51. package/es/function/arithmetic/mod.js +10 -1
  52. package/es/function/arithmetic/round.js +6 -2
  53. package/es/function/matrix/rotationMatrix.js +175 -0
  54. package/es/function/matrix/sqrtm.js +4 -0
  55. package/es/function/probability/pickRandom.js +2 -6
  56. package/es/function/statistics/variance.js +4 -4
  57. package/es/function/string/baseUtils.js +36 -0
  58. package/es/function/string/bin.js +23 -0
  59. package/es/function/string/hex.js +23 -0
  60. package/es/function/string/oct.js +23 -0
  61. package/es/type/bignumber/BigNumber.js +4 -1
  62. package/es/type/number.js +10 -0
  63. package/es/utils/object.js +3 -1
  64. package/es/version.js +1 -1
  65. package/examples/advanced/web_server/math_worker.js +1 -1
  66. package/lib/entry/dependenciesAny/dependenciesBin.generated.js +20 -0
  67. package/lib/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
  68. package/lib/entry/dependenciesAny/dependenciesFix.generated.js +3 -0
  69. package/lib/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
  70. package/lib/entry/dependenciesAny/dependenciesHex.generated.js +20 -0
  71. package/lib/entry/dependenciesAny/dependenciesLsolveAll.generated.js +38 -0
  72. package/lib/entry/dependenciesAny/dependenciesOct.generated.js +20 -0
  73. package/lib/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +50 -0
  74. package/lib/entry/dependenciesAny/dependenciesUsolveAll.generated.js +38 -0
  75. package/lib/entry/dependenciesAny.generated.js +48 -0
  76. package/lib/entry/impureFunctionsAny.generated.js +65 -59
  77. package/lib/entry/pureFunctionsAny.generated.js +373 -321
  78. package/lib/expression/embeddedDocs/embeddedDocs.js +18 -0
  79. package/lib/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  80. package/lib/expression/embeddedDocs/function/algebra/lsolveAll.js +15 -0
  81. package/lib/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  82. package/lib/expression/embeddedDocs/function/algebra/usolveAll.js +15 -0
  83. package/lib/expression/embeddedDocs/function/matrix/rotationMatrix.js +15 -0
  84. package/lib/expression/embeddedDocs/function/utils/bin.js +15 -0
  85. package/lib/expression/embeddedDocs/function/utils/hex.js +15 -0
  86. package/lib/expression/embeddedDocs/function/utils/oct.js +15 -0
  87. package/lib/expression/parse.js +28 -1
  88. package/lib/factoriesAny.js +48 -0
  89. package/lib/function/algebra/solver/lsolve.js +42 -69
  90. package/lib/function/algebra/solver/lsolveAll.js +223 -0
  91. package/lib/function/algebra/solver/lusolve.js +12 -27
  92. package/lib/function/algebra/solver/usolve.js +41 -64
  93. package/lib/function/algebra/solver/usolveAll.js +223 -0
  94. package/lib/function/algebra/solver/utils/solveValidation.js +65 -106
  95. package/lib/function/arithmetic/ceil.js +91 -4
  96. package/lib/function/arithmetic/fix.js +44 -6
  97. package/lib/function/arithmetic/floor.js +93 -6
  98. package/lib/function/arithmetic/mod.js +10 -1
  99. package/lib/function/arithmetic/round.js +6 -2
  100. package/lib/function/matrix/rotationMatrix.js +185 -0
  101. package/lib/function/matrix/sqrtm.js +4 -0
  102. package/lib/function/probability/pickRandom.js +3 -7
  103. package/lib/function/statistics/variance.js +4 -4
  104. package/lib/function/string/baseUtils.js +45 -0
  105. package/lib/function/string/bin.js +31 -0
  106. package/lib/function/string/hex.js +31 -0
  107. package/lib/function/string/oct.js +31 -0
  108. package/lib/header.js +2 -2
  109. package/lib/type/bignumber/BigNumber.js +3 -1
  110. package/lib/type/number.js +10 -0
  111. package/lib/utils/object.js +3 -1
  112. package/lib/version.js +1 -1
  113. package/package.json +12 -12
  114. package/src/entry/dependenciesAny/dependenciesBin.generated.js +11 -0
  115. package/src/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  116. package/src/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  117. package/src/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  118. package/src/entry/dependenciesAny/dependenciesHex.generated.js +11 -0
  119. package/src/entry/dependenciesAny/dependenciesLsolveAll.generated.js +23 -0
  120. package/src/entry/dependenciesAny/dependenciesOct.generated.js +11 -0
  121. package/src/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +31 -0
  122. package/src/entry/dependenciesAny/dependenciesUsolveAll.generated.js +23 -0
  123. package/src/entry/dependenciesAny.generated.js +6 -0
  124. package/src/entry/impureFunctionsAny.generated.js +104 -92
  125. package/src/entry/pureFunctionsAny.generated.js +94 -82
  126. package/src/expression/embeddedDocs/embeddedDocs.js +12 -0
  127. package/src/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  128. package/src/expression/embeddedDocs/function/algebra/lsolveAll.js +17 -0
  129. package/src/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  130. package/src/expression/embeddedDocs/function/algebra/usolveAll.js +15 -0
  131. package/src/expression/embeddedDocs/function/matrix/rotationMatrix.js +19 -0
  132. package/src/expression/embeddedDocs/function/utils/bin.js +12 -0
  133. package/src/expression/embeddedDocs/function/utils/hex.js +12 -0
  134. package/src/expression/embeddedDocs/function/utils/oct.js +12 -0
  135. package/src/expression/parse.js +25 -0
  136. package/src/factoriesAny.js +6 -0
  137. package/src/function/algebra/solver/lsolve.js +52 -58
  138. package/src/function/algebra/solver/lsolveAll.js +197 -0
  139. package/src/function/algebra/solver/lusolve.js +9 -19
  140. package/src/function/algebra/solver/usolve.js +52 -55
  141. package/src/function/algebra/solver/usolveAll.js +199 -0
  142. package/src/function/algebra/solver/utils/solveValidation.js +78 -86
  143. package/src/function/arithmetic/ceil.js +63 -3
  144. package/src/function/arithmetic/fix.js +45 -6
  145. package/src/function/arithmetic/floor.js +65 -5
  146. package/src/function/arithmetic/mod.js +8 -1
  147. package/src/function/arithmetic/round.js +6 -2
  148. package/src/function/matrix/rotationMatrix.js +185 -0
  149. package/src/function/matrix/sqrtm.js +4 -0
  150. package/src/function/probability/pickRandom.js +2 -6
  151. package/src/function/statistics/variance.js +4 -4
  152. package/src/function/string/baseUtils.js +29 -0
  153. package/src/function/string/bin.js +23 -0
  154. package/src/function/string/hex.js +23 -0
  155. package/src/function/string/oct.js +24 -0
  156. package/src/type/bignumber/BigNumber.js +2 -1
  157. package/src/type/number.js +9 -1
  158. package/src/utils/object.js +3 -1
  159. package/src/version.js +1 -1
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createUsolveAll = void 0;
7
+
8
+ var _factory = require("../../../utils/factory");
9
+
10
+ var _solveValidation = require("./utils/solveValidation");
11
+
12
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
13
+
14
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+
18
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
19
+
20
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
21
+
22
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
23
+
24
+ var name = 'usolveAll';
25
+ var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtract', 'equalScalar', 'DenseMatrix'];
26
+ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
27
+ var typed = _ref.typed,
28
+ matrix = _ref.matrix,
29
+ divideScalar = _ref.divideScalar,
30
+ multiplyScalar = _ref.multiplyScalar,
31
+ subtract = _ref.subtract,
32
+ equalScalar = _ref.equalScalar,
33
+ DenseMatrix = _ref.DenseMatrix;
34
+ var solveValidation = (0, _solveValidation.createSolveValidation)({
35
+ DenseMatrix: DenseMatrix
36
+ });
37
+ /**
38
+ * Finds all solutions of a linear equation system by backward substitution. Matrix must be an upper triangular matrix.
39
+ *
40
+ * `U * x = b`
41
+ *
42
+ * Syntax:
43
+ *
44
+ * math.usolve(U, b)
45
+ *
46
+ * Examples:
47
+ *
48
+ * const a = [[-2, 3], [2, 1]]
49
+ * const b = [11, 9]
50
+ * const x = usolve(a, b) // [ [[8], [9]] ]
51
+ *
52
+ * See also:
53
+ *
54
+ * usolve, lup, slu, usolve, lusolve
55
+ *
56
+ * @param {Matrix, Array} U A N x N matrix or array (U)
57
+ * @param {Matrix, Array} b A column vector with the b values
58
+ *
59
+ * @return {DenseMatrix[] | Array[]} An array of affine-independent column vectors (x) that solve the linear system
60
+ */
61
+
62
+ return typed(name, {
63
+ 'SparseMatrix, Array | Matrix': function SparseMatrixArrayMatrix(m, b) {
64
+ return _sparseBackwardSubstitution(m, b);
65
+ },
66
+ 'DenseMatrix, Array | Matrix': function DenseMatrixArrayMatrix(m, b) {
67
+ return _denseBackwardSubstitution(m, b);
68
+ },
69
+ 'Array, Array | Matrix': function ArrayArrayMatrix(a, b) {
70
+ var m = matrix(a);
71
+
72
+ var R = _denseBackwardSubstitution(m, b);
73
+
74
+ return R.map(function (r) {
75
+ return r.valueOf();
76
+ });
77
+ }
78
+ });
79
+
80
+ function _denseBackwardSubstitution(m, b_) {
81
+ // the algorithm is derived from
82
+ // https://www.overleaf.com/project/5e6c87c554a3190001a3fc93
83
+ // array of right-hand sides
84
+ var B = [solveValidation(m, b_, true)._data.map(function (e) {
85
+ return e[0];
86
+ })];
87
+ var M = m._data;
88
+ var rows = m._size[0];
89
+ var columns = m._size[1]; // loop columns backwards
90
+
91
+ for (var i = columns - 1; i >= 0; i--) {
92
+ var L = B.length; // loop right-hand sides
93
+
94
+ for (var k = 0; k < L; k++) {
95
+ var b = B[k];
96
+
97
+ if (!equalScalar(M[i][i], 0)) {
98
+ // non-singular row
99
+ b[i] = divideScalar(b[i], M[i][i]);
100
+
101
+ for (var j = i - 1; j >= 0; j--) {
102
+ // b[j] -= b[i] * M[j,i]
103
+ b[j] = subtract(b[j], multiplyScalar(b[i], M[j][i]));
104
+ }
105
+ } else if (!equalScalar(b[i], 0)) {
106
+ // singular row, nonzero RHS
107
+ if (k === 0) {
108
+ // There is no valid solution
109
+ return [];
110
+ } else {
111
+ // This RHS is invalid but other solutions may still exist
112
+ B.splice(k, 1);
113
+ k -= 1;
114
+ L -= 1;
115
+ }
116
+ } else if (k === 0) {
117
+ // singular row, RHS is zero
118
+ var bNew = _toConsumableArray(b);
119
+
120
+ bNew[i] = 1;
121
+
122
+ for (var _j = i - 1; _j >= 0; _j--) {
123
+ bNew[_j] = subtract(bNew[_j], M[_j][i]);
124
+ }
125
+
126
+ B.push(bNew);
127
+ }
128
+ }
129
+ }
130
+
131
+ return B.map(function (x) {
132
+ return new DenseMatrix({
133
+ data: x.map(function (e) {
134
+ return [e];
135
+ }),
136
+ size: [rows, 1]
137
+ });
138
+ });
139
+ }
140
+
141
+ function _sparseBackwardSubstitution(m, b_) {
142
+ // array of right-hand sides
143
+ var B = [solveValidation(m, b_, true)._data.map(function (e) {
144
+ return e[0];
145
+ })];
146
+ var rows = m._size[0];
147
+ var columns = m._size[1];
148
+ var values = m._values;
149
+ var index = m._index;
150
+ var ptr = m._ptr; // loop columns backwards
151
+
152
+ for (var i = columns - 1; i >= 0; i--) {
153
+ var L = B.length; // loop right-hand sides
154
+
155
+ for (var k = 0; k < L; k++) {
156
+ var b = B[k]; // values & indices (column i)
157
+
158
+ var iValues = [];
159
+ var iIndices = []; // first & last indeces in column
160
+
161
+ var firstIndex = ptr[i];
162
+ var lastIndex = ptr[i + 1]; // find the value at [i, i]
163
+
164
+ var Mii = 0;
165
+
166
+ for (var j = lastIndex - 1; j >= firstIndex; j--) {
167
+ var J = index[j]; // check row
168
+
169
+ if (J === i) {
170
+ Mii = values[j];
171
+ } else if (J < i) {
172
+ // store upper triangular
173
+ iValues.push(values[j]);
174
+ iIndices.push(J);
175
+ }
176
+ }
177
+
178
+ if (!equalScalar(Mii, 0)) {
179
+ // non-singular row
180
+ b[i] = divideScalar(b[i], Mii); // loop upper triangular
181
+
182
+ for (var _j2 = 0, _lastIndex = iIndices.length; _j2 < _lastIndex; _j2++) {
183
+ var _J = iIndices[_j2];
184
+ b[_J] = subtract(b[_J], multiplyScalar(b[i], iValues[_j2]));
185
+ }
186
+ } else if (!equalScalar(b[i], 0)) {
187
+ // singular row, nonzero RHS
188
+ if (k === 0) {
189
+ // There is no valid solution
190
+ return [];
191
+ } else {
192
+ // This RHS is invalid but other solutions may still exist
193
+ B.splice(k, 1);
194
+ k -= 1;
195
+ L -= 1;
196
+ }
197
+ } else if (k === 0) {
198
+ // singular row, RHS is zero
199
+ var bNew = _toConsumableArray(b);
200
+
201
+ bNew[i] = 1; // loop upper triangular
202
+
203
+ for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
204
+ var _J2 = iIndices[_j3];
205
+ bNew[_J2] = subtract(bNew[_J2], iValues[_j3]);
206
+ }
207
+
208
+ B.push(bNew);
209
+ }
210
+ }
211
+ }
212
+
213
+ return B.map(function (x) {
214
+ return new DenseMatrix({
215
+ data: x.map(function (e) {
216
+ return [e];
217
+ }),
218
+ size: [rows, 1]
219
+ });
220
+ });
221
+ }
222
+ });
223
+ exports.createUsolveAll = createUsolveAll;
@@ -24,135 +24,101 @@ function createSolveValidation(_ref) {
24
24
  * @return {DenseMatrix} Dense column vector b
25
25
  */
26
26
  return function solveValidation(m, b, copy) {
27
- // matrix size
28
- var size = m.size(); // validate matrix dimensions
29
-
30
- if (size.length !== 2) {
31
- throw new RangeError('Matrix must be two dimensional (size: ' + (0, _string.format)(size) + ')');
32
- } // rows & columns
27
+ var mSize = m.size();
33
28
 
29
+ if (mSize.length !== 2) {
30
+ throw new RangeError('Matrix must be two dimensional (size: ' + (0, _string.format)(mSize) + ')');
31
+ }
34
32
 
35
- var rows = size[0];
36
- var columns = size[1]; // validate rows & columns
33
+ var rows = mSize[0];
34
+ var columns = mSize[1];
37
35
 
38
36
  if (rows !== columns) {
39
- throw new RangeError('Matrix must be square (size: ' + (0, _string.format)(size) + ')');
40
- } // vars
41
-
37
+ throw new RangeError('Matrix must be square (size: ' + (0, _string.format)(mSize) + ')');
38
+ }
42
39
 
43
- var data, i, bdata; // check b is matrix
40
+ var data = [];
44
41
 
45
42
  if ((0, _is.isMatrix)(b)) {
46
- // matrix size
47
- var msize = b.size(); // vector
43
+ var bSize = b.size();
44
+ var bdata = b._data; // 1-dim vector
48
45
 
49
- if (msize.length === 1) {
50
- // check vector length
51
- if (msize[0] !== rows) {
46
+ if (bSize.length === 1) {
47
+ if (bSize[0] !== rows) {
52
48
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
53
- } // create data array
54
-
49
+ }
55
50
 
56
- data = []; // matrix data (DenseMatrix)
57
-
58
- bdata = b._data; // loop b data
59
-
60
- for (i = 0; i < rows; i++) {
61
- // row array
51
+ for (var i = 0; i < rows; i++) {
62
52
  data[i] = [bdata[i]];
63
- } // return Dense Matrix
64
-
53
+ }
65
54
 
66
55
  return new DenseMatrix({
67
56
  data: data,
68
57
  size: [rows, 1],
69
58
  datatype: b._datatype
70
59
  });
71
- } // two dimensions
60
+ } // 2-dim column
72
61
 
73
62
 
74
- if (msize.length === 2) {
75
- // array must be a column vector
76
- if (msize[0] !== rows || msize[1] !== 1) {
63
+ if (bSize.length === 2) {
64
+ if (bSize[0] !== rows || bSize[1] !== 1) {
77
65
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
78
- } // check matrix type
79
-
66
+ }
80
67
 
81
68
  if ((0, _is.isDenseMatrix)(b)) {
82
- // check a copy is needed
83
69
  if (copy) {
84
- // create data array
85
- data = []; // matrix data (DenseMatrix)
86
-
87
- bdata = b._data; // loop b data
88
-
89
- for (i = 0; i < rows; i++) {
90
- // row array
91
- data[i] = [bdata[i][0]];
92
- } // return Dense Matrix
70
+ data = [];
93
71
 
72
+ for (var _i = 0; _i < rows; _i++) {
73
+ data[_i] = [bdata[_i][0]];
74
+ }
94
75
 
95
76
  return new DenseMatrix({
96
77
  data: data,
97
78
  size: [rows, 1],
98
79
  datatype: b._datatype
99
80
  });
100
- } // b is already a column vector
101
-
81
+ }
102
82
 
103
83
  return b;
104
- } // create data array
105
-
106
-
107
- data = [];
108
-
109
- for (i = 0; i < rows; i++) {
110
- data[i] = [0];
111
- } // sparse matrix arrays
112
-
113
-
114
- var values = b._values;
115
- var index = b._index;
116
- var ptr = b._ptr; // loop values in column 0
117
-
118
- for (var k1 = ptr[1], k = ptr[0]; k < k1; k++) {
119
- // row
120
- i = index[k]; // add to data
121
-
122
- data[i][0] = values[k];
123
- } // return Dense Matrix
124
-
125
-
126
- return new DenseMatrix({
127
- data: data,
128
- size: [rows, 1],
129
- datatype: b._datatype
130
- });
131
- } // throw error
132
-
133
-
134
- throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
135
- } // check b is array
84
+ }
85
+
86
+ if ((0, _is.isSparseMatrix)(b)) {
87
+ for (var _i2 = 0; _i2 < rows; _i2++) {
88
+ data[_i2] = [0];
89
+ }
90
+
91
+ var values = b._values;
92
+ var index = b._index;
93
+ var ptr = b._ptr;
94
+
95
+ for (var k1 = ptr[1], k = ptr[0]; k < k1; k++) {
96
+ var _i3 = index[k];
97
+ data[_i3][0] = values[k];
98
+ }
99
+
100
+ return new DenseMatrix({
101
+ data: data,
102
+ size: [rows, 1],
103
+ datatype: b._datatype
104
+ });
105
+ }
106
+ }
136
107
 
108
+ throw new RangeError('Dimension mismatch. The right side has to be either 1- or 2-dimensional vector.');
109
+ }
137
110
 
138
111
  if ((0, _is.isArray)(b)) {
139
- // size
140
- var asize = (0, _array.arraySize)(b); // check matrix dimensions, vector
112
+ var bsize = (0, _array.arraySize)(b);
141
113
 
142
- if (asize.length === 1) {
143
- // check vector length
144
- if (asize[0] !== rows) {
114
+ if (bsize.length === 1) {
115
+ if (bsize[0] !== rows) {
145
116
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
146
- } // create data array
147
-
148
-
149
- data = []; // loop b
150
-
151
- for (i = 0; i < rows; i++) {
152
- // row array
153
- data[i] = [b[i]];
154
- } // return Dense Matrix
117
+ }
155
118
 
119
+ for (var _i4 = 0; _i4 < rows; _i4++) {
120
+ data[_i4] = [b[_i4]];
121
+ }
156
122
 
157
123
  return new DenseMatrix({
158
124
  data: data,
@@ -160,29 +126,22 @@ function createSolveValidation(_ref) {
160
126
  });
161
127
  }
162
128
 
163
- if (asize.length === 2) {
164
- // array must be a column vector
165
- if (asize[0] !== rows || asize[1] !== 1) {
129
+ if (bsize.length === 2) {
130
+ if (bsize[0] !== rows || bsize[1] !== 1) {
166
131
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
167
- } // create data array
168
-
169
-
170
- data = []; // loop b data
171
-
172
- for (i = 0; i < rows; i++) {
173
- // row array
174
- data[i] = [b[i][0]];
175
- } // return Dense Matrix
132
+ }
176
133
 
134
+ for (var _i5 = 0; _i5 < rows; _i5++) {
135
+ data[_i5] = [b[_i5][0]];
136
+ }
177
137
 
178
138
  return new DenseMatrix({
179
139
  data: data,
180
140
  size: [rows, 1]
181
141
  });
182
- } // throw error
183
-
142
+ }
184
143
 
185
- throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
144
+ throw new RangeError('Dimension mismatch. The right side has to be either 1- or 2-dimensional vector.');
186
145
  }
187
146
  };
188
147
  }
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createCeil = void 0;
7
7
 
8
+ var _decimal = require("decimal.js");
9
+
8
10
  var _factory = require("../../utils/factory");
9
11
 
10
12
  var _collection = require("../../utils/collection");
@@ -15,13 +17,37 @@ var _nearlyEqual = require("../../utils/bignumber/nearlyEqual");
15
17
 
16
18
  var _number2 = require("../../plain/number");
17
19
 
20
+ var _algorithm = require("../../type/matrix/utils/algorithm11");
21
+
22
+ var _algorithm2 = require("../../type/matrix/utils/algorithm14");
23
+
24
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
+
26
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
+
28
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
+
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
31
+
32
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
33
+
34
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
+
18
36
  var name = 'ceil';
19
- var dependencies = ['typed', 'config', 'round'];
37
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
20
38
  var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
21
39
  var typed = _ref.typed,
22
40
  config = _ref.config,
23
- round = _ref.round;
24
-
41
+ round = _ref.round,
42
+ matrix = _ref.matrix,
43
+ equalScalar = _ref.equalScalar;
44
+ var algorithm11 = (0, _algorithm.createAlgorithm11)({
45
+ typed: typed,
46
+ equalScalar: equalScalar
47
+ });
48
+ var algorithm14 = (0, _algorithm2.createAlgorithm14)({
49
+ typed: typed
50
+ });
25
51
  /**
26
52
  * Round a value towards plus infinity
27
53
  * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
@@ -30,6 +56,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
30
56
  * Syntax:
31
57
  *
32
58
  * math.ceil(x)
59
+ * math.ceil(x, n)
33
60
  *
34
61
  * Examples:
35
62
  *
@@ -38,18 +65,27 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
38
65
  * math.ceil(-4.2) // returns number -4
39
66
  * math.ceil(-4.7) // returns number -4
40
67
  *
41
- * const c = math.complex(3.2, -2.7)
68
+ * math.ceil(3.212, 2) // returns number 3.22
69
+ * math.ceil(3.288, 2) // returns number 3.29
70
+ * math.ceil(-4.212, 2) // returns number -4.21
71
+ * math.ceil(-4.782, 2) // returns number -4.78
72
+ *
73
+ * const c = math.complex(3.24, -2.71)
42
74
  * math.ceil(c) // returns Complex 4 - 2i
75
+ * math.ceil(c, 1) // returns Complex 3.3 - 2.7i
43
76
  *
44
77
  * math.ceil([3.2, 3.8, -4.7]) // returns Array [4, 4, -4]
78
+ * math.ceil([3.21, 3.82, -4.71], 1) // returns Array [3.3, 3.9, -4.7]
45
79
  *
46
80
  * See also:
47
81
  *
48
82
  * floor, fix, round
49
83
  *
50
84
  * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
85
+ * @param {number | BigNumber | Array} [n=0] Number of decimals
51
86
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
52
87
  */
88
+
53
89
  return typed('ceil', {
54
90
  number: function number(x) {
55
91
  if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
@@ -58,9 +94,32 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
58
94
  return (0, _number2.ceilNumber)(x);
59
95
  }
60
96
  },
97
+ 'number, number': function numberNumber(x, n) {
98
+ if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
99
+ return round(x, n);
100
+ } else {
101
+ var _$split = "".concat(x, "e").split('e'),
102
+ _$split2 = _slicedToArray(_$split, 2),
103
+ number = _$split2[0],
104
+ exponent = _$split2[1];
105
+
106
+ var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
107
+
108
+ var _$split3 = "".concat(result, "e").split('e');
109
+
110
+ var _$split4 = _slicedToArray(_$split3, 2);
111
+
112
+ number = _$split4[0];
113
+ exponent = _$split4[1];
114
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
115
+ }
116
+ },
61
117
  Complex: function Complex(x) {
62
118
  return x.ceil();
63
119
  },
120
+ 'Complex, number': function ComplexNumber(x, n) {
121
+ return x.ceil(n);
122
+ },
64
123
  BigNumber: function BigNumber(x) {
65
124
  if ((0, _nearlyEqual.nearlyEqual)(x, round(x), config.epsilon)) {
66
125
  return round(x);
@@ -68,12 +127,40 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
68
127
  return x.ceil();
69
128
  }
70
129
  },
130
+ 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
131
+ if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
132
+ return round(x, n);
133
+ } else {
134
+ return x.toDecimalPlaces(n.toNumber(), _decimal.Decimal.ROUND_CEIL);
135
+ }
136
+ },
71
137
  Fraction: function Fraction(x) {
72
138
  return x.ceil();
73
139
  },
140
+ 'Fraction, number': function FractionNumber(x, n) {
141
+ return x.ceil(n);
142
+ },
74
143
  'Array | Matrix': function ArrayMatrix(x) {
75
144
  // deep map collection, skip zeros since ceil(0) = 0
76
145
  return (0, _collection.deepMap)(x, this, true);
146
+ },
147
+ 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
148
+ var _this = this;
149
+
150
+ // deep map collection, skip zeros since ceil(0) = 0
151
+ return (0, _collection.deepMap)(x, function (i) {
152
+ return _this(i, n);
153
+ }, true);
154
+ },
155
+ 'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {
156
+ return algorithm11(x, y, this, false);
157
+ },
158
+ 'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
159
+ return algorithm14(x, y, this, false);
160
+ },
161
+ 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
162
+ // use matrix implementation
163
+ return algorithm14(matrix(y), x, this, true).valueOf();
77
164
  }
78
165
  });
79
166
  });