mathjs 7.2.0 → 7.5.1

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