mathjs 11.11.2 → 12.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. package/HISTORY.md +48 -0
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +1 -1
  4. package/lib/browser/math.js.LICENSE.txt +2 -2
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +2 -2
  7. package/lib/cjs/defaultInstance.js +2 -2
  8. package/lib/cjs/entry/allFactoriesAny.js +2 -2
  9. package/lib/cjs/entry/allFactoriesNumber.js +2 -2
  10. package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
  11. package/lib/cjs/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
  12. package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
  13. package/lib/cjs/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
  14. package/lib/cjs/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
  15. package/lib/cjs/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
  16. package/lib/cjs/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
  17. package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +17 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
  21. package/lib/cjs/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
  22. package/lib/cjs/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
  23. package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +17 -0
  26. package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
  27. package/lib/cjs/entry/impureFunctionsAny.generated.js +4 -3
  28. package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -1
  29. package/lib/cjs/entry/pureFunctionsAny.generated.js +43 -37
  30. package/lib/cjs/entry/pureFunctionsNumber.generated.js +16 -13
  31. package/lib/cjs/expression/embeddedDocs/function/matrix/eigs.js +2 -2
  32. package/lib/cjs/expression/node/AssignmentNode.js +1 -1
  33. package/lib/cjs/expression/node/FunctionAssignmentNode.js +1 -1
  34. package/lib/cjs/expression/parse.js +50 -69
  35. package/lib/cjs/factoriesAny.js +7 -0
  36. package/lib/cjs/factoriesNumber.js +2 -1
  37. package/lib/cjs/function/algebra/decomposition/lup.js +3 -3
  38. package/lib/cjs/function/algebra/decomposition/qr.js +5 -5
  39. package/lib/cjs/function/algebra/solver/lsolve.js +4 -4
  40. package/lib/cjs/function/algebra/solver/lsolveAll.js +6 -6
  41. package/lib/cjs/function/algebra/solver/usolve.js +4 -4
  42. package/lib/cjs/function/algebra/solver/usolveAll.js +6 -6
  43. package/lib/cjs/function/arithmetic/subtract.js +7 -37
  44. package/lib/cjs/function/arithmetic/subtractScalar.js +52 -0
  45. package/lib/cjs/function/combinatorics/stirlingS2.js +2 -2
  46. package/lib/cjs/function/geometry/distance.js +10 -10
  47. package/lib/cjs/function/matrix/det.js +4 -4
  48. package/lib/cjs/function/matrix/eigs/complexEigs.js +73 -68
  49. package/lib/cjs/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +57 -51
  50. package/lib/cjs/function/matrix/eigs.js +118 -45
  51. package/lib/cjs/header.js +2 -2
  52. package/lib/cjs/type/unit/Unit.js +5 -5
  53. package/lib/cjs/utils/number.js +1 -1
  54. package/lib/cjs/utils/object.js +4 -2
  55. package/lib/cjs/utils/snapshot.js +3 -3
  56. package/lib/cjs/utils/string.js +12 -16
  57. package/lib/cjs/version.js +1 -1
  58. package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
  59. package/lib/esm/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
  60. package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
  61. package/lib/esm/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
  62. package/lib/esm/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
  63. package/lib/esm/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
  64. package/lib/esm/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
  65. package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
  66. package/lib/esm/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
  67. package/lib/esm/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +10 -0
  68. package/lib/esm/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
  69. package/lib/esm/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
  70. package/lib/esm/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
  71. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  72. package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
  73. package/lib/esm/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +10 -0
  74. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  75. package/lib/esm/entry/impureFunctionsAny.generated.js +5 -4
  76. package/lib/esm/entry/impureFunctionsNumber.generated.js +3 -2
  77. package/lib/esm/entry/pureFunctionsAny.generated.js +42 -37
  78. package/lib/esm/entry/pureFunctionsNumber.generated.js +16 -13
  79. package/lib/esm/expression/embeddedDocs/function/matrix/eigs.js +2 -2
  80. package/lib/esm/expression/node/AssignmentNode.js +1 -1
  81. package/lib/esm/expression/node/FunctionAssignmentNode.js +1 -1
  82. package/lib/esm/expression/parse.js +50 -69
  83. package/lib/esm/factoriesAny.js +1 -0
  84. package/lib/esm/factoriesNumber.js +1 -0
  85. package/lib/esm/function/algebra/decomposition/lup.js +3 -3
  86. package/lib/esm/function/algebra/decomposition/qr.js +5 -5
  87. package/lib/esm/function/algebra/solver/lsolve.js +4 -4
  88. package/lib/esm/function/algebra/solver/lsolveAll.js +6 -6
  89. package/lib/esm/function/algebra/solver/usolve.js +4 -4
  90. package/lib/esm/function/algebra/solver/usolveAll.js +6 -6
  91. package/lib/esm/function/arithmetic/subtract.js +7 -27
  92. package/lib/esm/function/arithmetic/subtractScalar.js +46 -0
  93. package/lib/esm/function/combinatorics/stirlingS2.js +2 -2
  94. package/lib/esm/function/geometry/distance.js +10 -10
  95. package/lib/esm/function/matrix/det.js +4 -4
  96. package/lib/esm/function/matrix/eigs/complexEigs.js +73 -68
  97. package/lib/esm/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +55 -51
  98. package/lib/esm/function/matrix/eigs.js +119 -47
  99. package/lib/esm/type/unit/Unit.js +5 -5
  100. package/lib/esm/utils/number.js +1 -1
  101. package/lib/esm/utils/object.js +5 -3
  102. package/lib/esm/utils/snapshot.js +1 -1
  103. package/lib/esm/utils/string.js +12 -16
  104. package/lib/esm/version.js +1 -1
  105. package/package.json +14 -14
  106. package/types/EXPLANATION.md +54 -0
  107. package/types/index.d.ts +6797 -6446
@@ -7,13 +7,13 @@ exports.createUsolve = void 0;
7
7
  var _factory = require("../../../utils/factory.js");
8
8
  var _solveValidation = require("./utils/solveValidation.js");
9
9
  var name = 'usolve';
10
- var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtract', 'equalScalar', 'DenseMatrix'];
10
+ var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtractScalar', 'equalScalar', 'DenseMatrix'];
11
11
  var createUsolve = exports.createUsolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
12
12
  var typed = _ref.typed,
13
13
  matrix = _ref.matrix,
14
14
  divideScalar = _ref.divideScalar,
15
15
  multiplyScalar = _ref.multiplyScalar,
16
- subtract = _ref.subtract,
16
+ subtractScalar = _ref.subtractScalar,
17
17
  equalScalar = _ref.equalScalar,
18
18
  DenseMatrix = _ref.DenseMatrix;
19
19
  var solveValidation = (0, _solveValidation.createSolveValidation)({
@@ -85,7 +85,7 @@ var createUsolve = exports.createUsolve = /* #__PURE__ */(0, _factory.factory)(n
85
85
  // loop rows
86
86
  for (var i = j - 1; i >= 0; i--) {
87
87
  // update copy of b
88
- bdata[i] = [subtract(bdata[i][0] || 0, multiplyScalar(xj, mdata[i][j]))];
88
+ bdata[i] = [subtractScalar(bdata[i][0] || 0, multiplyScalar(xj, mdata[i][j]))];
89
89
  }
90
90
  } else {
91
91
  // zero value at j
@@ -149,7 +149,7 @@ var createUsolve = exports.createUsolve = /* #__PURE__ */(0, _factory.factory)(n
149
149
  var xj = divideScalar(bj, vjj);
150
150
  for (var _k = 0, _lastIndex = jIndices.length; _k < _lastIndex; _k++) {
151
151
  var _i = jIndices[_k];
152
- bdata[_i] = [subtract(bdata[_i][0], multiplyScalar(xj, jValues[_k]))];
152
+ bdata[_i] = [subtractScalar(bdata[_i][0], multiplyScalar(xj, jValues[_k]))];
153
153
  }
154
154
  x[j] = [xj];
155
155
  } else {
@@ -9,13 +9,13 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
9
9
  var _factory = require("../../../utils/factory.js");
10
10
  var _solveValidation = require("./utils/solveValidation.js");
11
11
  var name = 'usolveAll';
12
- var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtract', 'equalScalar', 'DenseMatrix'];
12
+ var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtractScalar', 'equalScalar', 'DenseMatrix'];
13
13
  var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
14
14
  var typed = _ref.typed,
15
15
  matrix = _ref.matrix,
16
16
  divideScalar = _ref.divideScalar,
17
17
  multiplyScalar = _ref.multiplyScalar,
18
- subtract = _ref.subtract,
18
+ subtractScalar = _ref.subtractScalar,
19
19
  equalScalar = _ref.equalScalar,
20
20
  DenseMatrix = _ref.DenseMatrix;
21
21
  var solveValidation = (0, _solveValidation.createSolveValidation)({
@@ -86,7 +86,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
86
86
  b[i] = divideScalar(b[i], M[i][i]);
87
87
  for (var j = i - 1; j >= 0; j--) {
88
88
  // b[j] -= b[i] * M[j,i]
89
- b[j] = subtract(b[j], multiplyScalar(b[i], M[j][i]));
89
+ b[j] = subtractScalar(b[j], multiplyScalar(b[i], M[j][i]));
90
90
  }
91
91
  } else if (!equalScalar(b[i], 0)) {
92
92
  // singular row, nonzero RHS
@@ -106,7 +106,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
106
106
  var bNew = (0, _toConsumableArray2["default"])(b);
107
107
  bNew[i] = 1;
108
108
  for (var _j = i - 1; _j >= 0; _j--) {
109
- bNew[_j] = subtract(bNew[_j], M[_j][i]);
109
+ bNew[_j] = subtractScalar(bNew[_j], M[_j][i]);
110
110
  }
111
111
  B.push(bNew);
112
112
  }
@@ -169,7 +169,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
169
169
  // loop upper triangular
170
170
  for (var _j2 = 0, _lastIndex = iIndices.length; _j2 < _lastIndex; _j2++) {
171
171
  var _J = iIndices[_j2];
172
- b[_J] = subtract(b[_J], multiplyScalar(b[i], iValues[_j2]));
172
+ b[_J] = subtractScalar(b[_J], multiplyScalar(b[i], iValues[_j2]));
173
173
  }
174
174
  } else if (!equalScalar(b[i], 0)) {
175
175
  // singular row, nonzero RHS
@@ -192,7 +192,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
192
192
  // loop upper triangular
193
193
  for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
194
194
  var _J2 = iIndices[_j3];
195
- bNew[_J2] = subtract(bNew[_J2], iValues[_j3]);
195
+ bNew[_J2] = subtractScalar(bNew[_J2], iValues[_j3]);
196
196
  }
197
197
  B.push(bNew);
198
198
  }
@@ -12,12 +12,12 @@ var _matAlgo10xSids = require("../../type/matrix/utils/matAlgo10xSids.js");
12
12
  var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
13
13
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
14
14
  var name = 'subtract';
15
- var dependencies = ['typed', 'matrix', 'equalScalar', 'addScalar', 'unaryMinus', 'DenseMatrix', 'concat'];
15
+ var dependencies = ['typed', 'matrix', 'equalScalar', 'subtractScalar', 'unaryMinus', 'DenseMatrix', 'concat'];
16
16
  var createSubtract = exports.createSubtract = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
17
  var typed = _ref.typed,
18
18
  matrix = _ref.matrix,
19
19
  equalScalar = _ref.equalScalar,
20
- addScalar = _ref.addScalar,
20
+ subtractScalar = _ref.subtractScalar,
21
21
  unaryMinus = _ref.unaryMinus,
22
22
  DenseMatrix = _ref.DenseMatrix,
23
23
  concat = _ref.concat;
@@ -73,44 +73,14 @@ var createSubtract = exports.createSubtract = /* #__PURE__ */(0, _factory.factor
73
73
  *
74
74
  * add
75
75
  *
76
- * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x
77
- * Initial value
78
- * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y
79
- * Value to subtract from `x`
80
- * @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix}
81
- * Subtraction of `x` and `y`
76
+ * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x Initial value
77
+ * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y Value to subtract from `x`
78
+ * @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} Subtraction of `x` and `y`
82
79
  */
83
80
  return typed(name, {
84
- 'number, number': function numberNumber(x, y) {
85
- return x - y;
86
- },
87
- 'Complex, Complex': function ComplexComplex(x, y) {
88
- return x.sub(y);
89
- },
90
- 'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
91
- return x.minus(y);
92
- },
93
- 'Fraction, Fraction': function FractionFraction(x, y) {
94
- return x.sub(y);
95
- },
96
- 'Unit, Unit': typed.referToSelf(function (self) {
97
- return function (x, y) {
98
- if (x.value === null) {
99
- throw new Error('Parameter x contains a unit with undefined value');
100
- }
101
- if (y.value === null) {
102
- throw new Error('Parameter y contains a unit with undefined value');
103
- }
104
- if (!x.equalBase(y)) {
105
- throw new Error('Units do not match');
106
- }
107
- var res = x.clone();
108
- res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
109
- res.fixPrefix = false;
110
- return res;
111
- };
112
- })
81
+ 'any, any': subtractScalar
113
82
  }, matrixAlgorithmSuite({
83
+ elop: subtractScalar,
114
84
  SS: matAlgo05xSfSf,
115
85
  DS: matAlgo01xDSid,
116
86
  SD: matAlgo03xDSf,
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSubtractScalar = void 0;
7
+ var _factory = require("../../utils/factory.js");
8
+ var _index = require("../../plain/number/index.js");
9
+ var name = 'subtractScalar';
10
+ var dependencies = ['typed'];
11
+ var createSubtractScalar = exports.createSubtractScalar = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
12
+ var typed = _ref.typed;
13
+ /**
14
+ * Subtract two scalar values, `x - y`.
15
+ * This function is meant for internal use: it is used by the public function
16
+ * `subtract`
17
+ *
18
+ * This function does not support collections (Array or Matrix).
19
+ *
20
+ * @param {number | BigNumber | Fraction | Complex | Unit} x First value
21
+ * @param {number | BigNumber | Fraction | Complex} y Second value to be subtracted from `x`
22
+ * @return {number | BigNumber | Fraction | Complex | Unit} Difference of `x` and `y`
23
+ * @private
24
+ */
25
+ return typed(name, {
26
+ 'number, number': _index.subtractNumber,
27
+ 'Complex, Complex': function ComplexComplex(x, y) {
28
+ return x.sub(y);
29
+ },
30
+ 'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
31
+ return x.minus(y);
32
+ },
33
+ 'Fraction, Fraction': function FractionFraction(x, y) {
34
+ return x.sub(y);
35
+ },
36
+ 'Unit, Unit': typed.referToSelf(function (self) {
37
+ return function (x, y) {
38
+ if (x.value === null || x.value === undefined) {
39
+ throw new Error('Parameter x contains a unit with undefined value');
40
+ }
41
+ if (y.value === null || y.value === undefined) {
42
+ throw new Error('Parameter y contains a unit with undefined value');
43
+ }
44
+ if (!x.equalBase(y)) throw new Error('Units do not match');
45
+ var res = x.clone();
46
+ res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
47
+ res.fixPrefix = false;
48
+ return res;
49
+ };
50
+ })
51
+ });
52
+ });
@@ -7,11 +7,11 @@ exports.createStirlingS2 = void 0;
7
7
  var _factory = require("../../utils/factory.js");
8
8
  var _is = require("../../utils/is.js");
9
9
  var name = 'stirlingS2';
10
- var dependencies = ['typed', 'addScalar', 'subtract', 'multiplyScalar', 'divideScalar', 'pow', 'factorial', 'combinations', 'isNegative', 'isInteger', 'number', '?bignumber', 'larger'];
10
+ var dependencies = ['typed', 'addScalar', 'subtractScalar', 'multiplyScalar', 'divideScalar', 'pow', 'factorial', 'combinations', 'isNegative', 'isInteger', 'number', '?bignumber', 'larger'];
11
11
  var createStirlingS2 = exports.createStirlingS2 = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
12
12
  var typed = _ref.typed,
13
13
  addScalar = _ref.addScalar,
14
- subtract = _ref.subtract,
14
+ subtractScalar = _ref.subtractScalar,
15
15
  multiplyScalar = _ref.multiplyScalar,
16
16
  divideScalar = _ref.divideScalar,
17
17
  pow = _ref.pow,
@@ -7,11 +7,11 @@ exports.createDistance = void 0;
7
7
  var _is = require("../../utils/is.js");
8
8
  var _factory = require("../../utils/factory.js");
9
9
  var name = 'distance';
10
- var dependencies = ['typed', 'addScalar', 'subtract', 'divideScalar', 'multiplyScalar', 'deepEqual', 'sqrt', 'abs'];
10
+ var dependencies = ['typed', 'addScalar', 'subtractScalar', 'divideScalar', 'multiplyScalar', 'deepEqual', 'sqrt', 'abs'];
11
11
  var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
12
12
  var typed = _ref.typed,
13
13
  addScalar = _ref.addScalar,
14
- subtract = _ref.subtract,
14
+ subtractScalar = _ref.subtractScalar,
15
15
  multiplyScalar = _ref.multiplyScalar,
16
16
  divideScalar = _ref.divideScalar,
17
17
  deepEqual = _ref.deepEqual,
@@ -84,9 +84,9 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
84
84
  if (deepEqual(y, z)) {
85
85
  throw new TypeError('LinePoint1 should not be same with LinePoint2');
86
86
  }
87
- var xCoeff = subtract(z[1], y[1]);
88
- var yCoeff = subtract(y[0], z[0]);
89
- var constant = subtract(multiplyScalar(z[0], y[1]), multiplyScalar(y[0], z[1]));
87
+ var xCoeff = subtractScalar(z[1], y[1]);
88
+ var yCoeff = subtractScalar(y[0], z[0]);
89
+ var constant = subtractScalar(multiplyScalar(z[0], y[1]), multiplyScalar(y[0], z[1]));
90
90
  return _distancePointLine2D(x[0], x[1], xCoeff, yCoeff, constant);
91
91
  } else {
92
92
  throw new TypeError('Invalid Arguments: Try again');
@@ -107,9 +107,9 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
107
107
  throw new TypeError('LinePoint1 should not be same with LinePoint2');
108
108
  }
109
109
  if ('pointX' in x && 'pointY' in x && 'lineOnePtX' in y && 'lineOnePtY' in y && 'lineTwoPtX' in z && 'lineTwoPtY' in z) {
110
- var xCoeff = subtract(z.lineTwoPtY, y.lineOnePtY);
111
- var yCoeff = subtract(y.lineOnePtX, z.lineTwoPtX);
112
- var constant = subtract(multiplyScalar(z.lineTwoPtX, y.lineOnePtY), multiplyScalar(y.lineOnePtX, z.lineTwoPtY));
110
+ var xCoeff = subtractScalar(z.lineTwoPtY, y.lineOnePtY);
111
+ var yCoeff = subtractScalar(y.lineOnePtX, z.lineTwoPtX);
112
+ var constant = subtractScalar(multiplyScalar(z.lineTwoPtX, y.lineOnePtY), multiplyScalar(y.lineOnePtX, z.lineTwoPtY));
113
113
  return _distancePointLine2D(x.pointX, x.pointY, xCoeff, yCoeff, constant);
114
114
  } else {
115
115
  throw new TypeError('Key names do not match');
@@ -277,7 +277,7 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
277
277
  return divideScalar(num, den);
278
278
  }
279
279
  function _distancePointLine3D(x, y, z, x0, y0, z0, a, b, c) {
280
- var num = [subtract(multiplyScalar(subtract(y0, y), c), multiplyScalar(subtract(z0, z), b)), subtract(multiplyScalar(subtract(z0, z), a), multiplyScalar(subtract(x0, x), c)), subtract(multiplyScalar(subtract(x0, x), b), multiplyScalar(subtract(y0, y), a))];
280
+ var num = [subtractScalar(multiplyScalar(subtractScalar(y0, y), c), multiplyScalar(subtractScalar(z0, z), b)), subtractScalar(multiplyScalar(subtractScalar(z0, z), a), multiplyScalar(subtractScalar(x0, x), c)), subtractScalar(multiplyScalar(subtractScalar(x0, x), b), multiplyScalar(subtractScalar(y0, y), a))];
281
281
  num = sqrt(addScalar(addScalar(multiplyScalar(num[0], num[0]), multiplyScalar(num[1], num[1])), multiplyScalar(num[2], num[2])));
282
282
  var den = sqrt(addScalar(addScalar(multiplyScalar(a, a), multiplyScalar(b, b)), multiplyScalar(c, c)));
283
283
  return divideScalar(num, den);
@@ -287,7 +287,7 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
287
287
  var result = 0;
288
288
  var diff = 0;
289
289
  for (var i = 0; i < vectorSize; i++) {
290
- diff = subtract(x[i], y[i]);
290
+ diff = subtractScalar(x[i], y[i]);
291
291
  result = addScalar(multiplyScalar(diff, diff), result);
292
292
  }
293
293
  return sqrt(result);
@@ -9,11 +9,11 @@ var _object = require("../../utils/object.js");
9
9
  var _string = require("../../utils/string.js");
10
10
  var _factory = require("../../utils/factory.js");
11
11
  var name = 'det';
12
- var dependencies = ['typed', 'matrix', 'subtract', 'multiply', 'divideScalar', 'isZero', 'unaryMinus'];
12
+ var dependencies = ['typed', 'matrix', 'subtractScalar', 'multiply', 'divideScalar', 'isZero', 'unaryMinus'];
13
13
  var createDet = exports.createDet = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
14
14
  var typed = _ref.typed,
15
15
  matrix = _ref.matrix,
16
- subtract = _ref.subtract,
16
+ subtractScalar = _ref.subtractScalar,
17
17
  multiply = _ref.multiply,
18
18
  divideScalar = _ref.divideScalar,
19
19
  isZero = _ref.isZero,
@@ -108,7 +108,7 @@ var createDet = exports.createDet = /* #__PURE__ */(0, _factory.factory)(name, d
108
108
  } else if (rows === 2) {
109
109
  // this is a 2 x 2 matrix
110
110
  // the determinant of [a11,a12;a21,a22] is det = a11*a22-a21*a12
111
- return subtract(multiply(matrix[0][0], matrix[1][1]), multiply(matrix[1][0], matrix[0][1]));
111
+ return subtractScalar(multiply(matrix[0][0], matrix[1][1]), multiply(matrix[1][0], matrix[0][1]));
112
112
  } else {
113
113
  // Bareiss algorithm
114
114
  // this algorithm have same complexity as LUP decomposition (O(n^3))
@@ -138,7 +138,7 @@ var createDet = exports.createDet = /* #__PURE__ */(0, _factory.factory)(name, d
138
138
  for (var i = k + 1; i < rows; i++) {
139
139
  var i_ = rowIndices[i];
140
140
  for (var j = k + 1; j < rows; j++) {
141
- matrix[i_][j] = divideScalar(subtract(multiply(matrix[i_][j], piv), multiply(matrix[i_][k], matrix[k_][j])), piv_);
141
+ matrix[i_][j] = divideScalar(subtractScalar(multiply(matrix[i_][j], piv), multiply(matrix[i_][k], matrix[k_][j])), piv_);
142
142
  }
143
143
  }
144
144
  }
@@ -21,6 +21,8 @@ function createComplexEigs(_ref) {
21
21
  abs = _ref.abs,
22
22
  bignumber = _ref.bignumber,
23
23
  diag = _ref.diag,
24
+ size = _ref.size,
25
+ reshape = _ref.reshape,
24
26
  inv = _ref.inv,
25
27
  qr = _ref.qr,
26
28
  usolve = _ref.usolve,
@@ -40,11 +42,8 @@ function createComplexEigs(_ref) {
40
42
  *
41
43
  * @returns {{ values: number[], vectors: number[][] }}
42
44
  */
43
- function complexEigs(arr, N, prec, type, findVectors) {
44
- if (findVectors === undefined) {
45
- findVectors = true;
46
- }
47
-
45
+ function complexEigs(arr, N, prec, type) {
46
+ var findVectors = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
48
47
  // TODO check if any row/col are zero except the diagonal
49
48
 
50
49
  // make sure corresponding rows and columns have similar magnitude
@@ -53,9 +52,9 @@ function createComplexEigs(_ref) {
53
52
  var R = balance(arr, N, prec, type, findVectors);
54
53
 
55
54
  // R is the row transformation matrix
56
- // arr = A' = R A R⁻¹, A is the original matrix
55
+ // arr = A' = R A R^-1, A is the original matrix
57
56
  // (if findVectors is false, R is undefined)
58
- // (And so to return to original matrix: A = R⁻¹ arr R)
57
+ // (And so to return to original matrix: A = R^-1 arr R)
59
58
 
60
59
  // TODO if magnitudes of elements vary over many orders,
61
60
  // move greatest elements to the top left corner
@@ -65,7 +64,7 @@ function createComplexEigs(_ref) {
65
64
  // updates the transformation matrix R with new row operationsq
66
65
  // MODIFIES arr by side effect!
67
66
  reduceToHessenberg(arr, N, prec, type, findVectors, R);
68
- // still true that original A = R⁻¹ arr R)
67
+ // still true that original A = R^-1 arr R)
69
68
 
70
69
  // find eigenvalues
71
70
  var _iterateUntilTriangul = iterateUntilTriangular(arr, N, prec, type, findVectors),
@@ -75,17 +74,18 @@ function createComplexEigs(_ref) {
75
74
  // values is the list of eigenvalues, C is the column
76
75
  // transformation matrix that transforms arr, the hessenberg
77
76
  // matrix, to upper triangular
78
- // (So U = C⁻¹ arr C and the relationship between current arr
77
+ // (So U = C^-1 arr C and the relationship between current arr
79
78
  // and original A is unchanged.)
80
79
 
81
- var vectors;
82
80
  if (findVectors) {
83
- vectors = findEigenvectors(arr, N, C, R, values, prec, type);
84
- vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2["default"])(vectors));
81
+ var eigenvectors = findEigenvectors(arr, N, C, R, values, prec, type);
82
+ return {
83
+ values: values,
84
+ eigenvectors: eigenvectors
85
+ };
85
86
  }
86
87
  return {
87
- values: values,
88
- vectors: vectors
88
+ values: values
89
89
  };
90
90
  }
91
91
 
@@ -125,9 +125,8 @@ function createComplexEigs(_ref) {
125
125
  var rowNorm = realzero;
126
126
  for (var j = 0; j < N; j++) {
127
127
  if (i === j) continue;
128
- var c = abs(arr[i][j]); // should be real
129
- colNorm = addScalar(colNorm, c);
130
- rowNorm = addScalar(rowNorm, c);
128
+ colNorm = addScalar(colNorm, abs(arr[j][i]));
129
+ rowNorm = addScalar(rowNorm, abs(arr[i][j]));
131
130
  }
132
131
  if (!equal(colNorm, 0) && !equal(rowNorm, 0)) {
133
132
  // find integer power closest to balancing the matrix
@@ -135,21 +134,21 @@ function createComplexEigs(_ref) {
135
134
  // so that we don't lose any precision due to round-off)
136
135
 
137
136
  var f = realone;
138
- var _c = colNorm;
137
+ var c = colNorm;
139
138
  var rowDivRadix = divideScalar(rowNorm, radix);
140
139
  var rowMulRadix = multiplyScalar(rowNorm, radix);
141
- while (smaller(_c, rowDivRadix)) {
142
- _c = multiplyScalar(_c, radixSq);
140
+ while (smaller(c, rowDivRadix)) {
141
+ c = multiplyScalar(c, radixSq);
143
142
  f = multiplyScalar(f, radix);
144
143
  }
145
- while (larger(_c, rowMulRadix)) {
146
- _c = divideScalar(_c, radixSq);
144
+ while (larger(c, rowMulRadix)) {
145
+ c = divideScalar(c, radixSq);
147
146
  f = divideScalar(f, radix);
148
147
  }
149
148
 
150
149
  // check whether balancing is needed
151
150
  // condition = (c + rowNorm) / f < 0.95 * (colNorm + rowNorm)
152
- var condition = smaller(divideScalar(addScalar(_c, rowNorm), f), multiplyScalar(addScalar(colNorm, rowNorm), 0.95));
151
+ var condition = smaller(divideScalar(addScalar(c, rowNorm), f), multiplyScalar(addScalar(colNorm, rowNorm), 0.95));
153
152
 
154
153
  // apply balancing similarity transformation
155
154
  if (condition) {
@@ -161,13 +160,13 @@ function createComplexEigs(_ref) {
161
160
  if (i === _j) {
162
161
  continue;
163
162
  }
164
- arr[i][_j] = multiplyScalar(arr[i][_j], f);
165
- arr[_j][i] = multiplyScalar(arr[_j][i], g);
163
+ arr[i][_j] = multiplyScalar(arr[i][_j], g);
164
+ arr[_j][i] = multiplyScalar(arr[_j][i], f);
166
165
  }
167
166
 
168
167
  // keep track of transformations
169
168
  if (findVectors) {
170
- Rdiag[i] = multiplyScalar(Rdiag[i], f);
169
+ Rdiag[i] = multiplyScalar(Rdiag[i], g);
171
170
  }
172
171
  }
173
172
  }
@@ -175,7 +174,7 @@ function createComplexEigs(_ref) {
175
174
  }
176
175
 
177
176
  // return the diagonal row transformation matrix
178
- return diag(Rdiag);
177
+ return findVectors ? diag(Rdiag) : null;
179
178
  }
180
179
 
181
180
  /**
@@ -274,7 +273,7 @@ function createComplexEigs(_ref) {
274
273
 
275
274
  // The Francis Algorithm
276
275
  // The core idea of this algorithm is that doing successive
277
- // A' = Q⁺AQ transformations will eventually converge to block-
276
+ // A' = QtAQ transformations will eventually converge to block-
278
277
  // upper-triangular with diagonal blocks either 1x1 or 2x2.
279
278
  // The Q here is the one from the QR decomposition, A = QR.
280
279
  // Since the eigenvalues of a block-upper-triangular matrix are
@@ -296,7 +295,7 @@ function createComplexEigs(_ref) {
296
295
  // N×N matrix describing the overall transformation done during the QR algorithm
297
296
  var Qtotal = findVectors ? diag(Array(N).fill(one)) : undefined;
298
297
 
299
- // n×n matrix describing the QR transformations done since last convergence
298
+ // nxn matrix describing the QR transformations done since last convergence
300
299
  var Qpartial = findVectors ? diag(Array(n).fill(one)) : undefined;
301
300
 
302
301
  // last eigenvalue converged before this many steps
@@ -308,7 +307,12 @@ function createComplexEigs(_ref) {
308
307
 
309
308
  // Perform the factorization
310
309
 
311
- var k = 0; // TODO set close to an eigenvalue
310
+ var k = arr[n - 1][n - 1]; // TODO this is apparently a somewhat
311
+ // old-fashioned choice; ideally set close to an eigenvalue, or
312
+ // perhaps better yet switch to the implicit QR version that is sometimes
313
+ // specifically called the "Francis algorithm" that is alluded to
314
+ // in the following TODO. (Or perhaps we switch to an independently
315
+ // optimized third-party package for the linear algebra operations...)
312
316
 
313
317
  for (var i = 0; i < n; i++) {
314
318
  arr[i][i] = subtract(arr[i][i], k);
@@ -427,17 +431,17 @@ function createComplexEigs(_ref) {
427
431
  _step;
428
432
  try {
429
433
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
430
- var λ = _step.value;
431
- var _i4 = indexOf(uniqueValues, λ, equal);
434
+ var lambda = _step.value;
435
+ var _i4 = indexOf(uniqueValues, lambda, equal);
432
436
  if (_i4 === -1) {
433
- uniqueValues.push(λ);
437
+ uniqueValues.push(lambda);
434
438
  multiplicities.push(1);
435
439
  } else {
436
440
  multiplicities[_i4] += 1;
437
441
  }
438
442
  }
439
443
 
440
- // find eigenvectors by solving U − λE = 0
444
+ // find eigenvectors by solving U − lambdaE = 0
441
445
  // TODO replace with an iterative eigenvector algorithm
442
446
  // (this one might fail for imprecise eigenvalues)
443
447
  } catch (err) {
@@ -449,24 +453,21 @@ function createComplexEigs(_ref) {
449
453
  var len = uniqueValues.length;
450
454
  var b = Array(N).fill(zero);
451
455
  var E = diag(Array(N).fill(one));
452
-
453
- // eigenvalues for which usolve failed (due to numerical error)
454
- var failedLambdas = [];
455
456
  var _loop = function _loop() {
456
- var λ = uniqueValues[i];
457
- var S = subtract(U, multiply(λ, E)); // the characteristic matrix
457
+ var lambda = uniqueValues[i];
458
+ var S = subtract(U, multiply(lambda, E)); // the characteristic matrix
458
459
 
459
460
  var solutions = usolveAll(S, b);
460
461
  solutions.shift(); // ignore the null vector
461
462
 
462
463
  // looks like we missed something, try inverse iteration
464
+ // But if that fails, just presume that the original matrix truly
465
+ // was defective.
463
466
  while (solutions.length < multiplicities[i]) {
464
467
  var approxVec = inverseIterate(S, N, solutions, prec, type);
465
- if (approxVec == null) {
466
- // no more vectors were found
467
- failedLambdas.push(λ);
468
+ if (approxVec === null) {
468
469
  break;
469
- }
470
+ } // no more vectors were found
470
471
  solutions.push(approxVec);
471
472
  }
472
473
 
@@ -476,18 +477,15 @@ function createComplexEigs(_ref) {
476
477
  return multiply(correction, v);
477
478
  });
478
479
  vectors.push.apply(vectors, (0, _toConsumableArray2["default"])(solutions.map(function (v) {
479
- return flatten(v);
480
+ return {
481
+ value: lambda,
482
+ vector: flatten(v)
483
+ };
480
484
  })));
481
485
  };
482
486
  for (var i = 0; i < len; i++) {
483
487
  _loop();
484
488
  }
485
- if (failedLambdas.length !== 0) {
486
- var err = new Error('Failed to find eigenvectors for the following eigenvalues: ' + failedLambdas.join(', '));
487
- err.values = values;
488
- err.vectors = vectors;
489
- throw err;
490
- }
491
489
  return vectors;
492
490
  }
493
491
 
@@ -496,7 +494,7 @@ function createComplexEigs(_ref) {
496
494
  * @return {[number,number]}
497
495
  */
498
496
  function eigenvalues2x2(a, b, c, d) {
499
- // λ± = ½ trA ± ½ ( tr²A - 4 detA )
497
+ // lambda_+- = 1/2 trA +- 1/2 sqrt( tr^2 A - 4 detA )
500
498
  var trA = addScalar(a, d);
501
499
  var detA = subtract(multiplyScalar(a, d), multiplyScalar(b, c));
502
500
  var x = multiplyScalar(trA, 0.5);
@@ -506,7 +504,7 @@ function createComplexEigs(_ref) {
506
504
 
507
505
  /**
508
506
  * For an 2x2 matrix compute the transformation matrix S,
509
- * so that SAS⁻¹ is an upper triangular matrix
507
+ * so that SAS^-1 is an upper triangular matrix
510
508
  * @return {[[number,number],[number,number]]}
511
509
  * @see https://math.berkeley.edu/~ogus/old/Math_54-05/webfoils/jordan.pdf
512
510
  * @see http://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html
@@ -530,23 +528,22 @@ function createComplexEigs(_ref) {
530
528
  }
531
529
 
532
530
  // matrix is not diagonalizable
533
- // compute off-diagonal elements of N = A - λI
534
- // N₁₂ = 0 ⇒ S = ( N⃗₁, I⃗₁ )
535
- // N₁₂ ≠ 0 ⇒ S = ( N⃗₂, I⃗₂ )
536
-
531
+ // compute diagonal elements of N = A - lambdaI
537
532
  var na = subtract(a, l1);
538
- var nb = subtract(b, l1);
539
- var nc = subtract(c, l1);
540
533
  var nd = subtract(d, l1);
541
- if (smaller(abs(nb), prec)) {
542
- return [[na, one], [nc, zero]];
534
+
535
+ // col(N,2) = 0 implies S = ( col(N,1), e_1 )
536
+ // col(N,2) != 0 implies S = ( col(N,2), e_2 )
537
+
538
+ if (smaller(abs(b), prec) && smaller(abs(nd), prec)) {
539
+ return [[na, one], [c, zero]];
543
540
  } else {
544
- return [[nb, zero], [nd, one]];
541
+ return [[b, zero], [nd, one]];
545
542
  }
546
543
  }
547
544
 
548
545
  /**
549
- * Enlarge the matrix from n×n to N×N, setting the new
546
+ * Enlarge the matrix from nxn to NxN, setting the new
550
547
  * elements to 1 on diagonal and 0 elsewhere
551
548
  */
552
549
  function inflateMatrix(arr, N) {
@@ -633,15 +630,21 @@ function createComplexEigs(_ref) {
633
630
 
634
631
  // you better choose a random vector before I count to five
635
632
  var i = 0;
636
- while (true) {
633
+ for (; i < 5; ++i) {
637
634
  b = randomOrthogonalVector(N, orthog, type);
638
- b = usolve(A, b);
635
+ try {
636
+ b = usolve(A, b);
637
+ } catch (_unused) {
638
+ // That direction didn't work, likely because the original matrix
639
+ // was defective. But still make the full number of tries...
640
+ continue;
641
+ }
639
642
  if (larger(norm(b), largeNum)) {
640
643
  break;
641
644
  }
642
- if (++i >= 5) {
643
- return null;
644
- }
645
+ }
646
+ if (i >= 5) {
647
+ return null; // couldn't find any orthogonal vector in the image
645
648
  }
646
649
 
647
650
  // you better converge before I count to ten
@@ -697,12 +700,14 @@ function createComplexEigs(_ref) {
697
700
  * Project vector v to the orthogonal complement of an array of vectors
698
701
  */
699
702
  function orthogonalComplement(v, orthog) {
703
+ var vectorShape = size(v);
700
704
  var _iterator3 = _createForOfIteratorHelper(orthog),
701
705
  _step3;
702
706
  try {
703
707
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
704
708
  var w = _step3.value;
705
- // v := v − (w, v)/∥w∥² w
709
+ w = reshape(w, vectorShape); // make sure this is just a vector computation
710
+ // v := v − (w, v)/|w|^2 w
706
711
  v = subtract(v, multiply(divideScalar(dot(w, v), dot(w, w)), w));
707
712
  }
708
713
  } catch (err) {