mathjs 11.11.2 → 12.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +48 -0
- package/README.md +1 -1
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +2 -2
- package/lib/cjs/defaultInstance.js +2 -2
- package/lib/cjs/entry/allFactoriesAny.js +2 -2
- package/lib/cjs/entry/allFactoriesNumber.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +17 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
- package/lib/cjs/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +17 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +4 -3
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -1
- package/lib/cjs/entry/pureFunctionsAny.generated.js +43 -37
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +16 -13
- package/lib/cjs/expression/embeddedDocs/function/matrix/eigs.js +2 -2
- package/lib/cjs/expression/node/AssignmentNode.js +1 -1
- package/lib/cjs/expression/node/FunctionAssignmentNode.js +1 -1
- package/lib/cjs/expression/parse.js +50 -69
- package/lib/cjs/factoriesAny.js +7 -0
- package/lib/cjs/factoriesNumber.js +2 -1
- package/lib/cjs/function/algebra/decomposition/lup.js +3 -3
- package/lib/cjs/function/algebra/decomposition/qr.js +5 -5
- package/lib/cjs/function/algebra/solver/lsolve.js +4 -4
- package/lib/cjs/function/algebra/solver/lsolveAll.js +6 -6
- package/lib/cjs/function/algebra/solver/usolve.js +4 -4
- package/lib/cjs/function/algebra/solver/usolveAll.js +6 -6
- package/lib/cjs/function/arithmetic/subtract.js +7 -37
- package/lib/cjs/function/arithmetic/subtractScalar.js +52 -0
- package/lib/cjs/function/combinatorics/stirlingS2.js +2 -2
- package/lib/cjs/function/geometry/distance.js +10 -10
- package/lib/cjs/function/matrix/det.js +4 -4
- package/lib/cjs/function/matrix/eigs/complexEigs.js +73 -68
- package/lib/cjs/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +57 -51
- package/lib/cjs/function/matrix/eigs.js +118 -45
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/unit/Unit.js +5 -5
- package/lib/cjs/utils/number.js +1 -1
- package/lib/cjs/utils/object.js +4 -2
- package/lib/cjs/utils/snapshot.js +3 -3
- package/lib/cjs/utils/string.js +12 -16
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +10 -0
- package/lib/esm/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny.generated.js +1 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
- package/lib/esm/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +10 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +5 -4
- package/lib/esm/entry/impureFunctionsNumber.generated.js +3 -2
- package/lib/esm/entry/pureFunctionsAny.generated.js +42 -37
- package/lib/esm/entry/pureFunctionsNumber.generated.js +16 -13
- package/lib/esm/expression/embeddedDocs/function/matrix/eigs.js +2 -2
- package/lib/esm/expression/node/AssignmentNode.js +1 -1
- package/lib/esm/expression/node/FunctionAssignmentNode.js +1 -1
- package/lib/esm/expression/parse.js +50 -69
- package/lib/esm/factoriesAny.js +1 -0
- package/lib/esm/factoriesNumber.js +1 -0
- package/lib/esm/function/algebra/decomposition/lup.js +3 -3
- package/lib/esm/function/algebra/decomposition/qr.js +5 -5
- package/lib/esm/function/algebra/solver/lsolve.js +4 -4
- package/lib/esm/function/algebra/solver/lsolveAll.js +6 -6
- package/lib/esm/function/algebra/solver/usolve.js +4 -4
- package/lib/esm/function/algebra/solver/usolveAll.js +6 -6
- package/lib/esm/function/arithmetic/subtract.js +7 -27
- package/lib/esm/function/arithmetic/subtractScalar.js +46 -0
- package/lib/esm/function/combinatorics/stirlingS2.js +2 -2
- package/lib/esm/function/geometry/distance.js +10 -10
- package/lib/esm/function/matrix/det.js +4 -4
- package/lib/esm/function/matrix/eigs/complexEigs.js +73 -68
- package/lib/esm/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +55 -51
- package/lib/esm/function/matrix/eigs.js +119 -47
- package/lib/esm/type/unit/Unit.js +5 -5
- package/lib/esm/utils/number.js +1 -1
- package/lib/esm/utils/object.js +5 -3
- package/lib/esm/utils/snapshot.js +1 -1
- package/lib/esm/utils/string.js +12 -16
- package/lib/esm/version.js +1 -1
- package/package.json +14 -14
- package/types/EXPLANATION.md +54 -0
- 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', '
|
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
|
-
|
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] = [
|
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] = [
|
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', '
|
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
|
-
|
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] =
|
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] =
|
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] =
|
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] =
|
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', '
|
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
|
-
|
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
|
-
*
|
78
|
-
* @
|
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
|
-
'
|
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', '
|
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
|
-
|
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', '
|
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
|
-
|
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 =
|
88
|
-
var yCoeff =
|
89
|
-
var constant =
|
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 =
|
111
|
-
var yCoeff =
|
112
|
-
var constant =
|
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 = [
|
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 =
|
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', '
|
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
|
-
|
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
|
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(
|
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
|
44
|
-
|
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
|
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
|
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
|
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
|
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
|
-
|
84
|
-
|
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
|
-
|
129
|
-
|
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
|
137
|
+
var c = colNorm;
|
139
138
|
var rowDivRadix = divideScalar(rowNorm, radix);
|
140
139
|
var rowMulRadix = multiplyScalar(rowNorm, radix);
|
141
|
-
while (smaller(
|
142
|
-
|
140
|
+
while (smaller(c, rowDivRadix)) {
|
141
|
+
c = multiplyScalar(c, radixSq);
|
143
142
|
f = multiplyScalar(f, radix);
|
144
143
|
}
|
145
|
-
while (larger(
|
146
|
-
|
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(
|
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],
|
165
|
-
arr[_j][i] = multiplyScalar(arr[_j][i],
|
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],
|
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' =
|
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
|
-
//
|
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 =
|
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
|
431
|
-
var _i4 = indexOf(uniqueValues,
|
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 −
|
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
|
457
|
-
var S = subtract(U, multiply(
|
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
|
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
|
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
|
-
//
|
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
|
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
|
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
|
-
|
542
|
-
|
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 [[
|
541
|
+
return [[b, zero], [nd, one]];
|
545
542
|
}
|
546
543
|
}
|
547
544
|
|
548
545
|
/**
|
549
|
-
* Enlarge the matrix from
|
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
|
-
|
633
|
+
for (; i < 5; ++i) {
|
637
634
|
b = randomOrthogonalVector(N, orthog, type);
|
638
|
-
|
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
|
-
|
643
|
-
|
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
|
-
|
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) {
|