@danielsimonjr/mathts-functions 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1538 -431
- package/dist/numeric/control-equations.d.ts +94 -0
- package/dist/numeric/control-equations.d.ts.map +1 -0
- package/dist/numeric/eigsh.d.ts +60 -0
- package/dist/numeric/eigsh.d.ts.map +1 -0
- package/dist/numeric/krylov.d.ts +83 -0
- package/dist/numeric/krylov.d.ts.map +1 -0
- package/dist/numeric/matrix-functions.d.ts +74 -0
- package/dist/numeric/matrix-functions.d.ts.map +1 -0
- package/dist/numeric/structured-solvers.d.ts +89 -0
- package/dist/numeric/structured-solvers.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3402,10 +3402,10 @@ async function fftGpuDispatchImpl(real, imag, inverse, options) {
|
|
|
3402
3402
|
staging.unmap();
|
|
3403
3403
|
const outRe = new Float64Array(n);
|
|
3404
3404
|
const outIm = new Float64Array(n);
|
|
3405
|
-
const
|
|
3405
|
+
const scale3 = inverse ? 1 / n : 1;
|
|
3406
3406
|
for (let i = 0; i < n; i++) {
|
|
3407
|
-
outRe[i] = packed[i * 2] *
|
|
3408
|
-
outIm[i] = packed[i * 2 + 1] *
|
|
3407
|
+
outRe[i] = packed[i * 2] * scale3;
|
|
3408
|
+
outIm[i] = packed[i * 2 + 1] * scale3;
|
|
3409
3409
|
}
|
|
3410
3410
|
return { real: outRe, imag: outIm };
|
|
3411
3411
|
} catch {
|
|
@@ -4290,9 +4290,9 @@ function hilbertTransform(x) {
|
|
|
4290
4290
|
try {
|
|
4291
4291
|
const paddedInput = new Array(N).fill(0);
|
|
4292
4292
|
for (let i = 0; i < n; i++) paddedInput[i] = x[i];
|
|
4293
|
-
const
|
|
4293
|
+
const zeros4 = new Array(N).fill(0);
|
|
4294
4294
|
const inReAlloc = wasmLoader.allocateFloat64Array(paddedInput);
|
|
4295
|
-
const inImAlloc = wasmLoader.allocateFloat64Array(
|
|
4295
|
+
const inImAlloc = wasmLoader.allocateFloat64Array(zeros4);
|
|
4296
4296
|
const outReAlloc = wasmLoader.allocateFloat64ArrayEmpty(N);
|
|
4297
4297
|
const outImAlloc = wasmLoader.allocateFloat64ArrayEmpty(N);
|
|
4298
4298
|
try {
|
|
@@ -5511,8 +5511,8 @@ function modNumber(x, y) {
|
|
|
5511
5511
|
}
|
|
5512
5512
|
modNumber.signature = n2;
|
|
5513
5513
|
function nthRootNumber(a, root2 = 2) {
|
|
5514
|
-
const
|
|
5515
|
-
if (
|
|
5514
|
+
const inv3 = root2 < 0;
|
|
5515
|
+
if (inv3) {
|
|
5516
5516
|
root2 = -root2;
|
|
5517
5517
|
}
|
|
5518
5518
|
if (root2 === 0) {
|
|
@@ -5522,14 +5522,14 @@ function nthRootNumber(a, root2 = 2) {
|
|
|
5522
5522
|
throw new Error("Root must be odd when a is negative.");
|
|
5523
5523
|
}
|
|
5524
5524
|
if (a === 0) {
|
|
5525
|
-
return
|
|
5525
|
+
return inv3 ? Infinity : 0;
|
|
5526
5526
|
}
|
|
5527
5527
|
if (!isFinite(a)) {
|
|
5528
|
-
return
|
|
5528
|
+
return inv3 ? 0 : a;
|
|
5529
5529
|
}
|
|
5530
5530
|
let x = Math.pow(Math.abs(a), 1 / root2);
|
|
5531
5531
|
x = a < 0 ? -x : x;
|
|
5532
|
-
return
|
|
5532
|
+
return inv3 ? 1 / x : x;
|
|
5533
5533
|
}
|
|
5534
5534
|
function signNumber(x) {
|
|
5535
5535
|
return sign2(x);
|
|
@@ -8256,26 +8256,26 @@ var betaPDF = mathTyped11("betaPDF", {
|
|
|
8256
8256
|
return Promise.resolve(out);
|
|
8257
8257
|
}
|
|
8258
8258
|
});
|
|
8259
|
-
function gammaPDFScalar(x, shape,
|
|
8260
|
-
if (shape <= 0 ||
|
|
8259
|
+
function gammaPDFScalar(x, shape, scale3) {
|
|
8260
|
+
if (shape <= 0 || scale3 <= 0) return NaN;
|
|
8261
8261
|
if (x <= 0) return 0;
|
|
8262
8262
|
return Math.exp(
|
|
8263
|
-
(shape - 1) * Math.log(x) - x /
|
|
8263
|
+
(shape - 1) * Math.log(x) - x / scale3 - _lgammaD(shape) - shape * Math.log(scale3)
|
|
8264
8264
|
);
|
|
8265
8265
|
}
|
|
8266
8266
|
var gammaPDF = mathTyped11("gammaPDF", {
|
|
8267
|
-
"number, number, number": (x, shape,
|
|
8268
|
-
"Float64Array, number, number": (x, shape,
|
|
8267
|
+
"number, number, number": (x, shape, scale3) => gammaPDFScalar(x, shape, scale3),
|
|
8268
|
+
"Float64Array, number, number": (x, shape, scale3) => {
|
|
8269
8269
|
const out = new Float64Array(x.length);
|
|
8270
8270
|
const lgShape = _lgammaD(shape);
|
|
8271
|
-
const logScale = Math.log(
|
|
8271
|
+
const logScale = Math.log(scale3);
|
|
8272
8272
|
const logConstant = lgShape + shape * logScale;
|
|
8273
8273
|
for (let i = 0; i < x.length; i++) {
|
|
8274
8274
|
const xi = x[i];
|
|
8275
8275
|
if (xi <= 0) {
|
|
8276
8276
|
out[i] = 0;
|
|
8277
8277
|
} else {
|
|
8278
|
-
out[i] = Math.exp((shape - 1) * Math.log(xi) - xi /
|
|
8278
|
+
out[i] = Math.exp((shape - 1) * Math.log(xi) - xi / scale3 - logConstant);
|
|
8279
8279
|
}
|
|
8280
8280
|
}
|
|
8281
8281
|
return Promise.resolve(out);
|
|
@@ -8381,18 +8381,18 @@ import { computePool as computePool7 } from "@danielsimonjr/mathts-parallel";
|
|
|
8381
8381
|
var GEOMETRY_WASM_THRESHOLD = 32;
|
|
8382
8382
|
var HULL3D_WASM_THRESHOLD = 1024;
|
|
8383
8383
|
function angle2D(v1, v2) {
|
|
8384
|
-
const
|
|
8384
|
+
const dot7 = v1[0] * v2[0] + v1[1] * v2[1];
|
|
8385
8385
|
const mag1 = Math.sqrt(v1[0] ** 2 + v1[1] ** 2);
|
|
8386
8386
|
const mag2 = Math.sqrt(v2[0] ** 2 + v2[1] ** 2);
|
|
8387
8387
|
if (mag1 === 0 || mag2 === 0) return NaN;
|
|
8388
|
-
return Math.acos(Math.max(-1, Math.min(1,
|
|
8388
|
+
return Math.acos(Math.max(-1, Math.min(1, dot7 / (mag1 * mag2))));
|
|
8389
8389
|
}
|
|
8390
8390
|
function angle3D(v1, v2) {
|
|
8391
|
-
const
|
|
8391
|
+
const dot7 = v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
|
|
8392
8392
|
const mag1 = Math.sqrt(v1[0] ** 2 + v1[1] ** 2 + v1[2] ** 2);
|
|
8393
8393
|
const mag2 = Math.sqrt(v2[0] ** 2 + v2[1] ** 2 + v2[2] ** 2);
|
|
8394
8394
|
if (mag1 === 0 || mag2 === 0) return NaN;
|
|
8395
|
-
return Math.acos(Math.max(-1, Math.min(1,
|
|
8395
|
+
return Math.acos(Math.max(-1, Math.min(1, dot7 / (mag1 * mag2))));
|
|
8396
8396
|
}
|
|
8397
8397
|
function cross3D(a, b) {
|
|
8398
8398
|
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
@@ -8497,15 +8497,15 @@ function reflectVector(v, normal) {
|
|
|
8497
8497
|
const mag = Math.sqrt(normal.reduce((s, c) => s + c * c, 0));
|
|
8498
8498
|
if (mag === 0) return v.slice();
|
|
8499
8499
|
const n = normal.map((c) => c / mag);
|
|
8500
|
-
const
|
|
8501
|
-
return v.map((c, i) => c - 2 *
|
|
8500
|
+
const dot7 = v.reduce((s, c, i) => s + c * n[i], 0);
|
|
8501
|
+
return v.map((c, i) => c - 2 * dot7 * n[i]);
|
|
8502
8502
|
}
|
|
8503
8503
|
function projectVector(v, onto) {
|
|
8504
|
-
const
|
|
8504
|
+
const dot7 = v.reduce((s, c, i) => s + c * onto[i], 0);
|
|
8505
8505
|
const magSq = onto.reduce((s, c) => s + c * c, 0);
|
|
8506
8506
|
if (magSq === 0) return onto.map(() => 0);
|
|
8507
|
-
const
|
|
8508
|
-
return onto.map((c) => c *
|
|
8507
|
+
const scale3 = dot7 / magSq;
|
|
8508
|
+
return onto.map((c) => c * scale3);
|
|
8509
8509
|
}
|
|
8510
8510
|
function distance2D(a, b) {
|
|
8511
8511
|
return Math.sqrt((b[0] - a[0]) ** 2 + (b[1] - a[1]) ** 2);
|
|
@@ -11487,8 +11487,8 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11487
11487
|
dependencies,
|
|
11488
11488
|
({
|
|
11489
11489
|
typed: typed3,
|
|
11490
|
-
add:
|
|
11491
|
-
subtract:
|
|
11490
|
+
add: add3,
|
|
11491
|
+
subtract: subtract3,
|
|
11492
11492
|
multiply: multiply2,
|
|
11493
11493
|
divide: divide2,
|
|
11494
11494
|
max: max2,
|
|
@@ -11697,16 +11697,16 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11697
11697
|
const hMag = Math.min(h0, Math.abs(tf - t0));
|
|
11698
11698
|
h = isForwards ? hMag : -hMag;
|
|
11699
11699
|
} else {
|
|
11700
|
-
h = divide2(
|
|
11700
|
+
h = divide2(subtract3(tf, t0), steps);
|
|
11701
11701
|
}
|
|
11702
11702
|
const t = [t0];
|
|
11703
11703
|
const y = [y0];
|
|
11704
|
-
const deltaB =
|
|
11704
|
+
const deltaB = subtract3(b, bp);
|
|
11705
11705
|
function stageCombo(coeffs, stages) {
|
|
11706
11706
|
const m = Math.min(coeffs.length, stages.length);
|
|
11707
11707
|
let acc = multiply2(coeffs[0], stages[0]);
|
|
11708
11708
|
for (let j = 1; j < m; j++) {
|
|
11709
|
-
acc =
|
|
11709
|
+
acc = add3(acc, multiply2(coeffs[j], stages[j]));
|
|
11710
11710
|
}
|
|
11711
11711
|
return acc;
|
|
11712
11712
|
}
|
|
@@ -11719,14 +11719,14 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11719
11719
|
h = trimStep(t[n], tf, h);
|
|
11720
11720
|
k.push(f(t[n], y[n]));
|
|
11721
11721
|
for (let i = 1; i < c.length; ++i) {
|
|
11722
|
-
k.push(f(
|
|
11722
|
+
k.push(f(add3(t[n], multiply2(c[i], h)), add3(y[n], multiply2(h, stageCombo(a[i], k)))));
|
|
11723
11723
|
}
|
|
11724
11724
|
const errComb = stageCombo(deltaB, k);
|
|
11725
11725
|
const errArr = Array.isArray(errComb) ? errComb : [errComb];
|
|
11726
11726
|
const TE = max2(abs2(map2(errArr, (X) => isUnit(X) ? X.value : X)));
|
|
11727
11727
|
if (TE < tol && tol / TE > 1 / 4) {
|
|
11728
|
-
t.push(
|
|
11729
|
-
y.push(
|
|
11728
|
+
t.push(add3(t[n], h));
|
|
11729
|
+
y.push(add3(y[n], multiply2(h, stageCombo(b, k))));
|
|
11730
11730
|
n++;
|
|
11731
11731
|
}
|
|
11732
11732
|
let delta = 0.84 * (tol / TE) ** (1 / 5);
|
|
@@ -11807,8 +11807,8 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11807
11807
|
function _createTrimStep(isForwards) {
|
|
11808
11808
|
const outOfBounds = isForwards ? larger2 : smaller2;
|
|
11809
11809
|
return function(t, tf, h) {
|
|
11810
|
-
const next =
|
|
11811
|
-
return outOfBounds(next, tf) ?
|
|
11810
|
+
const next = add3(t, h);
|
|
11811
|
+
return outOfBounds(next, tf) ? subtract3(tf, t) : h;
|
|
11812
11812
|
};
|
|
11813
11813
|
}
|
|
11814
11814
|
function isNumOrBig(x) {
|
|
@@ -13096,8 +13096,8 @@ function quadprog(H, f, A, b) {
|
|
|
13096
13096
|
let aNorm = 0;
|
|
13097
13097
|
for (let j = 0; j < n; j++) aNorm += A[c][j] * A[c][j];
|
|
13098
13098
|
if (aNorm > 1e-15) {
|
|
13099
|
-
const
|
|
13100
|
-
for (let j = 0; j < n; j++) xNew[j] -=
|
|
13099
|
+
const scale3 = (ax - b[c]) / aNorm;
|
|
13100
|
+
for (let j = 0; j < n; j++) xNew[j] -= scale3 * A[c][j];
|
|
13101
13101
|
}
|
|
13102
13102
|
}
|
|
13103
13103
|
}
|
|
@@ -14397,9 +14397,9 @@ function _aggregateEigenvector(vectors, aggregation) {
|
|
|
14397
14397
|
const count2 = vectors.length;
|
|
14398
14398
|
const ref = vectors[0];
|
|
14399
14399
|
const aligned = vectors.map((v) => {
|
|
14400
|
-
let
|
|
14401
|
-
for (let i = 0; i < n; i++)
|
|
14402
|
-
if (
|
|
14400
|
+
let dot7 = 0;
|
|
14401
|
+
for (let i = 0; i < n; i++) dot7 += v[i] * ref[i];
|
|
14402
|
+
if (dot7 < 0) {
|
|
14403
14403
|
const flipped = new Float64Array(n);
|
|
14404
14404
|
for (let i = 0; i < n; i++) flipped[i] = -v[i];
|
|
14405
14405
|
return flipped;
|
|
@@ -14935,7 +14935,7 @@ function fDist(d1, d2) {
|
|
|
14935
14935
|
}
|
|
14936
14936
|
function gammaDist(shape, rate = 1) {
|
|
14937
14937
|
if (shape <= 0 || rate <= 0) throw new Error("gammaDist: shape and rate must be positive");
|
|
14938
|
-
const
|
|
14938
|
+
const scale3 = 1 / rate;
|
|
14939
14939
|
return {
|
|
14940
14940
|
pdf: (x) => {
|
|
14941
14941
|
if (x < 0) return 0;
|
|
@@ -14956,7 +14956,7 @@ function gammaDist(shape, rate = 1) {
|
|
|
14956
14956
|
if (p <= 0) return 0;
|
|
14957
14957
|
if (p >= 1) return Infinity;
|
|
14958
14958
|
let lo = 0;
|
|
14959
|
-
let hi = shape *
|
|
14959
|
+
let hi = shape * scale3 * 20;
|
|
14960
14960
|
while (_gammainc(shape, hi * rate) < p) hi *= 2;
|
|
14961
14961
|
for (let i = 0; i < 100; i++) {
|
|
14962
14962
|
const mid = (lo + hi) / 2;
|
|
@@ -14966,13 +14966,13 @@ function gammaDist(shape, rate = 1) {
|
|
|
14966
14966
|
}
|
|
14967
14967
|
return (lo + hi) / 2;
|
|
14968
14968
|
},
|
|
14969
|
-
mean: shape *
|
|
14970
|
-
variance: shape *
|
|
14971
|
-
sample: () => _gammaRandom(shape) *
|
|
14972
|
-
sampleN: (n, opts) => _sampleNDispatch("gamma", [shape,
|
|
14969
|
+
mean: shape * scale3,
|
|
14970
|
+
variance: shape * scale3 * scale3,
|
|
14971
|
+
sample: () => _gammaRandom(shape) * scale3,
|
|
14972
|
+
sampleN: (n, opts) => _sampleNDispatch("gamma", [shape, scale3], n, opts, (count2, rng) => {
|
|
14973
14973
|
const out = new Float64Array(count2);
|
|
14974
14974
|
for (let i = 0; i < count2; i++) {
|
|
14975
|
-
out[i] = _gammaRandomRng(shape, rng) *
|
|
14975
|
+
out[i] = _gammaRandomRng(shape, rng) * scale3;
|
|
14976
14976
|
}
|
|
14977
14977
|
return out;
|
|
14978
14978
|
})
|
|
@@ -16298,9 +16298,9 @@ function principalComponentAnalysis(data, k) {
|
|
|
16298
16298
|
const explained = eigenvalues.map((ev) => totalVar > 0 ? Math.abs(ev) / totalVar : 0);
|
|
16299
16299
|
const scores = centered.map((row2) => {
|
|
16300
16300
|
return eigenvectors.map((ev) => {
|
|
16301
|
-
let
|
|
16302
|
-
for (let j = 0; j < p; j++)
|
|
16303
|
-
return
|
|
16301
|
+
let dot7 = 0;
|
|
16302
|
+
for (let j = 0; j < p; j++) dot7 += row2[j] * ev[j];
|
|
16303
|
+
return dot7;
|
|
16304
16304
|
});
|
|
16305
16305
|
});
|
|
16306
16306
|
return { components: eigenvectors, explained, scores };
|
|
@@ -16702,9 +16702,9 @@ function mahalanobis(u, v, cov2) {
|
|
|
16702
16702
|
if (u.length !== v.length || cov2.length !== u.length) {
|
|
16703
16703
|
throw new Error("mahalanobis: u, v, and cov dimensions must match");
|
|
16704
16704
|
}
|
|
16705
|
-
const
|
|
16705
|
+
const inv3 = _matInverse(cov2);
|
|
16706
16706
|
const d = u.map((ui, i) => ui - v[i]);
|
|
16707
|
-
return Math.sqrt(_quadForm(d,
|
|
16707
|
+
return Math.sqrt(_quadForm(d, inv3));
|
|
16708
16708
|
}
|
|
16709
16709
|
function hotellingT2(data, mu0) {
|
|
16710
16710
|
const n = data.length;
|
|
@@ -16847,9 +16847,9 @@ function rowReduce(A, tol = 1e-10) {
|
|
|
16847
16847
|
if (maxRow !== pivotRow) {
|
|
16848
16848
|
[M[pivotRow], M[maxRow]] = [M[maxRow], M[pivotRow]];
|
|
16849
16849
|
}
|
|
16850
|
-
const
|
|
16850
|
+
const scale3 = M[pivotRow][col];
|
|
16851
16851
|
for (let j = col; j < n; j++) {
|
|
16852
|
-
M[pivotRow][j] /=
|
|
16852
|
+
M[pivotRow][j] /= scale3;
|
|
16853
16853
|
}
|
|
16854
16854
|
for (let row2 = 0; row2 < m; row2++) {
|
|
16855
16855
|
if (row2 === pivotRow) continue;
|
|
@@ -16935,30 +16935,30 @@ function hessenbergForm(A) {
|
|
|
16935
16935
|
if (normV < 1e-30) continue;
|
|
16936
16936
|
const beta2 = 2 / normV;
|
|
16937
16937
|
for (let j = k; j < n; j++) {
|
|
16938
|
-
let
|
|
16938
|
+
let dot7 = 0;
|
|
16939
16939
|
for (let i = 0; i < len; i++) {
|
|
16940
|
-
|
|
16940
|
+
dot7 += v[i] * H[k + 1 + i][j];
|
|
16941
16941
|
}
|
|
16942
16942
|
for (let i = 0; i < len; i++) {
|
|
16943
|
-
H[k + 1 + i][j] -= beta2 * v[i] *
|
|
16943
|
+
H[k + 1 + i][j] -= beta2 * v[i] * dot7;
|
|
16944
16944
|
}
|
|
16945
16945
|
}
|
|
16946
16946
|
for (let i = 0; i < n; i++) {
|
|
16947
|
-
let
|
|
16947
|
+
let dot7 = 0;
|
|
16948
16948
|
for (let j = 0; j < len; j++) {
|
|
16949
|
-
|
|
16949
|
+
dot7 += H[i][k + 1 + j] * v[j];
|
|
16950
16950
|
}
|
|
16951
16951
|
for (let j = 0; j < len; j++) {
|
|
16952
|
-
H[i][k + 1 + j] -= beta2 *
|
|
16952
|
+
H[i][k + 1 + j] -= beta2 * dot7 * v[j];
|
|
16953
16953
|
}
|
|
16954
16954
|
}
|
|
16955
16955
|
for (let i = 0; i < n; i++) {
|
|
16956
|
-
let
|
|
16956
|
+
let dot7 = 0;
|
|
16957
16957
|
for (let j = 0; j < len; j++) {
|
|
16958
|
-
|
|
16958
|
+
dot7 += Q2[i][k + 1 + j] * v[j];
|
|
16959
16959
|
}
|
|
16960
16960
|
for (let j = 0; j < len; j++) {
|
|
16961
|
-
Q2[i][k + 1 + j] -= beta2 *
|
|
16961
|
+
Q2[i][k + 1 + j] -= beta2 * dot7 * v[j];
|
|
16962
16962
|
}
|
|
16963
16963
|
}
|
|
16964
16964
|
}
|
|
@@ -16978,9 +16978,9 @@ async function matrixPower(A, p) {
|
|
|
16978
16978
|
return matPowBySquaring(A, p);
|
|
16979
16979
|
}
|
|
16980
16980
|
if (isInt && p < 0) {
|
|
16981
|
-
const
|
|
16982
|
-
if (p === -1) return
|
|
16983
|
-
return matPowBySquaring(
|
|
16981
|
+
const inv3 = matrixInverse(A);
|
|
16982
|
+
if (p === -1) return inv3;
|
|
16983
|
+
return matPowBySquaring(inv3, -p);
|
|
16984
16984
|
}
|
|
16985
16985
|
return matPowFractional(A, p);
|
|
16986
16986
|
}
|
|
@@ -17017,8 +17017,8 @@ function matrixInverse(A) {
|
|
|
17017
17017
|
}
|
|
17018
17018
|
if (maxVal < 1e-15) throw new Error("matrixPower: singular matrix cannot be inverted");
|
|
17019
17019
|
if (maxRow !== col) [M[col], M[maxRow]] = [M[maxRow], M[col]];
|
|
17020
|
-
const
|
|
17021
|
-
for (let j = 0; j < 2 * n; j++) M[col][j] /=
|
|
17020
|
+
const scale3 = M[col][col];
|
|
17021
|
+
for (let j = 0; j < 2 * n; j++) M[col][j] /= scale3;
|
|
17022
17022
|
for (let row2 = 0; row2 < n; row2++) {
|
|
17023
17023
|
if (row2 === col) continue;
|
|
17024
17024
|
const factor2 = M[row2][col];
|
|
@@ -17092,10 +17092,10 @@ async function matLogScalingSquaring(A) {
|
|
|
17092
17092
|
}
|
|
17093
17093
|
}
|
|
17094
17094
|
}
|
|
17095
|
-
const
|
|
17095
|
+
const scale3 = Math.pow(2, numSquares);
|
|
17096
17096
|
for (let i = 0; i < n; i++) {
|
|
17097
17097
|
for (let j = 0; j < n; j++) {
|
|
17098
|
-
logM[i][j] *=
|
|
17098
|
+
logM[i][j] *= scale3;
|
|
17099
17099
|
}
|
|
17100
17100
|
}
|
|
17101
17101
|
return logM;
|
|
@@ -17358,9 +17358,9 @@ async function solveApprox(A, b, n) {
|
|
|
17358
17358
|
}
|
|
17359
17359
|
}
|
|
17360
17360
|
if (maxRow !== col) [M[col], M[maxRow]] = [M[maxRow], M[col]];
|
|
17361
|
-
const
|
|
17362
|
-
if (Math.abs(
|
|
17363
|
-
for (let j = 0; j <= n; j++) M[col][j] /=
|
|
17361
|
+
const scale3 = M[col][col];
|
|
17362
|
+
if (Math.abs(scale3) < 1e-30) continue;
|
|
17363
|
+
for (let j = 0; j <= n; j++) M[col][j] /= scale3;
|
|
17364
17364
|
for (let row2 = 0; row2 < n; row2++) {
|
|
17365
17365
|
if (row2 === col) continue;
|
|
17366
17366
|
const factor2 = M[row2][col];
|
|
@@ -22171,41 +22171,41 @@ var createDot = /* @__PURE__ */ factory(
|
|
|
22171
22171
|
const bdt = isMatrix(b) ? b._datatype || b.getDataType() : void 0;
|
|
22172
22172
|
const aIsColumn = _size(a).length === 2;
|
|
22173
22173
|
const bIsColumn = _size(b).length === 2;
|
|
22174
|
-
let
|
|
22174
|
+
let add3 = addScalar2;
|
|
22175
22175
|
let mul = multiplyScalar2;
|
|
22176
22176
|
if (adt && bdt && adt === bdt && typeof adt === "string" && adt !== "mixed") {
|
|
22177
22177
|
const dt = adt;
|
|
22178
|
-
|
|
22178
|
+
add3 = typed3.find(addScalar2, [dt, dt]);
|
|
22179
22179
|
mul = typed3.find(multiplyScalar2, [dt, dt]);
|
|
22180
22180
|
}
|
|
22181
|
-
if (!aIsColumn && !bIsColumn &&
|
|
22181
|
+
if (!aIsColumn && !bIsColumn && add3 === addScalar2 && mul === multiplyScalar2 && _isFlatNumbers(adata) && _isFlatNumbers(bdata)) {
|
|
22182
22182
|
return pairwiseDot2(adata, bdata);
|
|
22183
22183
|
}
|
|
22184
22184
|
if (!aIsColumn && !bIsColumn) {
|
|
22185
22185
|
let c = mul(conj3(adata[0]), bdata[0]);
|
|
22186
22186
|
for (let i = 1; i < N; i++) {
|
|
22187
|
-
c =
|
|
22187
|
+
c = add3(c, mul(conj3(adata[i]), bdata[i]));
|
|
22188
22188
|
}
|
|
22189
22189
|
return c;
|
|
22190
22190
|
}
|
|
22191
22191
|
if (!aIsColumn && bIsColumn) {
|
|
22192
22192
|
let c = mul(conj3(adata[0]), bdata[0][0]);
|
|
22193
22193
|
for (let i = 1; i < N; i++) {
|
|
22194
|
-
c =
|
|
22194
|
+
c = add3(c, mul(conj3(adata[i]), bdata[i][0]));
|
|
22195
22195
|
}
|
|
22196
22196
|
return c;
|
|
22197
22197
|
}
|
|
22198
22198
|
if (aIsColumn && !bIsColumn) {
|
|
22199
22199
|
let c = mul(conj3(adata[0][0]), bdata[0]);
|
|
22200
22200
|
for (let i = 1; i < N; i++) {
|
|
22201
|
-
c =
|
|
22201
|
+
c = add3(c, mul(conj3(adata[i][0]), bdata[i]));
|
|
22202
22202
|
}
|
|
22203
22203
|
return c;
|
|
22204
22204
|
}
|
|
22205
22205
|
{
|
|
22206
22206
|
let c = mul(conj3(adata[0][0]), bdata[0][0]);
|
|
22207
22207
|
for (let i = 1; i < N; i++) {
|
|
22208
|
-
c =
|
|
22208
|
+
c = add3(c, mul(conj3(adata[i][0]), bdata[i][0]));
|
|
22209
22209
|
}
|
|
22210
22210
|
return c;
|
|
22211
22211
|
}
|
|
@@ -22217,7 +22217,7 @@ var createDot = /* @__PURE__ */ factory(
|
|
|
22217
22217
|
const yindex = y._index;
|
|
22218
22218
|
const yvalues = y._values;
|
|
22219
22219
|
let c = 0;
|
|
22220
|
-
const
|
|
22220
|
+
const add3 = addScalar2;
|
|
22221
22221
|
const mul = multiplyScalar2;
|
|
22222
22222
|
let i = 0;
|
|
22223
22223
|
let j = 0;
|
|
@@ -22233,7 +22233,7 @@ var createDot = /* @__PURE__ */ factory(
|
|
|
22233
22233
|
continue;
|
|
22234
22234
|
}
|
|
22235
22235
|
if (I2 === J) {
|
|
22236
|
-
c =
|
|
22236
|
+
c = add3(c, mul(xvalues[i], yvalues[j]));
|
|
22237
22237
|
i++;
|
|
22238
22238
|
j++;
|
|
22239
22239
|
}
|
|
@@ -22750,10 +22750,10 @@ var dependencies85 = ["typed", "transpose", "conj"];
|
|
|
22750
22750
|
var createCtranspose = /* @__PURE__ */ factory(
|
|
22751
22751
|
name85,
|
|
22752
22752
|
dependencies85,
|
|
22753
|
-
({ typed: typed3, transpose:
|
|
22753
|
+
({ typed: typed3, transpose: transpose5, conj: conj3 }) => {
|
|
22754
22754
|
return typed3(name85, {
|
|
22755
22755
|
any: function(x) {
|
|
22756
|
-
return conj3(
|
|
22756
|
+
return conj3(transpose5(x));
|
|
22757
22757
|
}
|
|
22758
22758
|
});
|
|
22759
22759
|
}
|
|
@@ -23325,7 +23325,7 @@ var dependencies95 = ["typed", "matrix", "add"];
|
|
|
23325
23325
|
var createTrace = /* @__PURE__ */ factory(
|
|
23326
23326
|
name95,
|
|
23327
23327
|
dependencies95,
|
|
23328
|
-
({ typed: typed3, matrix: matrix2, add:
|
|
23328
|
+
({ typed: typed3, matrix: matrix2, add: add3 }) => {
|
|
23329
23329
|
return typed3("trace", {
|
|
23330
23330
|
Array: function _arrayTrace(x) {
|
|
23331
23331
|
return _denseTrace(matrix2(x));
|
|
@@ -23349,7 +23349,7 @@ var createTrace = /* @__PURE__ */ factory(
|
|
|
23349
23349
|
if (rows === cols) {
|
|
23350
23350
|
let sum3 = 0;
|
|
23351
23351
|
for (let i = 0; i < rows; i++) {
|
|
23352
|
-
sum3 =
|
|
23352
|
+
sum3 = add3(sum3, data[i][i]);
|
|
23353
23353
|
}
|
|
23354
23354
|
return sum3;
|
|
23355
23355
|
} else {
|
|
@@ -23376,7 +23376,7 @@ var createTrace = /* @__PURE__ */ factory(
|
|
|
23376
23376
|
for (let k = k0; k < k1; k++) {
|
|
23377
23377
|
const i = index[k];
|
|
23378
23378
|
if (i === j) {
|
|
23379
|
-
sum3 =
|
|
23379
|
+
sum3 = add3(sum3, values[k]);
|
|
23380
23380
|
break;
|
|
23381
23381
|
}
|
|
23382
23382
|
if (i > j) {
|
|
@@ -23607,7 +23607,7 @@ function acceleratedInv(a, factoryInv2) {
|
|
|
23607
23607
|
const Ld = L.toArray();
|
|
23608
23608
|
const Ud = U.toArray();
|
|
23609
23609
|
const n = a.length;
|
|
23610
|
-
const
|
|
23610
|
+
const inv3 = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
23611
23611
|
for (let j = 0; j < n; j++) {
|
|
23612
23612
|
const b = new Array(n).fill(0);
|
|
23613
23613
|
for (let i = 0; i < n; i++) if (P2[i] === j) b[i] = 1;
|
|
@@ -23623,9 +23623,9 @@ function acceleratedInv(a, factoryInv2) {
|
|
|
23623
23623
|
for (let k = i + 1; k < n; k++) s -= Ud[i][k] * x[k];
|
|
23624
23624
|
x[i] = s / Ud[i][i];
|
|
23625
23625
|
}
|
|
23626
|
-
for (let i = 0; i < n; i++)
|
|
23626
|
+
for (let i = 0; i < n; i++) inv3[i][j] = x[i];
|
|
23627
23627
|
}
|
|
23628
|
-
return
|
|
23628
|
+
return inv3;
|
|
23629
23629
|
} catch {
|
|
23630
23630
|
return factoryInv2(a);
|
|
23631
23631
|
}
|
|
@@ -23743,7 +23743,7 @@ var dependencies98 = ["add", "multiply", "transpose"];
|
|
|
23743
23743
|
var createCsAmd = /* @__PURE__ */ factory(
|
|
23744
23744
|
name98,
|
|
23745
23745
|
dependencies98,
|
|
23746
|
-
({ add:
|
|
23746
|
+
({ add: add3, multiply: multiply2, transpose: transpose5 }) => {
|
|
23747
23747
|
function _tryWasmAmd(a, n) {
|
|
23748
23748
|
const wasm = wasmLoader.getModule();
|
|
23749
23749
|
if (!wasm || !a._ptr || !a._index) return null;
|
|
@@ -24037,9 +24037,9 @@ var createCsAmd = /* @__PURE__ */ factory(
|
|
|
24037
24037
|
return P2;
|
|
24038
24038
|
};
|
|
24039
24039
|
function _createTargetMatrix(order, a, m, n, dense) {
|
|
24040
|
-
const at =
|
|
24040
|
+
const at = transpose5(a);
|
|
24041
24041
|
if (order === 1 && n === m) {
|
|
24042
|
-
return
|
|
24042
|
+
return add3(a, at);
|
|
24043
24043
|
}
|
|
24044
24044
|
if (order === 2) {
|
|
24045
24045
|
const tindex = at._index;
|
|
@@ -24056,7 +24056,7 @@ var createCsAmd = /* @__PURE__ */ factory(
|
|
|
24056
24056
|
}
|
|
24057
24057
|
}
|
|
24058
24058
|
tptr[m] = p2;
|
|
24059
|
-
a =
|
|
24059
|
+
a = transpose5(at);
|
|
24060
24060
|
return multiply2(at, a);
|
|
24061
24061
|
}
|
|
24062
24062
|
return multiply2(at, a);
|
|
@@ -24157,7 +24157,7 @@ var dependencies99 = ["transpose"];
|
|
|
24157
24157
|
var createCsCounts = /* @__PURE__ */ factory(
|
|
24158
24158
|
name99,
|
|
24159
24159
|
dependencies99,
|
|
24160
|
-
({ transpose:
|
|
24160
|
+
({ transpose: transpose5 }) => {
|
|
24161
24161
|
function _tryWasmCounts(a, parent, post, n) {
|
|
24162
24162
|
const wasm = wasmLoader.getModule();
|
|
24163
24163
|
if (!wasm || n < WASM_COUNTS_THRESHOLD || !a._index || !a._ptr) return null;
|
|
@@ -24219,7 +24219,7 @@ var createCsCounts = /* @__PURE__ */ factory(
|
|
|
24219
24219
|
w[k] = -1;
|
|
24220
24220
|
}
|
|
24221
24221
|
const colcount = [];
|
|
24222
|
-
const at =
|
|
24222
|
+
const at = transpose5(a);
|
|
24223
24223
|
const tindex = at._index;
|
|
24224
24224
|
const tptr = at._ptr;
|
|
24225
24225
|
for (k = 0; k < n; k++) {
|
|
@@ -24388,9 +24388,9 @@ var dependencies100 = ["add", "multiply", "transpose"];
|
|
|
24388
24388
|
var createCsSqr = /* @__PURE__ */ factory(
|
|
24389
24389
|
name100,
|
|
24390
24390
|
dependencies100,
|
|
24391
|
-
({ add:
|
|
24392
|
-
const csAmd2 = createCsAmd({ add:
|
|
24393
|
-
const csCounts2 = createCsCounts({ transpose:
|
|
24391
|
+
({ add: add3, multiply: multiply2, transpose: transpose5 }) => {
|
|
24392
|
+
const csAmd2 = createCsAmd({ add: add3, multiply: multiply2, transpose: transpose5 });
|
|
24393
|
+
const csCounts2 = createCsCounts({ transpose: transpose5 });
|
|
24394
24394
|
return function csSqr2(order, a, qr2) {
|
|
24395
24395
|
const aptr = a._ptr;
|
|
24396
24396
|
const asize = a._size;
|
|
@@ -25647,7 +25647,7 @@ var dependencies111 = [
|
|
|
25647
25647
|
var createRound = /* @__PURE__ */ factory(
|
|
25648
25648
|
name111,
|
|
25649
25649
|
dependencies111,
|
|
25650
|
-
({ typed: typed3, config: config2, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
25650
|
+
({ typed: typed3, config: config2, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, BigNumber: BigNumber9, DenseMatrix: DenseMatrix6 }) => {
|
|
25651
25651
|
const matAlgo11xS0s = createMatAlgo11xS0s({ typed: typed3, equalScalar: equalScalar3 });
|
|
25652
25652
|
const matAlgo12xSfs = createMatAlgo12xSfs({ typed: typed3, DenseMatrix: DenseMatrix6 });
|
|
25653
25653
|
const matAlgo14xDs = createMatAlgo14xDs({ typed: typed3 });
|
|
@@ -25767,7 +25767,7 @@ var createRound = /* @__PURE__ */ factory(
|
|
|
25767
25767
|
"number | Complex | BigNumber | Fraction, SparseMatrix": typed3.referToSelf(
|
|
25768
25768
|
(self) => (x, n) => {
|
|
25769
25769
|
if (equalScalar3(x, 0)) {
|
|
25770
|
-
return
|
|
25770
|
+
return zeros4(n.size(), n.storage());
|
|
25771
25771
|
}
|
|
25772
25772
|
return matAlgo12xSfs(n, x, self, true);
|
|
25773
25773
|
}
|
|
@@ -25775,7 +25775,7 @@ var createRound = /* @__PURE__ */ factory(
|
|
|
25775
25775
|
"number | Complex | BigNumber | Fraction, DenseMatrix": typed3.referToSelf(
|
|
25776
25776
|
(self) => (x, n) => {
|
|
25777
25777
|
if (equalScalar3(x, 0)) {
|
|
25778
|
-
return
|
|
25778
|
+
return zeros4(n.size(), n.storage());
|
|
25779
25779
|
}
|
|
25780
25780
|
return matAlgo14xDs(n, x, self, true);
|
|
25781
25781
|
}
|
|
@@ -26394,8 +26394,8 @@ var createSubset = /* @__PURE__ */ factory(
|
|
|
26394
26394
|
({
|
|
26395
26395
|
typed: typed3,
|
|
26396
26396
|
matrix: matrix2,
|
|
26397
|
-
zeros:
|
|
26398
|
-
add:
|
|
26397
|
+
zeros: zeros4,
|
|
26398
|
+
add: add3
|
|
26399
26399
|
}) => {
|
|
26400
26400
|
const referTo = typed3.referTo;
|
|
26401
26401
|
return typed3(name119, {
|
|
@@ -26454,7 +26454,7 @@ var createSubset = /* @__PURE__ */ factory(
|
|
|
26454
26454
|
const indexSize = index.size();
|
|
26455
26455
|
if (indexSize.every((d) => d > 0)) {
|
|
26456
26456
|
try {
|
|
26457
|
-
return
|
|
26457
|
+
return add3(replacement, zeros4(indexSize));
|
|
26458
26458
|
} catch {
|
|
26459
26459
|
return replacement;
|
|
26460
26460
|
}
|
|
@@ -27127,7 +27127,7 @@ var dependencies127 = ["typed", "add", "multiply", "Complex", "number"];
|
|
|
27127
27127
|
var createZpk2tf = /* @__PURE__ */ factory(
|
|
27128
27128
|
name127,
|
|
27129
27129
|
dependencies127,
|
|
27130
|
-
({ typed: typed3, add:
|
|
27130
|
+
({ typed: typed3, add: add3, multiply: multiply2, Complex: Complex13, number: number2 }) => {
|
|
27131
27131
|
return typed3(name127, {
|
|
27132
27132
|
"Array,Array,number": function(z, p, k) {
|
|
27133
27133
|
return _zpk2tf(z, p, k);
|
|
@@ -27172,7 +27172,7 @@ var createZpk2tf = /* @__PURE__ */ factory(
|
|
|
27172
27172
|
c[i] = Complex13(0, 0);
|
|
27173
27173
|
for (let j = 0; j < a.length; j++) {
|
|
27174
27174
|
if (i - j >= 0 && i - j < b.length) {
|
|
27175
|
-
c[i] =
|
|
27175
|
+
c[i] = add3(c[i], multiply2(a[j], b[i - j]));
|
|
27176
27176
|
}
|
|
27177
27177
|
}
|
|
27178
27178
|
}
|
|
@@ -27196,7 +27196,7 @@ var dependencies128 = ["typed", "add", "unaryPlus"];
|
|
|
27196
27196
|
var createCumSum = /* @__PURE__ */ factory(
|
|
27197
27197
|
name128,
|
|
27198
27198
|
dependencies128,
|
|
27199
|
-
({ typed: typed3, add:
|
|
27199
|
+
({ typed: typed3, add: add3, unaryPlus: unaryPlus2 }) => {
|
|
27200
27200
|
return typed3(name128, {
|
|
27201
27201
|
// sum([a, b, c, d, ...])
|
|
27202
27202
|
Array: _cumsum,
|
|
@@ -27237,7 +27237,7 @@ var createCumSum = /* @__PURE__ */ factory(
|
|
|
27237
27237
|
}
|
|
27238
27238
|
const sums = [unaryPlus2(array[0])];
|
|
27239
27239
|
for (let i = 1; i < array.length; ++i) {
|
|
27240
|
-
sums.push(
|
|
27240
|
+
sums.push(add3(sums[i - 1], array[i]));
|
|
27241
27241
|
}
|
|
27242
27242
|
return sums;
|
|
27243
27243
|
}
|
|
@@ -27295,7 +27295,7 @@ var dependencies129 = ["typed", "config", "add", "numeric", "parseNumberWithConf
|
|
|
27295
27295
|
var createSum = /* @__PURE__ */ factory(
|
|
27296
27296
|
name129,
|
|
27297
27297
|
dependencies129,
|
|
27298
|
-
({ typed: typed3, config: config2, add:
|
|
27298
|
+
({ typed: typed3, config: config2, add: add3, numeric: numeric2, parseNumberWithConfig: parseNumberWithConfig2 }) => {
|
|
27299
27299
|
return typed3(name129, {
|
|
27300
27300
|
// sum(string) - single string input
|
|
27301
27301
|
string: function(x) {
|
|
@@ -27321,7 +27321,7 @@ var createSum = /* @__PURE__ */ factory(
|
|
|
27321
27321
|
deepForEach2(array, function(value) {
|
|
27322
27322
|
try {
|
|
27323
27323
|
const converted = typeof value === "string" ? parseNumberWithConfig2(value) : value;
|
|
27324
|
-
sum3 = sum3 === void 0 ? converted :
|
|
27324
|
+
sum3 = sum3 === void 0 ? converted : add3(sum3, converted);
|
|
27325
27325
|
} catch (err) {
|
|
27326
27326
|
throw improveErrorMessage(err, "sum", value);
|
|
27327
27327
|
}
|
|
@@ -27334,7 +27334,7 @@ var createSum = /* @__PURE__ */ factory(
|
|
|
27334
27334
|
function _nsumDim(array, dim) {
|
|
27335
27335
|
try {
|
|
27336
27336
|
const dimValue = typeof dim === "number" ? dim : dim.valueOf();
|
|
27337
|
-
const sum3 = reduce2(array, dimValue,
|
|
27337
|
+
const sum3 = reduce2(array, dimValue, add3);
|
|
27338
27338
|
return sum3;
|
|
27339
27339
|
} catch (err) {
|
|
27340
27340
|
throw improveErrorMessage(err, "sum", void 0);
|
|
@@ -27604,7 +27604,7 @@ var createFloorNumber = /* @__PURE__ */ factory(
|
|
|
27604
27604
|
var createFloor = /* @__PURE__ */ factory(
|
|
27605
27605
|
name134,
|
|
27606
27606
|
dependencies134,
|
|
27607
|
-
({ typed: typed3, config: config2, round: round2, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
27607
|
+
({ typed: typed3, config: config2, round: round2, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6 }) => {
|
|
27608
27608
|
const matAlgo11xS0s = createMatAlgo11xS0s({ typed: typed3, equalScalar: equalScalar3 });
|
|
27609
27609
|
const matAlgo12xSfs = createMatAlgo12xSfs({ typed: typed3, DenseMatrix: DenseMatrix6 });
|
|
27610
27610
|
const matAlgo14xDs = createMatAlgo14xDs({ typed: typed3 });
|
|
@@ -27692,7 +27692,7 @@ var createFloor = /* @__PURE__ */ factory(
|
|
|
27692
27692
|
),
|
|
27693
27693
|
"number | Complex | Fraction | BigNumber, Matrix": typed3.referToSelf(
|
|
27694
27694
|
(self) => (x, y) => {
|
|
27695
|
-
if (equalScalar3(x, 0)) return
|
|
27695
|
+
if (equalScalar3(x, 0)) return zeros4(y.size(), y.storage());
|
|
27696
27696
|
if (y.storage() === "dense") {
|
|
27697
27697
|
return matAlgo14xDs(y, x, self, true);
|
|
27698
27698
|
}
|
|
@@ -27817,14 +27817,14 @@ var dependencies136 = [
|
|
|
27817
27817
|
var createMod = /* @__PURE__ */ factory(
|
|
27818
27818
|
name136,
|
|
27819
27819
|
dependencies136,
|
|
27820
|
-
({ typed: typed3, config: config2, round: round2, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
27820
|
+
({ typed: typed3, config: config2, round: round2, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6, concat: concat3 }) => {
|
|
27821
27821
|
const floor2 = createFloor({
|
|
27822
27822
|
typed: typed3,
|
|
27823
27823
|
config: config2,
|
|
27824
27824
|
round: round2,
|
|
27825
27825
|
matrix: matrix2,
|
|
27826
27826
|
equalScalar: equalScalar3,
|
|
27827
|
-
zeros:
|
|
27827
|
+
zeros: zeros4,
|
|
27828
27828
|
DenseMatrix: DenseMatrix6
|
|
27829
27829
|
});
|
|
27830
27830
|
const matAlgo02xDS0 = createMatAlgo02xDS0({ typed: typed3, equalScalar: equalScalar3 });
|
|
@@ -28121,7 +28121,7 @@ var createGcd = /* @__PURE__ */ factory(
|
|
|
28121
28121
|
config: config2,
|
|
28122
28122
|
round: round2,
|
|
28123
28123
|
equalScalar: equalScalar3,
|
|
28124
|
-
zeros:
|
|
28124
|
+
zeros: zeros4,
|
|
28125
28125
|
BigNumber: BigNumber9,
|
|
28126
28126
|
DenseMatrix: DenseMatrix6,
|
|
28127
28127
|
concat: concat3
|
|
@@ -28132,7 +28132,7 @@ var createGcd = /* @__PURE__ */ factory(
|
|
|
28132
28132
|
round: round2,
|
|
28133
28133
|
matrix: matrix2,
|
|
28134
28134
|
equalScalar: equalScalar3,
|
|
28135
|
-
zeros:
|
|
28135
|
+
zeros: zeros4,
|
|
28136
28136
|
DenseMatrix: DenseMatrix6,
|
|
28137
28137
|
concat: concat3
|
|
28138
28138
|
});
|
|
@@ -28518,8 +28518,8 @@ var createNthRoot = /* @__PURE__ */ factory(
|
|
|
28518
28518
|
const Big = BigNumber9.clone({ precision: precision + 2 });
|
|
28519
28519
|
const zero = new BigNumber9(0);
|
|
28520
28520
|
const one = new Big(1);
|
|
28521
|
-
const
|
|
28522
|
-
if (
|
|
28521
|
+
const inv3 = root2.isNegative();
|
|
28522
|
+
if (inv3) {
|
|
28523
28523
|
root2 = root2.neg();
|
|
28524
28524
|
}
|
|
28525
28525
|
if (root2.isZero()) {
|
|
@@ -28529,14 +28529,14 @@ var createNthRoot = /* @__PURE__ */ factory(
|
|
|
28529
28529
|
throw new Error("Root must be odd when a is negative.");
|
|
28530
28530
|
}
|
|
28531
28531
|
if (a.isZero()) {
|
|
28532
|
-
return
|
|
28532
|
+
return inv3 ? new Big(Infinity) : 0;
|
|
28533
28533
|
}
|
|
28534
28534
|
if (!a.isFinite()) {
|
|
28535
|
-
return
|
|
28535
|
+
return inv3 ? zero : a;
|
|
28536
28536
|
}
|
|
28537
28537
|
let x = a.abs().pow(one.div(root2));
|
|
28538
28538
|
x = a.isNeg() ? x.neg() : x;
|
|
28539
|
-
return new BigNumber9((
|
|
28539
|
+
return new BigNumber9((inv3 ? one.div(x) : x).toPrecision(precision));
|
|
28540
28540
|
}
|
|
28541
28541
|
}
|
|
28542
28542
|
);
|
|
@@ -28563,7 +28563,7 @@ var createPow = /* @__PURE__ */ factory(
|
|
|
28563
28563
|
identity: identity2,
|
|
28564
28564
|
multiply: multiply2,
|
|
28565
28565
|
matrix: matrix2,
|
|
28566
|
-
inv:
|
|
28566
|
+
inv: inv3,
|
|
28567
28567
|
number: number2,
|
|
28568
28568
|
fraction: fraction2,
|
|
28569
28569
|
Complex: Complex13
|
|
@@ -28642,7 +28642,7 @@ var createPow = /* @__PURE__ */ factory(
|
|
|
28642
28642
|
}
|
|
28643
28643
|
if (y < 0) {
|
|
28644
28644
|
try {
|
|
28645
|
-
return _powArray(
|
|
28645
|
+
return _powArray(inv3(x), -y);
|
|
28646
28646
|
} catch (error) {
|
|
28647
28647
|
if (error instanceof Error && error.message === "Cannot calculate inverse, determinant is zero") {
|
|
28648
28648
|
throw new TypeError(
|
|
@@ -28705,7 +28705,7 @@ var createCeilNumber = /* @__PURE__ */ factory(
|
|
|
28705
28705
|
var createCeil = /* @__PURE__ */ factory(
|
|
28706
28706
|
name146,
|
|
28707
28707
|
dependencies146,
|
|
28708
|
-
({ typed: typed3, config: config2, round: round2, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
28708
|
+
({ typed: typed3, config: config2, round: round2, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6 }) => {
|
|
28709
28709
|
const matAlgo11xS0s = createMatAlgo11xS0s({ typed: typed3, equalScalar: equalScalar3 });
|
|
28710
28710
|
const matAlgo12xSfs = createMatAlgo12xSfs({ typed: typed3, DenseMatrix: DenseMatrix6 });
|
|
28711
28711
|
const matAlgo14xDs = createMatAlgo14xDs({ typed: typed3 });
|
|
@@ -28793,7 +28793,7 @@ var createCeil = /* @__PURE__ */ factory(
|
|
|
28793
28793
|
),
|
|
28794
28794
|
"number | Complex | Fraction | BigNumber, Matrix": typed3.referToSelf(
|
|
28795
28795
|
(self) => (x, y) => {
|
|
28796
|
-
if (equalScalar3(x, 0)) return
|
|
28796
|
+
if (equalScalar3(x, 0)) return zeros4(y.size(), y.storage());
|
|
28797
28797
|
if (y.storage() === "dense") {
|
|
28798
28798
|
return matAlgo14xDs(y, x, self, true);
|
|
28799
28799
|
}
|
|
@@ -29016,7 +29016,7 @@ var dependencies151 = ["typed", "matrix", "equalScalar", "zeros", "DenseMatrix",
|
|
|
29016
29016
|
var createLeftShift = /* @__PURE__ */ factory(
|
|
29017
29017
|
name151,
|
|
29018
29018
|
dependencies151,
|
|
29019
|
-
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
29019
|
+
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6, concat: concat3 }) => {
|
|
29020
29020
|
const matAlgo01xDSid = createMatAlgo01xDSid({ typed: typed3 });
|
|
29021
29021
|
const matAlgo02xDS0 = createMatAlgo02xDS0({ typed: typed3, equalScalar: equalScalar3 });
|
|
29022
29022
|
const matAlgo08xS0Sid = createMatAlgo08xS0Sid({ typed: typed3, equalScalar: equalScalar3 });
|
|
@@ -29057,7 +29057,7 @@ var createLeftShift = /* @__PURE__ */ factory(
|
|
|
29057
29057
|
"number | BigNumber, SparseMatrix": typed3.referToSelf(
|
|
29058
29058
|
(self) => (x, y) => {
|
|
29059
29059
|
if (equalScalar3(x, 0)) {
|
|
29060
|
-
return
|
|
29060
|
+
return zeros4(y.size(), y.storage());
|
|
29061
29061
|
}
|
|
29062
29062
|
return matAlgo10xSids(y, x, self, true);
|
|
29063
29063
|
}
|
|
@@ -29065,7 +29065,7 @@ var createLeftShift = /* @__PURE__ */ factory(
|
|
|
29065
29065
|
"number | BigNumber, DenseMatrix": typed3.referToSelf(
|
|
29066
29066
|
(self) => (x, y) => {
|
|
29067
29067
|
if (equalScalar3(x, 0)) {
|
|
29068
|
-
return
|
|
29068
|
+
return zeros4(y.size(), y.storage());
|
|
29069
29069
|
}
|
|
29070
29070
|
return matAlgo14xDs(y, x, self, true);
|
|
29071
29071
|
}
|
|
@@ -29087,7 +29087,7 @@ var dependencies152 = ["typed", "matrix", "equalScalar", "zeros", "DenseMatrix",
|
|
|
29087
29087
|
var createRightArithShift = /* @__PURE__ */ factory(
|
|
29088
29088
|
name152,
|
|
29089
29089
|
dependencies152,
|
|
29090
|
-
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
29090
|
+
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6, concat: concat3 }) => {
|
|
29091
29091
|
const matAlgo01xDSid = createMatAlgo01xDSid({ typed: typed3 });
|
|
29092
29092
|
const matAlgo02xDS0 = createMatAlgo02xDS0({ typed: typed3, equalScalar: equalScalar3 });
|
|
29093
29093
|
const matAlgo08xS0Sid = createMatAlgo08xS0Sid({ typed: typed3, equalScalar: equalScalar3 });
|
|
@@ -29128,7 +29128,7 @@ var createRightArithShift = /* @__PURE__ */ factory(
|
|
|
29128
29128
|
"number | BigNumber, SparseMatrix": typed3.referToSelf(
|
|
29129
29129
|
(self) => (x, y) => {
|
|
29130
29130
|
if (equalScalar3(x, 0)) {
|
|
29131
|
-
return
|
|
29131
|
+
return zeros4(y.size(), y.storage());
|
|
29132
29132
|
}
|
|
29133
29133
|
return matAlgo10xSids(y, x, self, true);
|
|
29134
29134
|
}
|
|
@@ -29136,7 +29136,7 @@ var createRightArithShift = /* @__PURE__ */ factory(
|
|
|
29136
29136
|
"number | BigNumber, DenseMatrix": typed3.referToSelf(
|
|
29137
29137
|
(self) => (x, y) => {
|
|
29138
29138
|
if (equalScalar3(x, 0)) {
|
|
29139
|
-
return
|
|
29139
|
+
return zeros4(y.size(), y.storage());
|
|
29140
29140
|
}
|
|
29141
29141
|
return matAlgo14xDs(y, x, self, true);
|
|
29142
29142
|
}
|
|
@@ -29158,7 +29158,7 @@ var dependencies153 = ["typed", "matrix", "equalScalar", "zeros", "DenseMatrix",
|
|
|
29158
29158
|
var createRightLogShift = /* @__PURE__ */ factory(
|
|
29159
29159
|
name153,
|
|
29160
29160
|
dependencies153,
|
|
29161
|
-
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
29161
|
+
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6, concat: concat3 }) => {
|
|
29162
29162
|
const matAlgo01xDSid = createMatAlgo01xDSid({ typed: typed3 });
|
|
29163
29163
|
const matAlgo02xDS0 = createMatAlgo02xDS0({ typed: typed3, equalScalar: equalScalar3 });
|
|
29164
29164
|
const matAlgo08xS0Sid = createMatAlgo08xS0Sid({ typed: typed3, equalScalar: equalScalar3 });
|
|
@@ -29198,7 +29198,7 @@ var createRightLogShift = /* @__PURE__ */ factory(
|
|
|
29198
29198
|
"number | BigNumber, SparseMatrix": typed3.referToSelf(
|
|
29199
29199
|
(self) => (x, y) => {
|
|
29200
29200
|
if (equalScalar3(x, 0)) {
|
|
29201
|
-
return
|
|
29201
|
+
return zeros4(y.size(), y.storage());
|
|
29202
29202
|
}
|
|
29203
29203
|
return matAlgo10xSids(y, x, self, true);
|
|
29204
29204
|
}
|
|
@@ -29206,7 +29206,7 @@ var createRightLogShift = /* @__PURE__ */ factory(
|
|
|
29206
29206
|
"number | BigNumber, DenseMatrix": typed3.referToSelf(
|
|
29207
29207
|
(self) => (x, y) => {
|
|
29208
29208
|
if (equalScalar3(x, 0)) {
|
|
29209
|
-
return
|
|
29209
|
+
return zeros4(y.size(), y.storage());
|
|
29210
29210
|
}
|
|
29211
29211
|
return matAlgo14xDs(y, x, self, true);
|
|
29212
29212
|
}
|
|
@@ -29897,7 +29897,7 @@ var createFixNumber = /* @__PURE__ */ factory(
|
|
|
29897
29897
|
var createFix = /* @__PURE__ */ factory(
|
|
29898
29898
|
name167,
|
|
29899
29899
|
dependencies167,
|
|
29900
|
-
({ typed: typed3, Complex: Complex13, matrix: matrix2, ceil: ceil2, floor: floor2, equalScalar: equalScalar3, zeros:
|
|
29900
|
+
({ typed: typed3, Complex: Complex13, matrix: matrix2, ceil: ceil2, floor: floor2, equalScalar: equalScalar3, zeros: zeros4, DenseMatrix: DenseMatrix6 }) => {
|
|
29901
29901
|
const matAlgo12xSfs = createMatAlgo12xSfs({ typed: typed3, DenseMatrix: DenseMatrix6 });
|
|
29902
29902
|
const matAlgo14xDs = createMatAlgo14xDs({ typed: typed3 });
|
|
29903
29903
|
const fixNumber = createFixNumber({ typed: typed3, ceil: ceil2, floor: floor2 });
|
|
@@ -29972,7 +29972,7 @@ var createFix = /* @__PURE__ */ factory(
|
|
|
29972
29972
|
),
|
|
29973
29973
|
"number | Complex | Fraction | BigNumber, Matrix": typed3.referToSelf(
|
|
29974
29974
|
(self) => (x, y) => {
|
|
29975
|
-
if (equalScalar3(x, 0)) return
|
|
29975
|
+
if (equalScalar3(x, 0)) return zeros4(y.size(), y.storage());
|
|
29976
29976
|
if (y.storage() === "dense") {
|
|
29977
29977
|
return matAlgo14xDs(y, x, self, true);
|
|
29978
29978
|
}
|
|
@@ -29996,7 +29996,7 @@ var createInvmod = /* @__PURE__ */ factory(
|
|
|
29996
29996
|
equal: equal2,
|
|
29997
29997
|
smaller: smaller2,
|
|
29998
29998
|
mod: mod2,
|
|
29999
|
-
add:
|
|
29999
|
+
add: add3,
|
|
30000
30000
|
isInteger: isInteger3
|
|
30001
30001
|
}) => {
|
|
30002
30002
|
return typed3(name168, {
|
|
@@ -30012,9 +30012,9 @@ var createInvmod = /* @__PURE__ */ factory(
|
|
|
30012
30012
|
const resVal = res.valueOf();
|
|
30013
30013
|
const [gcd2, invValue] = resVal;
|
|
30014
30014
|
if (!equal2(gcd2, 1)) return NaN;
|
|
30015
|
-
let
|
|
30016
|
-
if (smaller2(
|
|
30017
|
-
return
|
|
30015
|
+
let inv3 = mod2(invValue, b);
|
|
30016
|
+
if (smaller2(inv3, 0)) inv3 = add3(inv3, b);
|
|
30017
|
+
return inv3;
|
|
30018
30018
|
}
|
|
30019
30019
|
}
|
|
30020
30020
|
);
|
|
@@ -30025,7 +30025,7 @@ var dependencies169 = ["typed", "matrix", "equalScalar", "zeros", "not", "concat
|
|
|
30025
30025
|
var createAnd = /* @__PURE__ */ factory(
|
|
30026
30026
|
name169,
|
|
30027
30027
|
dependencies169,
|
|
30028
|
-
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros:
|
|
30028
|
+
({ typed: typed3, matrix: matrix2, equalScalar: equalScalar3, zeros: zeros4, not: not3, concat: concat3 }) => {
|
|
30029
30029
|
const matAlgo02xDS0 = createMatAlgo02xDS0({ typed: typed3, equalScalar: equalScalar3 });
|
|
30030
30030
|
const matAlgo06xS0S0 = createMatAlgo06xS0S0({ typed: typed3, equalScalar: equalScalar3 });
|
|
30031
30031
|
const matAlgo11xS0s = createMatAlgo11xS0s({ typed: typed3, equalScalar: equalScalar3 });
|
|
@@ -30052,7 +30052,7 @@ var createAnd = /* @__PURE__ */ factory(
|
|
|
30052
30052
|
"SparseMatrix, any": typed3.referToSelf(
|
|
30053
30053
|
(self) => (x, y) => {
|
|
30054
30054
|
if (not3(y)) {
|
|
30055
|
-
return
|
|
30055
|
+
return zeros4(x.size(), x.storage());
|
|
30056
30056
|
}
|
|
30057
30057
|
return matAlgo11xS0s(x, y, self, false);
|
|
30058
30058
|
}
|
|
@@ -30060,7 +30060,7 @@ var createAnd = /* @__PURE__ */ factory(
|
|
|
30060
30060
|
"DenseMatrix, any": typed3.referToSelf(
|
|
30061
30061
|
(self) => (x, y) => {
|
|
30062
30062
|
if (not3(y)) {
|
|
30063
|
-
return
|
|
30063
|
+
return zeros4(x.size(), x.storage());
|
|
30064
30064
|
}
|
|
30065
30065
|
return matAlgo14xDs(x, y, self, false);
|
|
30066
30066
|
}
|
|
@@ -30068,7 +30068,7 @@ var createAnd = /* @__PURE__ */ factory(
|
|
|
30068
30068
|
"any, SparseMatrix": typed3.referToSelf(
|
|
30069
30069
|
(self) => (x, y) => {
|
|
30070
30070
|
if (not3(x)) {
|
|
30071
|
-
return
|
|
30071
|
+
return zeros4(y.size(), y.storage());
|
|
30072
30072
|
}
|
|
30073
30073
|
return matAlgo11xS0s(y, x, self, true);
|
|
30074
30074
|
}
|
|
@@ -30076,7 +30076,7 @@ var createAnd = /* @__PURE__ */ factory(
|
|
|
30076
30076
|
"any, DenseMatrix": typed3.referToSelf(
|
|
30077
30077
|
(self) => (x, y) => {
|
|
30078
30078
|
if (not3(x)) {
|
|
30079
|
-
return
|
|
30079
|
+
return zeros4(y.size(), y.storage());
|
|
30080
30080
|
}
|
|
30081
30081
|
return matAlgo14xDs(y, x, self, true);
|
|
30082
30082
|
}
|
|
@@ -30266,15 +30266,15 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30266
30266
|
({
|
|
30267
30267
|
typed: typed3,
|
|
30268
30268
|
matrix: matrix2,
|
|
30269
|
-
inv:
|
|
30269
|
+
inv: inv3,
|
|
30270
30270
|
deepEqual: deepEqual3,
|
|
30271
30271
|
equal: equal2,
|
|
30272
30272
|
dotDivide: dotDivide2,
|
|
30273
|
-
dot:
|
|
30273
|
+
dot: dot7,
|
|
30274
30274
|
ctranspose: ctranspose2,
|
|
30275
30275
|
divideScalar: divideScalar2,
|
|
30276
30276
|
multiply: multiply2,
|
|
30277
|
-
add:
|
|
30277
|
+
add: add3,
|
|
30278
30278
|
Complex: Complex13
|
|
30279
30279
|
}) => {
|
|
30280
30280
|
return typed3(name172, {
|
|
@@ -30284,9 +30284,9 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30284
30284
|
case 1:
|
|
30285
30285
|
if (_isZeros(x)) return ctranspose2(x);
|
|
30286
30286
|
if (size2[0] === 1) {
|
|
30287
|
-
return
|
|
30287
|
+
return inv3(x);
|
|
30288
30288
|
} else {
|
|
30289
|
-
return dotDivide2(ctranspose2(x),
|
|
30289
|
+
return dotDivide2(ctranspose2(x), dot7(x, x));
|
|
30290
30290
|
}
|
|
30291
30291
|
case 2: {
|
|
30292
30292
|
if (_isZeros(x)) return ctranspose2(x);
|
|
@@ -30294,7 +30294,7 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30294
30294
|
const cols = size2[1];
|
|
30295
30295
|
if (rows === cols) {
|
|
30296
30296
|
try {
|
|
30297
|
-
return
|
|
30297
|
+
return inv3(x);
|
|
30298
30298
|
} catch (err) {
|
|
30299
30299
|
if (err instanceof Error && err.message.match(/Cannot calculate inverse, determinant is zero/)) {
|
|
30300
30300
|
} else {
|
|
@@ -30325,8 +30325,8 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30325
30325
|
});
|
|
30326
30326
|
function _pinv(mat, rows, cols) {
|
|
30327
30327
|
const { C, F } = _rankFact(mat, rows, cols);
|
|
30328
|
-
const Cpinv = multiply2(
|
|
30329
|
-
const Fpinv = multiply2(ctranspose2(F),
|
|
30328
|
+
const Cpinv = multiply2(inv3(multiply2(ctranspose2(C), C)), ctranspose2(C));
|
|
30329
|
+
const Fpinv = multiply2(ctranspose2(F), inv3(multiply2(F, ctranspose2(F))));
|
|
30330
30330
|
return multiply2(Fpinv, Cpinv);
|
|
30331
30331
|
}
|
|
30332
30332
|
function _rref(mat, rows, cols) {
|
|
@@ -30356,7 +30356,7 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30356
30356
|
if (i2 === r) continue;
|
|
30357
30357
|
val = M[i2][lead];
|
|
30358
30358
|
for (let j = 0; j < cols; j++) {
|
|
30359
|
-
M[i2][j] =
|
|
30359
|
+
M[i2][j] = add3(M[i2][j], multiply2(-1, multiply2(val, M[r][j])));
|
|
30360
30360
|
}
|
|
30361
30361
|
}
|
|
30362
30362
|
lead++;
|
|
@@ -30365,17 +30365,17 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30365
30365
|
}
|
|
30366
30366
|
function _rankFact(mat, rows, cols) {
|
|
30367
30367
|
const rref = _rref(mat, rows, cols);
|
|
30368
|
-
const C = mat.map((row2) => row2.filter((_, j) => j < rows && !_isZero(
|
|
30369
|
-
const F = rref.filter((_, i) => !_isZero(
|
|
30368
|
+
const C = mat.map((row2) => row2.filter((_, j) => j < rows && !_isZero(dot7(rref[j], rref[j]))));
|
|
30369
|
+
const F = rref.filter((_, i) => !_isZero(dot7(rref[i], rref[i])));
|
|
30370
30370
|
return { C, F };
|
|
30371
30371
|
}
|
|
30372
30372
|
function _isZero(x) {
|
|
30373
|
-
return equal2(
|
|
30373
|
+
return equal2(add3(x, Complex13(1, 1)), add3(0, Complex13(1, 1)));
|
|
30374
30374
|
}
|
|
30375
30375
|
function _isZeros(arr10) {
|
|
30376
30376
|
return deepEqual3(
|
|
30377
|
-
|
|
30378
|
-
|
|
30377
|
+
add3(arr10, Complex13(1, 1)),
|
|
30378
|
+
add3(multiply2(arr10, 0), Complex13(1, 1))
|
|
30379
30379
|
);
|
|
30380
30380
|
}
|
|
30381
30381
|
}
|
|
@@ -30427,7 +30427,7 @@ var createQr = /* @__PURE__ */ factory(
|
|
|
30427
30427
|
({
|
|
30428
30428
|
typed: typed3,
|
|
30429
30429
|
matrix: matrix2,
|
|
30430
|
-
zeros:
|
|
30430
|
+
zeros: zeros4,
|
|
30431
30431
|
identity: identity2,
|
|
30432
30432
|
isZero: isZero2,
|
|
30433
30433
|
equal: equal2,
|
|
@@ -30505,7 +30505,7 @@ var createQr = /* @__PURE__ */ factory(
|
|
|
30505
30505
|
const R = m.clone();
|
|
30506
30506
|
const Rdata = R._data;
|
|
30507
30507
|
let i, j, k;
|
|
30508
|
-
const w =
|
|
30508
|
+
const w = zeros4([rows], "");
|
|
30509
30509
|
for (k = 0; k < Math.min(cols, rows); ++k) {
|
|
30510
30510
|
const pivot = Rdata[k][k];
|
|
30511
30511
|
const sgn = unaryMinus2(equal2(pivot, 0) ? 1 : sign3(pivot));
|
|
@@ -30606,7 +30606,7 @@ var createRange = /* @__PURE__ */ factory(
|
|
|
30606
30606
|
smallerEq: smallerEq2,
|
|
30607
30607
|
larger: larger2,
|
|
30608
30608
|
largerEq: largerEq2,
|
|
30609
|
-
add:
|
|
30609
|
+
add: add3,
|
|
30610
30610
|
isZero: isZero2,
|
|
30611
30611
|
isPositive: isPositive2
|
|
30612
30612
|
}) => {
|
|
@@ -30719,7 +30719,7 @@ var createRange = /* @__PURE__ */ factory(
|
|
|
30719
30719
|
let x = start;
|
|
30720
30720
|
while (ongoing(x, end)) {
|
|
30721
30721
|
array.push(x);
|
|
30722
|
-
x =
|
|
30722
|
+
x = add3(x, step);
|
|
30723
30723
|
}
|
|
30724
30724
|
return array;
|
|
30725
30725
|
}
|
|
@@ -33204,7 +33204,7 @@ var dependencies199 = [
|
|
|
33204
33204
|
var createDivide = /* @__PURE__ */ factory(
|
|
33205
33205
|
name199,
|
|
33206
33206
|
dependencies199,
|
|
33207
|
-
({ typed: typed3, matrix: matrix2, multiply: multiply2, equalScalar: equalScalar3, divideScalar: divideScalar2, inv:
|
|
33207
|
+
({ typed: typed3, matrix: matrix2, multiply: multiply2, equalScalar: equalScalar3, divideScalar: divideScalar2, inv: inv3, nodeOperations: nodeOperations2 }) => {
|
|
33208
33208
|
const matAlgo11xS0s = createMatAlgo11xS0s({ typed: typed3, equalScalar: equalScalar3 });
|
|
33209
33209
|
const matAlgo14xDs = createMatAlgo14xDs({ typed: typed3 });
|
|
33210
33210
|
return typed3(
|
|
@@ -33232,7 +33232,7 @@ var createDivide = /* @__PURE__ */ factory(
|
|
|
33232
33232
|
// MATRIX SIGNATURES - Deal with matrices
|
|
33233
33233
|
// =========================================================================
|
|
33234
33234
|
"Array | Matrix, Array | Matrix": function(x, y) {
|
|
33235
|
-
return multiply2(x,
|
|
33235
|
+
return multiply2(x, inv3(y));
|
|
33236
33236
|
},
|
|
33237
33237
|
"DenseMatrix, any": function(x, y) {
|
|
33238
33238
|
return matAlgo14xDs(
|
|
@@ -33259,7 +33259,7 @@ var createDivide = /* @__PURE__ */ factory(
|
|
|
33259
33259
|
).valueOf();
|
|
33260
33260
|
},
|
|
33261
33261
|
"any, Array | Matrix": function(x, y) {
|
|
33262
|
-
return multiply2(x,
|
|
33262
|
+
return multiply2(x, inv3(y));
|
|
33263
33263
|
}
|
|
33264
33264
|
},
|
|
33265
33265
|
divideScalar2.signatures
|
|
@@ -34245,7 +34245,7 @@ var createCross = /* @__PURE__ */ factory(
|
|
|
34245
34245
|
({
|
|
34246
34246
|
typed: typed3,
|
|
34247
34247
|
matrix: matrix2,
|
|
34248
|
-
subtract:
|
|
34248
|
+
subtract: subtract3,
|
|
34249
34249
|
multiply: multiply2
|
|
34250
34250
|
}) => {
|
|
34251
34251
|
return typed3(name209, {
|
|
@@ -34272,9 +34272,9 @@ var createCross = /* @__PURE__ */ factory(
|
|
|
34272
34272
|
);
|
|
34273
34273
|
}
|
|
34274
34274
|
const product3 = [
|
|
34275
|
-
|
|
34276
|
-
|
|
34277
|
-
|
|
34275
|
+
subtract3(multiply2(x[1], y[2]), multiply2(x[2], y[1])),
|
|
34276
|
+
subtract3(multiply2(x[2], y[0]), multiply2(x[0], y[2])),
|
|
34277
|
+
subtract3(multiply2(x[0], y[1]), multiply2(x[1], y[0]))
|
|
34278
34278
|
];
|
|
34279
34279
|
if (highestDimension > 1) {
|
|
34280
34280
|
return [product3];
|
|
@@ -34294,7 +34294,7 @@ var createDiff = /* @__PURE__ */ factory(
|
|
|
34294
34294
|
({
|
|
34295
34295
|
typed: typed3,
|
|
34296
34296
|
matrix: matrix2,
|
|
34297
|
-
subtract:
|
|
34297
|
+
subtract: subtract3,
|
|
34298
34298
|
number: number2
|
|
34299
34299
|
}) => {
|
|
34300
34300
|
return typed3(name210, {
|
|
@@ -34355,7 +34355,7 @@ var createDiff = /* @__PURE__ */ factory(
|
|
|
34355
34355
|
return _ArrayDiff(obj1, obj2);
|
|
34356
34356
|
}
|
|
34357
34357
|
if (!obj1IsArray && !obj2IsArray) {
|
|
34358
|
-
return
|
|
34358
|
+
return subtract3(obj2, obj1);
|
|
34359
34359
|
}
|
|
34360
34360
|
throw TypeError("Cannot calculate difference between 1 array and 1 non-array");
|
|
34361
34361
|
}
|
|
@@ -34392,7 +34392,7 @@ var dependencies211 = [
|
|
|
34392
34392
|
var createSqrtm = /* @__PURE__ */ factory(
|
|
34393
34393
|
name211,
|
|
34394
34394
|
dependencies211,
|
|
34395
|
-
({ typed: typed3, abs: abs2, add:
|
|
34395
|
+
({ typed: typed3, abs: abs2, add: add3, multiply: multiply2, map: map2, sqrt: sqrt2, subtract: subtract3, inv: inv3, size: size2, max: max2, identity: identity2 }) => {
|
|
34396
34396
|
const _maxIterations = 1e3;
|
|
34397
34397
|
const _tolerance = 1e-6;
|
|
34398
34398
|
function _tryWasmSqrtm(A, n) {
|
|
@@ -34458,9 +34458,9 @@ var createSqrtm = /* @__PURE__ */ factory(
|
|
|
34458
34458
|
let Z = identity2(size2(A));
|
|
34459
34459
|
do {
|
|
34460
34460
|
const Yk = Y;
|
|
34461
|
-
Y = multiply2(0.5,
|
|
34462
|
-
Z = multiply2(0.5,
|
|
34463
|
-
error = max2(abs2(
|
|
34461
|
+
Y = multiply2(0.5, add3(Yk, inv3(Z)));
|
|
34462
|
+
Z = multiply2(0.5, add3(Z, inv3(Yk)));
|
|
34463
|
+
error = max2(abs2(subtract3(Y, Yk)));
|
|
34464
34464
|
if (error > _tolerance && ++iterations > _maxIterations) {
|
|
34465
34465
|
throw new Error("computing square root of matrix: iterative method could not converge");
|
|
34466
34466
|
}
|
|
@@ -34924,7 +34924,7 @@ var dependencies213 = ["divideScalar", "multiply", "subtract"];
|
|
|
34924
34924
|
var createCsSpsolve = /* @__PURE__ */ factory(
|
|
34925
34925
|
name213,
|
|
34926
34926
|
dependencies213,
|
|
34927
|
-
({ divideScalar: divideScalar2, multiply: multiply2, subtract:
|
|
34927
|
+
({ divideScalar: divideScalar2, multiply: multiply2, subtract: subtract3 }) => {
|
|
34928
34928
|
return function csSpsolve2(g, b, k, xi, x, pinv2, lo) {
|
|
34929
34929
|
const gvalues = g._values;
|
|
34930
34930
|
const gindex = g._index;
|
|
@@ -34955,7 +34955,7 @@ var createCsSpsolve = /* @__PURE__ */ factory(
|
|
|
34955
34955
|
q = lo ? p1 : p1 - 1;
|
|
34956
34956
|
for (; p < q; p++) {
|
|
34957
34957
|
const i = gindex[p];
|
|
34958
|
-
x[i] =
|
|
34958
|
+
x[i] = subtract3(x[i], multiply2(gvalues[p], x[j]));
|
|
34959
34959
|
}
|
|
34960
34960
|
}
|
|
34961
34961
|
return top;
|
|
@@ -34977,8 +34977,8 @@ var dependencies214 = [
|
|
|
34977
34977
|
var createCsLu = /* @__PURE__ */ factory(
|
|
34978
34978
|
name214,
|
|
34979
34979
|
dependencies214,
|
|
34980
|
-
({ abs: abs2, divideScalar: divideScalar2, multiply: multiply2, subtract:
|
|
34981
|
-
const csSpsolve2 = createCsSpsolve({ divideScalar: divideScalar2, multiply: multiply2, subtract:
|
|
34980
|
+
({ abs: abs2, divideScalar: divideScalar2, multiply: multiply2, subtract: subtract3, larger: larger2, largerEq: largerEq2, SparseMatrix }) => {
|
|
34981
|
+
const csSpsolve2 = createCsSpsolve({ divideScalar: divideScalar2, multiply: multiply2, subtract: subtract3 });
|
|
34982
34982
|
return function csLu2(m, s, tol) {
|
|
34983
34983
|
if (!m) {
|
|
34984
34984
|
return null;
|
|
@@ -35097,21 +35097,21 @@ var createSlu = /* @__PURE__ */ factory(
|
|
|
35097
35097
|
({
|
|
35098
35098
|
typed: typed3,
|
|
35099
35099
|
abs: abs2,
|
|
35100
|
-
add:
|
|
35100
|
+
add: add3,
|
|
35101
35101
|
multiply: multiply2,
|
|
35102
|
-
transpose:
|
|
35102
|
+
transpose: transpose5,
|
|
35103
35103
|
divideScalar: divideScalar2,
|
|
35104
|
-
subtract:
|
|
35104
|
+
subtract: subtract3,
|
|
35105
35105
|
larger: larger2,
|
|
35106
35106
|
largerEq: largerEq2,
|
|
35107
35107
|
SparseMatrix
|
|
35108
35108
|
}) => {
|
|
35109
|
-
const csSqr2 = createCsSqr({ add:
|
|
35109
|
+
const csSqr2 = createCsSqr({ add: add3, multiply: multiply2, transpose: transpose5 });
|
|
35110
35110
|
const csLu2 = createCsLu({
|
|
35111
35111
|
abs: abs2,
|
|
35112
35112
|
divideScalar: divideScalar2,
|
|
35113
35113
|
multiply: multiply2,
|
|
35114
|
-
subtract:
|
|
35114
|
+
subtract: subtract3,
|
|
35115
35115
|
larger: larger2,
|
|
35116
35116
|
largerEq: largerEq2,
|
|
35117
35117
|
SparseMatrix
|
|
@@ -35197,7 +35197,7 @@ var createCsChol = /* @__PURE__ */ factory(
|
|
|
35197
35197
|
({
|
|
35198
35198
|
divideScalar: divideScalar2,
|
|
35199
35199
|
sqrt: sqrt2,
|
|
35200
|
-
subtract:
|
|
35200
|
+
subtract: subtract3,
|
|
35201
35201
|
multiply: multiply2,
|
|
35202
35202
|
im: im3,
|
|
35203
35203
|
re: re3,
|
|
@@ -35251,9 +35251,9 @@ var createCsChol = /* @__PURE__ */ factory(
|
|
|
35251
35251
|
x[i] = 0;
|
|
35252
35252
|
for (p = lptr[i] + 1; p < c[i]; p++) {
|
|
35253
35253
|
const r = lindex[p];
|
|
35254
|
-
x[r] =
|
|
35254
|
+
x[r] = subtract3(x[r], multiply2(lvalues[p], lki));
|
|
35255
35255
|
}
|
|
35256
|
-
d =
|
|
35256
|
+
d = subtract3(d, multiply2(lki, conj3(lki)));
|
|
35257
35257
|
p = c[i]++;
|
|
35258
35258
|
lindex[p] = k;
|
|
35259
35259
|
lvalues[p] = conj3(lki);
|
|
@@ -35411,13 +35411,13 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35411
35411
|
typed: typed3,
|
|
35412
35412
|
config: config2,
|
|
35413
35413
|
abs: abs2,
|
|
35414
|
-
add:
|
|
35414
|
+
add: add3,
|
|
35415
35415
|
addScalar: addScalar2,
|
|
35416
35416
|
matrix: matrix2,
|
|
35417
35417
|
multiply: multiply2,
|
|
35418
35418
|
multiplyScalar: multiplyScalar2,
|
|
35419
35419
|
divideScalar: divideScalar2,
|
|
35420
|
-
subtract:
|
|
35420
|
+
subtract: subtract3,
|
|
35421
35421
|
smaller: smaller2,
|
|
35422
35422
|
equalScalar: equalScalar3,
|
|
35423
35423
|
flatten: flatten4,
|
|
@@ -35530,9 +35530,9 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35530
35530
|
if (wasmResult !== void 0) return wasmResult;
|
|
35531
35531
|
const o1 = p1a;
|
|
35532
35532
|
const o2 = p2a;
|
|
35533
|
-
const d1 =
|
|
35534
|
-
const d2 =
|
|
35535
|
-
const det2 =
|
|
35533
|
+
const d1 = subtract3(o1, p1b);
|
|
35534
|
+
const d2 = subtract3(o2, p2b);
|
|
35535
|
+
const det2 = subtract3(
|
|
35536
35536
|
multiplyScalar2(d1[0], d2[1]),
|
|
35537
35537
|
multiplyScalar2(d2[0], d1[1])
|
|
35538
35538
|
);
|
|
@@ -35546,12 +35546,12 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35546
35546
|
const d21o20 = multiplyScalar2(d2[1], o2[0]);
|
|
35547
35547
|
const t = divideScalar2(
|
|
35548
35548
|
addScalar2(
|
|
35549
|
-
|
|
35549
|
+
subtract3(subtract3(d20o11, d21o10), d20o21),
|
|
35550
35550
|
d21o20
|
|
35551
35551
|
),
|
|
35552
35552
|
det2
|
|
35553
35553
|
);
|
|
35554
|
-
return
|
|
35554
|
+
return add3(multiply2(d1, t), o1);
|
|
35555
35555
|
}
|
|
35556
35556
|
function _tryWasmIntersect2d(p1a, p1b, p2a, p2b) {
|
|
35557
35557
|
const wasm = wasmLoader.getModule();
|
|
@@ -35583,18 +35583,18 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35583
35583
|
}
|
|
35584
35584
|
function _intersect3dHelper(a, b, c, d, e, f, g, h, i, j, k, l) {
|
|
35585
35585
|
const add1 = multiplyScalar2(
|
|
35586
|
-
|
|
35587
|
-
|
|
35586
|
+
subtract3(a, b),
|
|
35587
|
+
subtract3(c, d)
|
|
35588
35588
|
);
|
|
35589
35589
|
const add22 = multiplyScalar2(
|
|
35590
|
-
|
|
35591
|
-
|
|
35590
|
+
subtract3(e, f),
|
|
35591
|
+
subtract3(g, h)
|
|
35592
35592
|
);
|
|
35593
|
-
const
|
|
35594
|
-
|
|
35595
|
-
|
|
35593
|
+
const add32 = multiplyScalar2(
|
|
35594
|
+
subtract3(i, j),
|
|
35595
|
+
subtract3(k, l)
|
|
35596
35596
|
);
|
|
35597
|
-
return addScalar2(addScalar2(add1, add22),
|
|
35597
|
+
return addScalar2(addScalar2(add1, add22), add32);
|
|
35598
35598
|
}
|
|
35599
35599
|
function _intersect3d(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4) {
|
|
35600
35600
|
const d1343 = _intersect3dHelper(x1, x3, x4, x3, y1, y3, y4, y3, z1, z3, z4, z3);
|
|
@@ -35602,23 +35602,23 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35602
35602
|
const d1321 = _intersect3dHelper(x1, x3, x2, x1, y1, y3, y2, y1, z1, z3, z2, z1);
|
|
35603
35603
|
const d4343 = _intersect3dHelper(x4, x3, x4, x3, y4, y3, y4, y3, z4, z3, z4, z3);
|
|
35604
35604
|
const d2121 = _intersect3dHelper(x2, x1, x2, x1, y2, y1, y2, y1, z2, z1, z2, z1);
|
|
35605
|
-
const numerator =
|
|
35605
|
+
const numerator = subtract3(
|
|
35606
35606
|
multiplyScalar2(d1343, d4321),
|
|
35607
35607
|
multiplyScalar2(d1321, d4343)
|
|
35608
35608
|
);
|
|
35609
|
-
const denominator =
|
|
35609
|
+
const denominator = subtract3(
|
|
35610
35610
|
multiplyScalar2(d2121, d4343),
|
|
35611
35611
|
multiplyScalar2(d4321, d4321)
|
|
35612
35612
|
);
|
|
35613
35613
|
if (isZero2(denominator)) return null;
|
|
35614
35614
|
const ta = divideScalar2(numerator, denominator);
|
|
35615
35615
|
const tb = divideScalar2(addScalar2(d1343, multiplyScalar2(ta, d4321)), d4343);
|
|
35616
|
-
const pax = addScalar2(x1, multiplyScalar2(ta,
|
|
35617
|
-
const pay = addScalar2(y1, multiplyScalar2(ta,
|
|
35618
|
-
const paz = addScalar2(z1, multiplyScalar2(ta,
|
|
35619
|
-
const pbx = addScalar2(x3, multiplyScalar2(tb,
|
|
35620
|
-
const pby = addScalar2(y3, multiplyScalar2(tb,
|
|
35621
|
-
const pbz = addScalar2(z3, multiplyScalar2(tb,
|
|
35616
|
+
const pax = addScalar2(x1, multiplyScalar2(ta, subtract3(x2, x1)));
|
|
35617
|
+
const pay = addScalar2(y1, multiplyScalar2(ta, subtract3(y2, y1)));
|
|
35618
|
+
const paz = addScalar2(z1, multiplyScalar2(ta, subtract3(z2, z1)));
|
|
35619
|
+
const pbx = addScalar2(x3, multiplyScalar2(tb, subtract3(x4, x3)));
|
|
35620
|
+
const pby = addScalar2(y3, multiplyScalar2(tb, subtract3(y4, y3)));
|
|
35621
|
+
const pbz = addScalar2(z3, multiplyScalar2(tb, subtract3(z4, z3)));
|
|
35622
35622
|
if (equalScalar3(pax, pbx) && equalScalar3(pay, pby) && equalScalar3(paz, pbz)) {
|
|
35623
35623
|
return [pax, pay, paz];
|
|
35624
35624
|
} else {
|
|
@@ -35632,21 +35632,21 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35632
35632
|
const y2y = multiplyScalar2(y2, y);
|
|
35633
35633
|
const z1z = multiplyScalar2(z1, z);
|
|
35634
35634
|
const z2z = multiplyScalar2(z2, z);
|
|
35635
|
-
const numerator =
|
|
35636
|
-
|
|
35635
|
+
const numerator = subtract3(
|
|
35636
|
+
subtract3(subtract3(c, x1x), y1y),
|
|
35637
35637
|
z1z
|
|
35638
35638
|
);
|
|
35639
|
-
const denominator =
|
|
35640
|
-
|
|
35641
|
-
|
|
35639
|
+
const denominator = subtract3(
|
|
35640
|
+
subtract3(
|
|
35641
|
+
subtract3(addScalar2(addScalar2(x2x, y2y), z2z), x1x),
|
|
35642
35642
|
y1y
|
|
35643
35643
|
),
|
|
35644
35644
|
z1z
|
|
35645
35645
|
);
|
|
35646
35646
|
const t = divideScalar2(numerator, denominator);
|
|
35647
|
-
const px = addScalar2(x1, multiplyScalar2(t,
|
|
35648
|
-
const py = addScalar2(y1, multiplyScalar2(t,
|
|
35649
|
-
const pz = addScalar2(z1, multiplyScalar2(t,
|
|
35647
|
+
const px = addScalar2(x1, multiplyScalar2(t, subtract3(x2, x1)));
|
|
35648
|
+
const py = addScalar2(y1, multiplyScalar2(t, subtract3(y2, y1)));
|
|
35649
|
+
const pz = addScalar2(z1, multiplyScalar2(t, subtract3(z2, z1)));
|
|
35650
35650
|
return [px, py, pz];
|
|
35651
35651
|
}
|
|
35652
35652
|
}
|
|
@@ -35667,7 +35667,7 @@ var dependencies219 = ["typed", "add", "divide"];
|
|
|
35667
35667
|
var createMean = /* @__PURE__ */ factory(
|
|
35668
35668
|
name219,
|
|
35669
35669
|
dependencies219,
|
|
35670
|
-
({ typed: typed3, add:
|
|
35670
|
+
({ typed: typed3, add: add3, divide: divide2 }) => {
|
|
35671
35671
|
return typed3(name219, {
|
|
35672
35672
|
// mean([a, b, c, d, ...])
|
|
35673
35673
|
"Array | Matrix": _mean2,
|
|
@@ -35684,7 +35684,7 @@ var createMean = /* @__PURE__ */ factory(
|
|
|
35684
35684
|
function _nmeanDim(array, dim) {
|
|
35685
35685
|
try {
|
|
35686
35686
|
const dimValue = typeof dim === "number" ? dim : dim.valueOf();
|
|
35687
|
-
const sum3 = reduce2(array, dimValue,
|
|
35687
|
+
const sum3 = reduce2(array, dimValue, add3);
|
|
35688
35688
|
const s = Array.isArray(array) ? arraySize(array) : array.size();
|
|
35689
35689
|
return divide2(sum3, s[dimValue]);
|
|
35690
35690
|
} catch (err) {
|
|
@@ -35712,7 +35712,7 @@ var createMean = /* @__PURE__ */ factory(
|
|
|
35712
35712
|
let num2 = 0;
|
|
35713
35713
|
deepForEach2(array, function(value) {
|
|
35714
35714
|
try {
|
|
35715
|
-
sum3 = sum3 === void 0 ? value :
|
|
35715
|
+
sum3 = sum3 === void 0 ? value : add3(sum3, value);
|
|
35716
35716
|
num2++;
|
|
35717
35717
|
} catch (err) {
|
|
35718
35718
|
throw improveErrorMessage(err, "mean", value);
|
|
@@ -35732,7 +35732,7 @@ var dependencies220 = ["typed", "add", "divide", "compare", "partitionSelect"];
|
|
|
35732
35732
|
var createMedian = /* @__PURE__ */ factory(
|
|
35733
35733
|
name220,
|
|
35734
35734
|
dependencies220,
|
|
35735
|
-
({ typed: typed3, add:
|
|
35735
|
+
({ typed: typed3, add: add3, divide: divide2, compare: compare2, partitionSelect: partitionSelect2 }) => {
|
|
35736
35736
|
function _median2(array) {
|
|
35737
35737
|
try {
|
|
35738
35738
|
const flat = flatten2(array.valueOf());
|
|
@@ -35765,7 +35765,7 @@ var createMedian = /* @__PURE__ */ factory(
|
|
|
35765
35765
|
});
|
|
35766
35766
|
const middle2 = typed3({
|
|
35767
35767
|
"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit": function(left, right) {
|
|
35768
|
-
return divide2(
|
|
35768
|
+
return divide2(add3(left, right), 2);
|
|
35769
35769
|
}
|
|
35770
35770
|
});
|
|
35771
35771
|
return typed3(name220, {
|
|
@@ -35804,8 +35804,8 @@ var createVariance = /* @__PURE__ */ factory(
|
|
|
35804
35804
|
dependencies221,
|
|
35805
35805
|
({
|
|
35806
35806
|
typed: typed3,
|
|
35807
|
-
add:
|
|
35808
|
-
subtract:
|
|
35807
|
+
add: add3,
|
|
35808
|
+
subtract: subtract3,
|
|
35809
35809
|
multiply: multiply2,
|
|
35810
35810
|
divide: divide2,
|
|
35811
35811
|
mapSlices: mapSlices2,
|
|
@@ -35853,7 +35853,7 @@ var createVariance = /* @__PURE__ */ factory(
|
|
|
35853
35853
|
let num2 = 0;
|
|
35854
35854
|
deepForEach2(array, function(value) {
|
|
35855
35855
|
try {
|
|
35856
|
-
sum3 = sum3 === void 0 ? value :
|
|
35856
|
+
sum3 = sum3 === void 0 ? value : add3(sum3, value);
|
|
35857
35857
|
num2++;
|
|
35858
35858
|
} catch (err) {
|
|
35859
35859
|
throw improveErrorMessage(err, "variance", value);
|
|
@@ -35863,8 +35863,8 @@ var createVariance = /* @__PURE__ */ factory(
|
|
|
35863
35863
|
const mean7 = divide2(sum3, num2);
|
|
35864
35864
|
sum3 = void 0;
|
|
35865
35865
|
deepForEach2(array, function(value) {
|
|
35866
|
-
const diff2 =
|
|
35867
|
-
sum3 = sum3 === void 0 ? multiply2(diff2, diff2) :
|
|
35866
|
+
const diff2 = subtract3(value, mean7);
|
|
35867
|
+
sum3 = sum3 === void 0 ? multiply2(diff2, diff2) : add3(sum3, multiply2(diff2, diff2));
|
|
35868
35868
|
});
|
|
35869
35869
|
if (mathIsNaN(sum3)) {
|
|
35870
35870
|
return sum3;
|
|
@@ -35924,8 +35924,8 @@ var createQuantileSeq = /* @__PURE__ */ factory(
|
|
|
35924
35924
|
({
|
|
35925
35925
|
typed: typed3,
|
|
35926
35926
|
bignumber: bignumber2,
|
|
35927
|
-
add:
|
|
35928
|
-
subtract:
|
|
35927
|
+
add: add3,
|
|
35928
|
+
subtract: subtract3,
|
|
35929
35929
|
divide: divide2,
|
|
35930
35930
|
multiply: multiply2,
|
|
35931
35931
|
partitionSelect: partitionSelect2,
|
|
@@ -35967,7 +35967,7 @@ var createQuantileSeq = /* @__PURE__ */ factory(
|
|
|
35967
35967
|
"N must be less than or equal to 2^32-1, as that is the maximum length of an Array"
|
|
35968
35968
|
);
|
|
35969
35969
|
}
|
|
35970
|
-
const nPlusOne =
|
|
35970
|
+
const nPlusOne = add3(probOrN, 1);
|
|
35971
35971
|
probArr = [];
|
|
35972
35972
|
for (let i = 0; smaller2(i, probOrN); i++) {
|
|
35973
35973
|
const prob = divide2(i + 1, nPlusOne);
|
|
@@ -36013,8 +36013,8 @@ var createQuantileSeq = /* @__PURE__ */ factory(
|
|
|
36013
36013
|
}
|
|
36014
36014
|
}
|
|
36015
36015
|
const fracPartConverted = isBigNumber(left) && isNumber(fracPart) ? bignumber2(fracPart) : fracPart;
|
|
36016
|
-
return
|
|
36017
|
-
multiply2(left,
|
|
36016
|
+
return add3(
|
|
36017
|
+
multiply2(left, subtract3(1, fracPartConverted)),
|
|
36018
36018
|
multiply2(right, fracPartConverted)
|
|
36019
36019
|
);
|
|
36020
36020
|
}
|
|
@@ -36105,7 +36105,7 @@ var dependencies224 = ["typed", "add", "divide", "multiply", "factorial", "isInt
|
|
|
36105
36105
|
var createMultinomial = /* @__PURE__ */ factory(
|
|
36106
36106
|
name224,
|
|
36107
36107
|
dependencies224,
|
|
36108
|
-
({ typed: typed3, add:
|
|
36108
|
+
({ typed: typed3, add: add3, divide: divide2, multiply: multiply2, factorial: factorial5, isInteger: isInteger3, isPositive: isPositive2 }) => {
|
|
36109
36109
|
return typed3(name224, {
|
|
36110
36110
|
"Array | Matrix": function(a) {
|
|
36111
36111
|
let sum3 = 0;
|
|
@@ -36114,7 +36114,7 @@ var createMultinomial = /* @__PURE__ */ factory(
|
|
|
36114
36114
|
if (!isInteger3(ai) || !isPositive2(ai)) {
|
|
36115
36115
|
throw new TypeError("Positive integer value expected in function multinomial");
|
|
36116
36116
|
}
|
|
36117
|
-
sum3 =
|
|
36117
|
+
sum3 = add3(sum3, ai);
|
|
36118
36118
|
denom = multiply2(denom, factorial5(ai));
|
|
36119
36119
|
});
|
|
36120
36120
|
return divide2(factorial5(sum3), denom);
|
|
@@ -36130,7 +36130,7 @@ var dependencies225 = ["typed", "add", "multiply", "Complex", "divide", "matrix"
|
|
|
36130
36130
|
var createFreqz = /* @__PURE__ */ factory(
|
|
36131
36131
|
name225,
|
|
36132
36132
|
dependencies225,
|
|
36133
|
-
({ typed: typed3, add:
|
|
36133
|
+
({ typed: typed3, add: add3, multiply: multiply2, Complex: Complex13, divide: divide2, matrix: matrix2 }) => {
|
|
36134
36134
|
return typed3(name225, {
|
|
36135
36135
|
"Array, Array": function(b, a) {
|
|
36136
36136
|
const w = createBins(512);
|
|
@@ -36224,13 +36224,13 @@ var createFreqz = /* @__PURE__ */ factory(
|
|
|
36224
36224
|
let sumNum = Complex13(0, 0);
|
|
36225
36225
|
let sumDen = Complex13(0, 0);
|
|
36226
36226
|
for (let j = 0; j < b.length; j++) {
|
|
36227
|
-
sumNum =
|
|
36227
|
+
sumNum = add3(
|
|
36228
36228
|
sumNum,
|
|
36229
36229
|
multiply2(b[j], Complex13(Math.cos(-j * w[i]), Math.sin(-j * w[i])))
|
|
36230
36230
|
);
|
|
36231
36231
|
}
|
|
36232
36232
|
for (let j = 0; j < a.length; j++) {
|
|
36233
|
-
sumDen =
|
|
36233
|
+
sumDen = add3(
|
|
36234
36234
|
sumDen,
|
|
36235
36235
|
multiply2(a[j], Complex13(Math.cos(-j * w[i]), Math.sin(-j * w[i])))
|
|
36236
36236
|
);
|
|
@@ -37047,8 +37047,8 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37047
37047
|
typed: typed3,
|
|
37048
37048
|
isZero: isZero2,
|
|
37049
37049
|
equalScalar: equalScalar3,
|
|
37050
|
-
add:
|
|
37051
|
-
subtract:
|
|
37050
|
+
add: add3,
|
|
37051
|
+
subtract: subtract3,
|
|
37052
37052
|
multiply: multiply2,
|
|
37053
37053
|
divide: divide2,
|
|
37054
37054
|
sqrt: sqrt2,
|
|
@@ -37078,10 +37078,10 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37078
37078
|
const d1 = multiply2(b, b);
|
|
37079
37079
|
const d2 = multiply2(4, a, c);
|
|
37080
37080
|
if (equalScalar3(d1, d2)) return [divide2(unaryMinus2(b), denom)];
|
|
37081
|
-
const discriminant2 = sqrt2(
|
|
37081
|
+
const discriminant2 = sqrt2(subtract3(d1, d2));
|
|
37082
37082
|
return [
|
|
37083
|
-
divide2(
|
|
37084
|
-
divide2(
|
|
37083
|
+
divide2(subtract3(discriminant2, b), denom),
|
|
37084
|
+
divide2(subtract3(unaryMinus2(discriminant2), b), denom)
|
|
37085
37085
|
];
|
|
37086
37086
|
}
|
|
37087
37087
|
case 4: {
|
|
@@ -37089,15 +37089,15 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37089
37089
|
const denom = unaryMinus2(multiply2(3, a));
|
|
37090
37090
|
const D0_1 = multiply2(b, b);
|
|
37091
37091
|
const D0_2 = multiply2(3, a, c);
|
|
37092
|
-
const D1_1 =
|
|
37092
|
+
const D1_1 = add3(multiply2(2, b, b, b), multiply2(27, a, a, d));
|
|
37093
37093
|
const D1_2 = multiply2(9, a, b, c);
|
|
37094
37094
|
if (equalScalar3(D0_1, D0_2) && equalScalar3(D1_1, D1_2)) {
|
|
37095
37095
|
return [divide2(b, denom)];
|
|
37096
37096
|
}
|
|
37097
|
-
const Delta0 =
|
|
37098
|
-
const Delta1 =
|
|
37099
|
-
const discriminant1 =
|
|
37100
|
-
const discriminant2 =
|
|
37097
|
+
const Delta0 = subtract3(D0_1, D0_2);
|
|
37098
|
+
const Delta1 = subtract3(D1_1, D1_2);
|
|
37099
|
+
const discriminant1 = add3(multiply2(18, a, b, c, d), multiply2(b, b, c, c));
|
|
37100
|
+
const discriminant2 = add3(
|
|
37101
37101
|
multiply2(4, b, b, b, d),
|
|
37102
37102
|
multiply2(4, a, c, c, c),
|
|
37103
37103
|
multiply2(27, a, a, d, d)
|
|
@@ -37105,11 +37105,11 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37105
37105
|
if (equalScalar3(discriminant1, discriminant2)) {
|
|
37106
37106
|
return [
|
|
37107
37107
|
divide2(
|
|
37108
|
-
|
|
37108
|
+
subtract3(multiply2(4, a, b, c), add3(multiply2(9, a, a, d), multiply2(b, b, b))),
|
|
37109
37109
|
multiply2(a, Delta0)
|
|
37110
37110
|
),
|
|
37111
37111
|
// simple root
|
|
37112
|
-
divide2(
|
|
37112
|
+
divide2(subtract3(multiply2(9, a, d), multiply2(b, c)), multiply2(2, Delta0))
|
|
37113
37113
|
// double root
|
|
37114
37114
|
];
|
|
37115
37115
|
}
|
|
@@ -37118,15 +37118,15 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37118
37118
|
Ccubed = Delta1;
|
|
37119
37119
|
} else {
|
|
37120
37120
|
Ccubed = divide2(
|
|
37121
|
-
|
|
37121
|
+
add3(
|
|
37122
37122
|
Delta1,
|
|
37123
|
-
sqrt2(
|
|
37123
|
+
sqrt2(subtract3(multiply2(Delta1, Delta1), multiply2(4, Delta0, Delta0, Delta0)))
|
|
37124
37124
|
),
|
|
37125
37125
|
2
|
|
37126
37126
|
);
|
|
37127
37127
|
}
|
|
37128
37128
|
const allRoots = true;
|
|
37129
|
-
const rawRoots = cbrt3(Ccubed, allRoots).toArray().map((C) => divide2(
|
|
37129
|
+
const rawRoots = cbrt3(Ccubed, allRoots).toArray().map((C) => divide2(add3(b, C, divide2(Delta0, C)), denom));
|
|
37130
37130
|
return rawRoots.map((r) => {
|
|
37131
37131
|
if (typeOf3(r) === "Complex" && equalScalar3(re3(r), re3(r) + im3(r))) {
|
|
37132
37132
|
return re3(r);
|
|
@@ -37181,8 +37181,8 @@ var createZeta = /* @__PURE__ */ factory(
|
|
|
37181
37181
|
isNegative: isNegative2,
|
|
37182
37182
|
gamma: gamma2,
|
|
37183
37183
|
sin: sin2,
|
|
37184
|
-
subtract:
|
|
37185
|
-
add:
|
|
37184
|
+
subtract: subtract3,
|
|
37185
|
+
add: add3,
|
|
37186
37186
|
Complex: Complex13,
|
|
37187
37187
|
BigNumber: BigNumber9,
|
|
37188
37188
|
pi
|
|
@@ -37242,28 +37242,28 @@ var createZeta = /* @__PURE__ */ factory(
|
|
|
37242
37242
|
if (getRe(s) >= 0) {
|
|
37243
37243
|
return f(s, createValue(n), createValue);
|
|
37244
37244
|
} else {
|
|
37245
|
-
let c = multiply2(pow2(2, s), pow2(createValue(pi),
|
|
37245
|
+
let c = multiply2(pow2(2, s), pow2(createValue(pi), subtract3(s, 1)));
|
|
37246
37246
|
c = multiply2(c, sin2(multiply2(divide2(createValue(pi), 2), s)));
|
|
37247
|
-
c = multiply2(c, gamma2(
|
|
37248
|
-
return multiply2(c, zeta2(
|
|
37247
|
+
c = multiply2(c, gamma2(subtract3(1, s)));
|
|
37248
|
+
return multiply2(c, zeta2(subtract3(1, s), createValue, determineDigits, getRe));
|
|
37249
37249
|
}
|
|
37250
37250
|
}
|
|
37251
37251
|
function d(k, n) {
|
|
37252
37252
|
let S = k;
|
|
37253
|
-
for (let j = k; smallerEq2(j, n); j =
|
|
37253
|
+
for (let j = k; smallerEq2(j, n); j = add3(j, 1)) {
|
|
37254
37254
|
const factor2 = divide2(
|
|
37255
|
-
multiply2(factorial5(
|
|
37256
|
-
multiply2(factorial5(
|
|
37255
|
+
multiply2(factorial5(add3(n, subtract3(j, 1))), pow2(4, j)),
|
|
37256
|
+
multiply2(factorial5(subtract3(n, j)), factorial5(multiply2(2, j)))
|
|
37257
37257
|
);
|
|
37258
|
-
S =
|
|
37258
|
+
S = add3(S, factor2);
|
|
37259
37259
|
}
|
|
37260
37260
|
return multiply2(n, S);
|
|
37261
37261
|
}
|
|
37262
37262
|
function f(s, n, createValue) {
|
|
37263
|
-
const c = divide2(1, multiply2(d(createValue(0), n),
|
|
37263
|
+
const c = divide2(1, multiply2(d(createValue(0), n), subtract3(1, pow2(2, subtract3(1, s)))));
|
|
37264
37264
|
let S = createValue(0);
|
|
37265
|
-
for (let k = createValue(1); smallerEq2(k, n); k =
|
|
37266
|
-
S =
|
|
37265
|
+
for (let k = createValue(1); smallerEq2(k, n); k = add3(k, 1)) {
|
|
37266
|
+
S = add3(S, divide2(multiply2((-1) ** (k - 1), d(k, n)), pow2(k, s)));
|
|
37267
37267
|
}
|
|
37268
37268
|
return multiply2(c, S);
|
|
37269
37269
|
}
|
|
@@ -37309,7 +37309,7 @@ function flattenToFloat648(matrix2, rows, cols) {
|
|
|
37309
37309
|
}
|
|
37310
37310
|
function createComplexEigs({
|
|
37311
37311
|
addScalar: addScalar2,
|
|
37312
|
-
subtract:
|
|
37312
|
+
subtract: subtract3,
|
|
37313
37313
|
flatten: flatten4,
|
|
37314
37314
|
multiply: multiply2,
|
|
37315
37315
|
multiplyScalar: multiplyScalar2,
|
|
@@ -37320,7 +37320,7 @@ function createComplexEigs({
|
|
|
37320
37320
|
diag: diag2,
|
|
37321
37321
|
size: size2,
|
|
37322
37322
|
reshape: reshape3,
|
|
37323
|
-
inv:
|
|
37323
|
+
inv: inv3,
|
|
37324
37324
|
qr: qr2,
|
|
37325
37325
|
usolve: usolve2,
|
|
37326
37326
|
usolveAll: usolveAll2,
|
|
@@ -37329,7 +37329,7 @@ function createComplexEigs({
|
|
|
37329
37329
|
larger: larger2,
|
|
37330
37330
|
smaller: smaller2,
|
|
37331
37331
|
matrixFromColumns: _matrixFromColumns,
|
|
37332
|
-
dot:
|
|
37332
|
+
dot: dot7
|
|
37333
37333
|
}) {
|
|
37334
37334
|
function complexEigs(arr10, N, prec, type, findVectors = true) {
|
|
37335
37335
|
if (!findVectors && type === "number" && N * N >= WASM_EIGS_THRESHOLD) {
|
|
@@ -37489,14 +37489,14 @@ function createComplexEigs({
|
|
|
37489
37489
|
continue;
|
|
37490
37490
|
}
|
|
37491
37491
|
for (let k = 0; k < N; k++) {
|
|
37492
|
-
arr10[j][k] =
|
|
37492
|
+
arr10[j][k] = subtract3(arr10[j][k], multiplyScalar2(n, arr10[i + 1][k]));
|
|
37493
37493
|
}
|
|
37494
37494
|
for (let k = 0; k < N; k++) {
|
|
37495
37495
|
arr10[k][i + 1] = addScalar2(arr10[k][i + 1], multiplyScalar2(n, arr10[k][j]));
|
|
37496
37496
|
}
|
|
37497
37497
|
if (findVectors) {
|
|
37498
37498
|
for (let k = 0; k < N; k++) {
|
|
37499
|
-
R[j][k] =
|
|
37499
|
+
R[j][k] = subtract3(R[j][k], multiplyScalar2(n, R[i + 1][k]));
|
|
37500
37500
|
}
|
|
37501
37501
|
}
|
|
37502
37502
|
}
|
|
@@ -37520,7 +37520,7 @@ function createComplexEigs({
|
|
|
37520
37520
|
lastConvergenceBefore += 1;
|
|
37521
37521
|
const k = arr10[n - 1][n - 1];
|
|
37522
37522
|
for (let i = 0; i < n; i++) {
|
|
37523
|
-
arr10[i][i] =
|
|
37523
|
+
arr10[i][i] = subtract3(arr10[i][i], k);
|
|
37524
37524
|
}
|
|
37525
37525
|
const { Q: Q2, R } = qr2(arr10);
|
|
37526
37526
|
arr10 = multiply2(R, Q2);
|
|
@@ -37586,7 +37586,7 @@ function createComplexEigs({
|
|
|
37586
37586
|
break;
|
|
37587
37587
|
}
|
|
37588
37588
|
}
|
|
37589
|
-
lambdas.sort((a, b) => +
|
|
37589
|
+
lambdas.sort((a, b) => +subtract3(abs2(a), abs2(b)));
|
|
37590
37590
|
if (lastConvergenceBefore > 100) {
|
|
37591
37591
|
const err = new Error(
|
|
37592
37592
|
"The eigenvalues failed to converge. Only found these eigenvalues: " + lambdas.join(", ")
|
|
@@ -37599,7 +37599,7 @@ function createComplexEigs({
|
|
|
37599
37599
|
return { values: lambdas, C };
|
|
37600
37600
|
}
|
|
37601
37601
|
function findEigenvectors(A, N, C, R, values, prec, type) {
|
|
37602
|
-
const Cinv =
|
|
37602
|
+
const Cinv = inv3(C);
|
|
37603
37603
|
const U = multiply2(multiply2(Cinv, A), C);
|
|
37604
37604
|
const big = type === "BigNumber";
|
|
37605
37605
|
const cplx = type === "Complex";
|
|
@@ -37622,7 +37622,7 @@ function createComplexEigs({
|
|
|
37622
37622
|
const E = diag2(Array(N).fill(one));
|
|
37623
37623
|
for (let i = 0; i < len; i++) {
|
|
37624
37624
|
const lambda = uniqueValues[i];
|
|
37625
|
-
const S =
|
|
37625
|
+
const S = subtract3(
|
|
37626
37626
|
U,
|
|
37627
37627
|
multiply2(lambda, E)
|
|
37628
37628
|
);
|
|
@@ -37635,7 +37635,7 @@ function createComplexEigs({
|
|
|
37635
37635
|
}
|
|
37636
37636
|
solutions.push(approxVec);
|
|
37637
37637
|
}
|
|
37638
|
-
const correction = multiply2(
|
|
37638
|
+
const correction = multiply2(inv3(R), C);
|
|
37639
37639
|
solutions = solutions.map(
|
|
37640
37640
|
(v) => multiply2(correction, v)
|
|
37641
37641
|
);
|
|
@@ -37645,13 +37645,13 @@ function createComplexEigs({
|
|
|
37645
37645
|
}
|
|
37646
37646
|
function eigenvalues2x2(a, b, c, d) {
|
|
37647
37647
|
const trA = addScalar2(a, d);
|
|
37648
|
-
const detA =
|
|
37648
|
+
const detA = subtract3(multiplyScalar2(a, d), multiplyScalar2(b, c));
|
|
37649
37649
|
const x = multiplyScalar2(trA, 0.5);
|
|
37650
37650
|
const y = multiplyScalar2(
|
|
37651
|
-
sqrt2(
|
|
37651
|
+
sqrt2(subtract3(multiplyScalar2(trA, trA), multiplyScalar2(4, detA))),
|
|
37652
37652
|
0.5
|
|
37653
37653
|
);
|
|
37654
|
-
return [addScalar2(x, y),
|
|
37654
|
+
return [addScalar2(x, y), subtract3(x, y)];
|
|
37655
37655
|
}
|
|
37656
37656
|
function jordanBase2x2(a, b, c, d, l1, l2, prec, type) {
|
|
37657
37657
|
const big = type === "BigNumber";
|
|
@@ -37664,14 +37664,14 @@ function createComplexEigs({
|
|
|
37664
37664
|
[zero, one]
|
|
37665
37665
|
];
|
|
37666
37666
|
}
|
|
37667
|
-
if (larger2(abs2(
|
|
37667
|
+
if (larger2(abs2(subtract3(l1, l2)), prec)) {
|
|
37668
37668
|
return [
|
|
37669
|
-
[
|
|
37669
|
+
[subtract3(l1, d), subtract3(l2, d)],
|
|
37670
37670
|
[c, c]
|
|
37671
37671
|
];
|
|
37672
37672
|
}
|
|
37673
|
-
const na =
|
|
37674
|
-
const nd =
|
|
37673
|
+
const na = subtract3(a, l1);
|
|
37674
|
+
const nd = subtract3(d, l1);
|
|
37675
37675
|
if (smaller2(abs2(b), prec) && smaller2(abs2(nd), prec)) {
|
|
37676
37676
|
return [
|
|
37677
37677
|
[na, one],
|
|
@@ -37767,10 +37767,10 @@ function createComplexEigs({
|
|
|
37767
37767
|
const vectorShape = size2(v);
|
|
37768
37768
|
for (let w of orthog) {
|
|
37769
37769
|
w = reshape3(w, vectorShape);
|
|
37770
|
-
v =
|
|
37770
|
+
v = subtract3(
|
|
37771
37771
|
v,
|
|
37772
37772
|
multiply2(
|
|
37773
|
-
divideScalar2(
|
|
37773
|
+
divideScalar2(dot7(w, v), dot7(w, w)),
|
|
37774
37774
|
w
|
|
37775
37775
|
)
|
|
37776
37776
|
);
|
|
@@ -37778,7 +37778,7 @@ function createComplexEigs({
|
|
|
37778
37778
|
return v;
|
|
37779
37779
|
}
|
|
37780
37780
|
function norm4(v) {
|
|
37781
|
-
return abs2(sqrt2(
|
|
37781
|
+
return abs2(sqrt2(dot7(v, v)));
|
|
37782
37782
|
}
|
|
37783
37783
|
function normalize2(v, type) {
|
|
37784
37784
|
const big = type === "BigNumber";
|
|
@@ -37803,16 +37803,16 @@ function flattenToFloat649(matrix2, rows, cols) {
|
|
|
37803
37803
|
function createRealSymmetric({
|
|
37804
37804
|
config: config2,
|
|
37805
37805
|
addScalar: addScalar2,
|
|
37806
|
-
subtract:
|
|
37806
|
+
subtract: subtract3,
|
|
37807
37807
|
abs: abs2,
|
|
37808
37808
|
atan: atan3,
|
|
37809
37809
|
cos: cos2,
|
|
37810
37810
|
sin: sin2,
|
|
37811
37811
|
multiplyScalar: multiplyScalar2,
|
|
37812
|
-
inv:
|
|
37812
|
+
inv: inv3,
|
|
37813
37813
|
bignumber: bignumber2,
|
|
37814
37814
|
multiply: multiply2,
|
|
37815
|
-
add:
|
|
37815
|
+
add: add3
|
|
37816
37816
|
}) {
|
|
37817
37817
|
function bigGte(a, b) {
|
|
37818
37818
|
if (typeof a === "number" && typeof b === "number") return a >= b;
|
|
@@ -37954,13 +37954,13 @@ function createRealSymmetric({
|
|
|
37954
37954
|
}
|
|
37955
37955
|
}
|
|
37956
37956
|
function getThetaBig(aii, ajj, aij) {
|
|
37957
|
-
const denom =
|
|
37957
|
+
const denom = subtract3(ajj, aii);
|
|
37958
37958
|
if (bigLte(abs2(denom), bignumber2(config2.relTol))) {
|
|
37959
37959
|
return bignumber2(-1).acos().div(4);
|
|
37960
37960
|
} else {
|
|
37961
37961
|
return multiplyScalar2(
|
|
37962
37962
|
bignumber2(0.5),
|
|
37963
|
-
atan3(multiply2(bignumber2(2), aij,
|
|
37963
|
+
atan3(multiply2(bignumber2(2), aij, inv3(denom)))
|
|
37964
37964
|
);
|
|
37965
37965
|
}
|
|
37966
37966
|
}
|
|
@@ -37987,7 +37987,7 @@ function createRealSymmetric({
|
|
|
37987
37987
|
const Ski = Array(N).fill(bignumber2(0));
|
|
37988
37988
|
const Skj = Array(N).fill(bignumber2(0));
|
|
37989
37989
|
for (let k = 0; k < N; k++) {
|
|
37990
|
-
Ski[k] =
|
|
37990
|
+
Ski[k] = subtract3(multiplyScalar2(c, Sij[k][i]), multiplyScalar2(s, Sij[k][j]));
|
|
37991
37991
|
Skj[k] = addScalar2(multiplyScalar2(s, Sij[k][i]), multiplyScalar2(c, Sij[k][j]));
|
|
37992
37992
|
}
|
|
37993
37993
|
for (let k = 0; k < N; k++) {
|
|
@@ -38006,16 +38006,16 @@ function createRealSymmetric({
|
|
|
38006
38006
|
const Akj = Array(N).fill(bignumber2(0));
|
|
38007
38007
|
const csHij = multiply2(bignumber2(2), c, s, Hij[i][j]);
|
|
38008
38008
|
const Aii = addScalar2(
|
|
38009
|
-
|
|
38009
|
+
subtract3(multiplyScalar2(c2, Hij[i][i]), csHij),
|
|
38010
38010
|
multiplyScalar2(s2, Hij[j][j])
|
|
38011
38011
|
);
|
|
38012
|
-
const Ajj =
|
|
38012
|
+
const Ajj = add3(
|
|
38013
38013
|
multiplyScalar2(s2, Hij[i][i]),
|
|
38014
38014
|
csHij,
|
|
38015
38015
|
multiplyScalar2(c2, Hij[j][j])
|
|
38016
38016
|
);
|
|
38017
38017
|
for (let k = 0; k < N; k++) {
|
|
38018
|
-
Aki[k] =
|
|
38018
|
+
Aki[k] = subtract3(multiplyScalar2(c, Hij[i][k]), multiplyScalar2(s, Hij[j][k]));
|
|
38019
38019
|
Akj[k] = addScalar2(multiplyScalar2(s, Hij[i][k]), multiplyScalar2(c, Hij[j][k]));
|
|
38020
38020
|
}
|
|
38021
38021
|
Hij[i][i] = Aii;
|
|
@@ -38170,7 +38170,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38170
38170
|
typed: typed3,
|
|
38171
38171
|
matrix: matrix2,
|
|
38172
38172
|
addScalar: addScalar2,
|
|
38173
|
-
subtract:
|
|
38173
|
+
subtract: subtract3,
|
|
38174
38174
|
equal: equal2,
|
|
38175
38175
|
abs: abs2,
|
|
38176
38176
|
atan: atan3,
|
|
@@ -38178,10 +38178,10 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38178
38178
|
sin: sin2,
|
|
38179
38179
|
multiplyScalar: multiplyScalar2,
|
|
38180
38180
|
divideScalar: divideScalar2,
|
|
38181
|
-
inv:
|
|
38181
|
+
inv: inv3,
|
|
38182
38182
|
bignumber: bignumber2,
|
|
38183
38183
|
multiply: multiply2,
|
|
38184
|
-
add:
|
|
38184
|
+
add: add3,
|
|
38185
38185
|
larger: larger2,
|
|
38186
38186
|
column: _column,
|
|
38187
38187
|
flatten: flatten4,
|
|
@@ -38198,26 +38198,26 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38198
38198
|
re: re3,
|
|
38199
38199
|
smaller: smaller2,
|
|
38200
38200
|
matrixFromColumns: matrixFromColumns2,
|
|
38201
|
-
dot:
|
|
38201
|
+
dot: dot7
|
|
38202
38202
|
}) => {
|
|
38203
38203
|
const doRealSymmetric = createRealSymmetric({
|
|
38204
38204
|
config: config2,
|
|
38205
38205
|
addScalar: addScalar2,
|
|
38206
|
-
subtract:
|
|
38206
|
+
subtract: subtract3,
|
|
38207
38207
|
abs: abs2,
|
|
38208
38208
|
atan: atan3,
|
|
38209
38209
|
cos: cos2,
|
|
38210
38210
|
sin: sin2,
|
|
38211
38211
|
multiplyScalar: multiplyScalar2,
|
|
38212
|
-
inv:
|
|
38212
|
+
inv: inv3,
|
|
38213
38213
|
bignumber: bignumber2,
|
|
38214
38214
|
complex: complex3,
|
|
38215
38215
|
multiply: multiply2,
|
|
38216
|
-
add:
|
|
38216
|
+
add: add3
|
|
38217
38217
|
});
|
|
38218
38218
|
const doComplexEigs = createComplexEigs({
|
|
38219
38219
|
addScalar: addScalar2,
|
|
38220
|
-
subtract:
|
|
38220
|
+
subtract: subtract3,
|
|
38221
38221
|
multiply: multiply2,
|
|
38222
38222
|
multiplyScalar: multiplyScalar2,
|
|
38223
38223
|
flatten: flatten4,
|
|
@@ -38229,7 +38229,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38229
38229
|
size: size2,
|
|
38230
38230
|
reshape: reshape3,
|
|
38231
38231
|
qr: qr2,
|
|
38232
|
-
inv:
|
|
38232
|
+
inv: inv3,
|
|
38233
38233
|
usolve: usolve2,
|
|
38234
38234
|
usolveAll: usolveAll2,
|
|
38235
38235
|
equal: equal2,
|
|
@@ -38237,7 +38237,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38237
38237
|
larger: larger2,
|
|
38238
38238
|
smaller: smaller2,
|
|
38239
38239
|
matrixFromColumns: matrixFromColumns2,
|
|
38240
|
-
dot:
|
|
38240
|
+
dot: dot7
|
|
38241
38241
|
});
|
|
38242
38242
|
return typed3("eigs", {
|
|
38243
38243
|
// The conversion to matrix in the first two implementations,
|
|
@@ -38318,7 +38318,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38318
38318
|
function isSymmetric(arr10, N, prec) {
|
|
38319
38319
|
for (let i = 0; i < N; i++) {
|
|
38320
38320
|
for (let j = i; j < N; j++) {
|
|
38321
|
-
if (larger2(bignumber2(abs2(
|
|
38321
|
+
if (larger2(bignumber2(abs2(subtract3(arr10[i][j], arr10[j][i]))), prec)) {
|
|
38322
38322
|
return false;
|
|
38323
38323
|
}
|
|
38324
38324
|
}
|
|
@@ -38617,7 +38617,7 @@ var dependencies239 = ["typed", "matrix", "sqrt", "sum", "subtract", "multiply",
|
|
|
38617
38617
|
var createCorr = /* @__PURE__ */ factory(
|
|
38618
38618
|
name239,
|
|
38619
38619
|
dependencies239,
|
|
38620
|
-
({ typed: typed3, matrix: matrix2, sqrt: sqrt2, sum: sum3, subtract:
|
|
38620
|
+
({ typed: typed3, matrix: matrix2, sqrt: sqrt2, sum: sum3, subtract: subtract3, multiply: multiply2, divide: divide2 }) => {
|
|
38621
38621
|
return typed3(name239, {
|
|
38622
38622
|
"Array, Array": function(A, B) {
|
|
38623
38623
|
return _corr(A, B);
|
|
@@ -38669,8 +38669,8 @@ var createCorr = /* @__PURE__ */ factory(
|
|
|
38669
38669
|
}
|
|
38670
38670
|
const meanX = divide2(sum3(A), n);
|
|
38671
38671
|
const meanY = divide2(sum3(B), n);
|
|
38672
|
-
const dX = A.map((x) =>
|
|
38673
|
-
const dY = B.map((y) =>
|
|
38672
|
+
const dX = A.map((x) => subtract3(x, meanX));
|
|
38673
|
+
const dY = B.map((y) => subtract3(y, meanY));
|
|
38674
38674
|
const sxy = sum3(dX.map((dx, i) => multiply2(dx, dY[i])));
|
|
38675
38675
|
const sxx = sum3(dX.map((dx) => multiply2(dx, dx)));
|
|
38676
38676
|
const syy = sum3(dY.map((dy) => multiply2(dy, dy)));
|
|
@@ -38694,7 +38694,7 @@ var dependencies240 = ["typed", "abs", "map", "median", "subtract"];
|
|
|
38694
38694
|
var createMad = /* @__PURE__ */ factory(
|
|
38695
38695
|
name240,
|
|
38696
38696
|
dependencies240,
|
|
38697
|
-
({ typed: typed3, abs: abs2, map: map2, median: median2, subtract:
|
|
38697
|
+
({ typed: typed3, abs: abs2, map: map2, median: median2, subtract: subtract3 }) => {
|
|
38698
38698
|
return typed3(name240, {
|
|
38699
38699
|
// mad([a, b, c, d, ...])
|
|
38700
38700
|
"Array | Matrix": _mad,
|
|
@@ -38725,7 +38725,7 @@ var createMad = /* @__PURE__ */ factory(
|
|
|
38725
38725
|
const med = median2(flat);
|
|
38726
38726
|
return median2(
|
|
38727
38727
|
map2(flat, function(value) {
|
|
38728
|
-
return abs2(
|
|
38728
|
+
return abs2(subtract3(value, med));
|
|
38729
38729
|
})
|
|
38730
38730
|
);
|
|
38731
38731
|
} catch (err) {
|
|
@@ -40239,7 +40239,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40239
40239
|
({
|
|
40240
40240
|
typed: typed3,
|
|
40241
40241
|
abs: abs2,
|
|
40242
|
-
add:
|
|
40242
|
+
add: add3,
|
|
40243
40243
|
pow: pow2,
|
|
40244
40244
|
conj: conj3,
|
|
40245
40245
|
sqrt: sqrt2,
|
|
@@ -40344,7 +40344,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40344
40344
|
if (!equalScalar3(p, 0)) {
|
|
40345
40345
|
let n = 0;
|
|
40346
40346
|
x.forEach(function(value) {
|
|
40347
|
-
n =
|
|
40347
|
+
n = add3(pow2(abs2(value), p), n);
|
|
40348
40348
|
}, true);
|
|
40349
40349
|
return pow2(n, 1 / p);
|
|
40350
40350
|
}
|
|
@@ -40355,7 +40355,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40355
40355
|
function _matrixNormFrobenius(x) {
|
|
40356
40356
|
let fro = 0;
|
|
40357
40357
|
x.forEach(function(value) {
|
|
40358
|
-
fro =
|
|
40358
|
+
fro = add3(fro, multiply2(value, conj3(value)));
|
|
40359
40359
|
});
|
|
40360
40360
|
return abs2(sqrt2(fro));
|
|
40361
40361
|
}
|
|
@@ -40364,7 +40364,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40364
40364
|
let maxc = 0;
|
|
40365
40365
|
x.forEach(function(value, index) {
|
|
40366
40366
|
const j = index[1];
|
|
40367
|
-
const cj =
|
|
40367
|
+
const cj = add3(c[j] || 0, abs2(value));
|
|
40368
40368
|
if (larger2(cj, maxc)) {
|
|
40369
40369
|
maxc = cj;
|
|
40370
40370
|
}
|
|
@@ -40388,7 +40388,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40388
40388
|
let maxr = 0;
|
|
40389
40389
|
x.forEach(function(value, index) {
|
|
40390
40390
|
const i = index[0];
|
|
40391
|
-
const ri =
|
|
40391
|
+
const ri = add3(r[i] || 0, abs2(value));
|
|
40392
40392
|
if (larger2(ri, maxr)) {
|
|
40393
40393
|
maxr = ri;
|
|
40394
40394
|
}
|
|
@@ -41219,11 +41219,11 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41219
41219
|
multiply: multiply2,
|
|
41220
41220
|
range: range2,
|
|
41221
41221
|
concat: concat3,
|
|
41222
|
-
transpose:
|
|
41222
|
+
transpose: transpose5,
|
|
41223
41223
|
index,
|
|
41224
41224
|
subset: subset2,
|
|
41225
|
-
add:
|
|
41226
|
-
subtract:
|
|
41225
|
+
add: add3,
|
|
41226
|
+
subtract: subtract3,
|
|
41227
41227
|
identity: identity2,
|
|
41228
41228
|
lusolve: lusolve2,
|
|
41229
41229
|
abs: abs2
|
|
@@ -41261,7 +41261,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41261
41261
|
const sB = schur2(multiply2(-1, B));
|
|
41262
41262
|
const G = sB.T;
|
|
41263
41263
|
const V = sB.U;
|
|
41264
|
-
const D = multiply2(multiply2(
|
|
41264
|
+
const D = multiply2(multiply2(transpose5(U), C), V);
|
|
41265
41265
|
const all = range2(0, m);
|
|
41266
41266
|
const y = [];
|
|
41267
41267
|
const hc = (a, b) => concat3(a, b, 1);
|
|
@@ -41270,7 +41270,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41270
41270
|
if (k < n - 1 && abs2(subset2(G, index(k + 1, k))) > 1e-5) {
|
|
41271
41271
|
let RHS = vc(subset2(D, index(all, [k])), subset2(D, index(all, [k + 1])));
|
|
41272
41272
|
for (let j = 0; j < k; j++) {
|
|
41273
|
-
RHS =
|
|
41273
|
+
RHS = add3(
|
|
41274
41274
|
RHS,
|
|
41275
41275
|
vc(multiply2(y[j], subset2(G, index(j, k))), multiply2(y[j], subset2(G, index(j, k + 1))))
|
|
41276
41276
|
);
|
|
@@ -41279,7 +41279,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41279
41279
|
const gmk = multiply2(identity2(m), multiply2(-1, subset2(G, index(k + 1, k))));
|
|
41280
41280
|
const gkm = multiply2(identity2(m), multiply2(-1, subset2(G, index(k, k + 1))));
|
|
41281
41281
|
const gmm = multiply2(identity2(m), multiply2(-1, subset2(G, index(k + 1, k + 1))));
|
|
41282
|
-
const LHS = vc(hc(
|
|
41282
|
+
const LHS = vc(hc(add3(F, gkk), gmk), hc(gkm, add3(F, gmm)));
|
|
41283
41283
|
const yAux = lusolve2(LHS, RHS);
|
|
41284
41284
|
y[k] = yAux.subset(index(range2(0, m), [0]));
|
|
41285
41285
|
y[k + 1] = yAux.subset(index(range2(m, 2 * m), [0]));
|
|
@@ -41287,15 +41287,15 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41287
41287
|
} else {
|
|
41288
41288
|
let RHS = subset2(D, index(all, [k]));
|
|
41289
41289
|
for (let j = 0; j < k; j++) {
|
|
41290
|
-
RHS =
|
|
41290
|
+
RHS = add3(RHS, multiply2(y[j], subset2(G, index(j, k))));
|
|
41291
41291
|
}
|
|
41292
41292
|
const gkk = subset2(G, index(k, k));
|
|
41293
|
-
const LHS =
|
|
41293
|
+
const LHS = subtract3(F, multiply2(gkk, identity2(m)));
|
|
41294
41294
|
y[k] = lusolve2(LHS, RHS);
|
|
41295
41295
|
}
|
|
41296
41296
|
}
|
|
41297
41297
|
const Y = matrix2(matrixFromColumns2(...y));
|
|
41298
|
-
const X = multiply2(U, multiply2(Y,
|
|
41298
|
+
const X = multiply2(U, multiply2(Y, transpose5(V)));
|
|
41299
41299
|
return X;
|
|
41300
41300
|
}
|
|
41301
41301
|
}
|
|
@@ -41307,21 +41307,21 @@ var dependencies253 = ["typed", "matrix", "sylvester", "multiply", "transpose"];
|
|
|
41307
41307
|
var createLyap = /* @__PURE__ */ factory(
|
|
41308
41308
|
name253,
|
|
41309
41309
|
dependencies253,
|
|
41310
|
-
({ typed: typed3, matrix: matrix2, sylvester: sylvester2, multiply: multiply2, transpose:
|
|
41310
|
+
({ typed: typed3, matrix: matrix2, sylvester: sylvester2, multiply: multiply2, transpose: transpose5 }) => {
|
|
41311
41311
|
return typed3(name253, {
|
|
41312
41312
|
"Matrix, Matrix": function(A, Q2) {
|
|
41313
|
-
return sylvester2(A,
|
|
41313
|
+
return sylvester2(A, transpose5(A), multiply2(-1, Q2));
|
|
41314
41314
|
},
|
|
41315
41315
|
"Array, Matrix": function(A, Q2) {
|
|
41316
|
-
return sylvester2(matrix2(A),
|
|
41316
|
+
return sylvester2(matrix2(A), transpose5(matrix2(A)), multiply2(-1, Q2));
|
|
41317
41317
|
},
|
|
41318
41318
|
"Matrix, Array": function(A, Q2) {
|
|
41319
|
-
return sylvester2(A,
|
|
41319
|
+
return sylvester2(A, transpose5(A), matrix2(multiply2(-1, Q2)));
|
|
41320
41320
|
},
|
|
41321
41321
|
"Array, Array": function(A, Q2) {
|
|
41322
41322
|
return sylvester2(
|
|
41323
41323
|
matrix2(A),
|
|
41324
|
-
|
|
41324
|
+
transpose5(matrix2(A)),
|
|
41325
41325
|
matrix2(multiply2(-1, Q2))
|
|
41326
41326
|
).toArray();
|
|
41327
41327
|
}
|
|
@@ -43126,8 +43126,8 @@ function polyCoeffsDeg3(expr, varName) {
|
|
|
43126
43126
|
const d2 = f[2] - 2 * f[1] + f[0];
|
|
43127
43127
|
const d3 = f[3] - 3 * f[2] + 3 * f[1] - f[0];
|
|
43128
43128
|
const d4 = f[4] - 4 * f[3] + 6 * f[2] - 4 * f[1] + f[0];
|
|
43129
|
-
const
|
|
43130
|
-
if (Math.abs(d4) > 1e-7 *
|
|
43129
|
+
const scale3 = Math.max(1, ...f.map(Math.abs));
|
|
43130
|
+
if (Math.abs(d4) > 1e-7 * scale3) return null;
|
|
43131
43131
|
const c3 = d3 / 6;
|
|
43132
43132
|
const c2 = d2 / 2 - d3 / 2;
|
|
43133
43133
|
const c1 = d1 - d2 / 2 + d3 / 3;
|
|
@@ -45377,10 +45377,10 @@ function laplacianMatrix(adjacency, opts = {}) {
|
|
|
45377
45377
|
const n = adjacency.length;
|
|
45378
45378
|
const deg = adjacency.map((row2) => row2.reduce((s, v) => s + v, 0));
|
|
45379
45379
|
if (opts.normalized) {
|
|
45380
|
-
const
|
|
45380
|
+
const inv3 = deg.map((d) => d > 0 ? 1 / Math.sqrt(d) : 0);
|
|
45381
45381
|
return Array.from(
|
|
45382
45382
|
{ length: n },
|
|
45383
|
-
(_, i) => Array.from({ length: n }, (_2, j) => (i === j ? 1 : 0) -
|
|
45383
|
+
(_, i) => Array.from({ length: n }, (_2, j) => (i === j ? 1 : 0) - inv3[i] * adjacency[i][j] * inv3[j])
|
|
45384
45384
|
);
|
|
45385
45385
|
}
|
|
45386
45386
|
return Array.from(
|
|
@@ -45613,6 +45613,1096 @@ function fsolve(F, x0, opts = {}) {
|
|
|
45613
45613
|
}
|
|
45614
45614
|
var root = fsolve;
|
|
45615
45615
|
|
|
45616
|
+
// src/numeric/krylov.ts
|
|
45617
|
+
function isDenseMatrix2(a) {
|
|
45618
|
+
return Array.isArray(a);
|
|
45619
|
+
}
|
|
45620
|
+
function toMatvec(a) {
|
|
45621
|
+
if (!isDenseMatrix2(a)) return a;
|
|
45622
|
+
const rows = a;
|
|
45623
|
+
return (x) => {
|
|
45624
|
+
const n = rows.length;
|
|
45625
|
+
const y = new Array(n).fill(0);
|
|
45626
|
+
for (let i = 0; i < n; i++) {
|
|
45627
|
+
const row2 = rows[i];
|
|
45628
|
+
let sum3 = 0;
|
|
45629
|
+
for (let j = 0; j < row2.length; j++) sum3 += row2[j] * x[j];
|
|
45630
|
+
y[i] = sum3;
|
|
45631
|
+
}
|
|
45632
|
+
return y;
|
|
45633
|
+
};
|
|
45634
|
+
}
|
|
45635
|
+
function dot2(a, b) {
|
|
45636
|
+
let s = 0;
|
|
45637
|
+
for (let i = 0; i < a.length; i++) s += a[i] * b[i];
|
|
45638
|
+
return s;
|
|
45639
|
+
}
|
|
45640
|
+
function norm25(a) {
|
|
45641
|
+
return Math.sqrt(dot2(a, a));
|
|
45642
|
+
}
|
|
45643
|
+
function axpy(alpha, x, y) {
|
|
45644
|
+
const n = x.length;
|
|
45645
|
+
const out = new Array(n);
|
|
45646
|
+
for (let i = 0; i < n; i++) out[i] = alpha * x[i] + y[i];
|
|
45647
|
+
return out;
|
|
45648
|
+
}
|
|
45649
|
+
function scale(alpha, x) {
|
|
45650
|
+
return x.map((v) => alpha * v);
|
|
45651
|
+
}
|
|
45652
|
+
function subtract2(a, b) {
|
|
45653
|
+
return a.map((v, i) => v - b[i]);
|
|
45654
|
+
}
|
|
45655
|
+
function add2(a, b) {
|
|
45656
|
+
return a.map((v, i) => v + b[i]);
|
|
45657
|
+
}
|
|
45658
|
+
function zeros2(n) {
|
|
45659
|
+
return new Array(n).fill(0);
|
|
45660
|
+
}
|
|
45661
|
+
function resolvePreconditioner(a, preconditioner) {
|
|
45662
|
+
if (preconditioner === void 0) return (r) => r.slice();
|
|
45663
|
+
if (typeof preconditioner === "function") return preconditioner;
|
|
45664
|
+
if (!isDenseMatrix2(a)) {
|
|
45665
|
+
throw new Error(
|
|
45666
|
+
"krylov: 'jacobi' preconditioner requires a dense matrix (need the diagonal) \u2014 pass a custom preconditioner function when using a matvec operator"
|
|
45667
|
+
);
|
|
45668
|
+
}
|
|
45669
|
+
const n = a.length;
|
|
45670
|
+
const invDiag = new Array(n);
|
|
45671
|
+
for (let i = 0; i < n; i++) {
|
|
45672
|
+
const d = a[i][i];
|
|
45673
|
+
if (d === 0) {
|
|
45674
|
+
throw new Error(
|
|
45675
|
+
`krylov: Jacobi preconditioner requires a nonzero diagonal (A[${i}][${i}] = 0)`
|
|
45676
|
+
);
|
|
45677
|
+
}
|
|
45678
|
+
invDiag[i] = 1 / d;
|
|
45679
|
+
}
|
|
45680
|
+
return (r) => r.map((v, i) => v * invDiag[i]);
|
|
45681
|
+
}
|
|
45682
|
+
function defaultMaxIter(n) {
|
|
45683
|
+
return Math.min(n * 10, 1e3);
|
|
45684
|
+
}
|
|
45685
|
+
function relativeResidualNorm(rNorm, bNorm) {
|
|
45686
|
+
return bNorm > 0 ? rNorm / bNorm : rNorm;
|
|
45687
|
+
}
|
|
45688
|
+
function relativeResidual(matvec2, x, b, bNorm) {
|
|
45689
|
+
return relativeResidualNorm(norm25(subtract2(b, matvec2(x))), bNorm);
|
|
45690
|
+
}
|
|
45691
|
+
function cg(a, b, opts) {
|
|
45692
|
+
const n = b.length;
|
|
45693
|
+
const matvec2 = toMatvec(a);
|
|
45694
|
+
const applyM = resolvePreconditioner(a, opts?.preconditioner);
|
|
45695
|
+
const tol = opts?.tol ?? 1e-10;
|
|
45696
|
+
const maxIter = opts?.maxIter ?? defaultMaxIter(n);
|
|
45697
|
+
const bNorm = norm25(b);
|
|
45698
|
+
let x = opts?.x0 ? opts.x0.slice() : zeros2(n);
|
|
45699
|
+
let r = subtract2(b, matvec2(x));
|
|
45700
|
+
let z = applyM(r);
|
|
45701
|
+
let p = z.slice();
|
|
45702
|
+
let rzOld = dot2(r, z);
|
|
45703
|
+
let residual = relativeResidualNorm(norm25(r), bNorm);
|
|
45704
|
+
if (residual < tol) {
|
|
45705
|
+
return { x, iterations: 0, converged: true, residual };
|
|
45706
|
+
}
|
|
45707
|
+
let iterations = 0;
|
|
45708
|
+
for (let iter = 1; iter <= maxIter; iter++) {
|
|
45709
|
+
iterations = iter;
|
|
45710
|
+
const Ap = matvec2(p);
|
|
45711
|
+
const pAp = dot2(p, Ap);
|
|
45712
|
+
if (Math.abs(pAp) < 1e-300) break;
|
|
45713
|
+
const alpha = rzOld / pAp;
|
|
45714
|
+
x = axpy(alpha, p, x);
|
|
45715
|
+
r = axpy(-alpha, Ap, r);
|
|
45716
|
+
residual = relativeResidualNorm(norm25(r), bNorm);
|
|
45717
|
+
if (residual < tol) {
|
|
45718
|
+
return { x, iterations, converged: true, residual };
|
|
45719
|
+
}
|
|
45720
|
+
z = applyM(r);
|
|
45721
|
+
const rzNew = dot2(r, z);
|
|
45722
|
+
const beta2 = rzNew / rzOld;
|
|
45723
|
+
p = add2(z, scale(beta2, p));
|
|
45724
|
+
rzOld = rzNew;
|
|
45725
|
+
}
|
|
45726
|
+
return { x, iterations, converged: residual < tol, residual };
|
|
45727
|
+
}
|
|
45728
|
+
function minres(a, b, opts) {
|
|
45729
|
+
const n = b.length;
|
|
45730
|
+
const matvec2 = toMatvec(a);
|
|
45731
|
+
const applyM = resolvePreconditioner(a, opts?.preconditioner);
|
|
45732
|
+
const tol = opts?.tol ?? 1e-10;
|
|
45733
|
+
const maxIter = opts?.maxIter ?? defaultMaxIter(n);
|
|
45734
|
+
const bNorm = norm25(b);
|
|
45735
|
+
const x0 = opts?.x0 ? opts.x0.slice() : zeros2(n);
|
|
45736
|
+
const r0 = subtract2(b, matvec2(x0));
|
|
45737
|
+
let residual = relativeResidualNorm(norm25(r0), bNorm);
|
|
45738
|
+
if (residual < tol) {
|
|
45739
|
+
return { x: x0, iterations: 0, converged: true, residual };
|
|
45740
|
+
}
|
|
45741
|
+
const z0 = applyM(r0);
|
|
45742
|
+
const beta1 = Math.sqrt(dot2(r0, z0));
|
|
45743
|
+
if (beta1 < 1e-300) {
|
|
45744
|
+
return { x: x0, iterations: 0, converged: residual < tol, residual };
|
|
45745
|
+
}
|
|
45746
|
+
const V = [zeros2(n), scale(1 / beta1, r0)];
|
|
45747
|
+
const Z = [zeros2(n), scale(1 / beta1, z0)];
|
|
45748
|
+
const alphas = [];
|
|
45749
|
+
const betas = [beta1];
|
|
45750
|
+
let bestX = x0.slice();
|
|
45751
|
+
let bestResidual = residual;
|
|
45752
|
+
let iterations = 0;
|
|
45753
|
+
for (let k = 1; k <= maxIter; k++) {
|
|
45754
|
+
iterations = k;
|
|
45755
|
+
const vK = V[k];
|
|
45756
|
+
const zK = Z[k];
|
|
45757
|
+
const vKm1 = V[k - 1];
|
|
45758
|
+
const betaK = betas[k - 1];
|
|
45759
|
+
let p = matvec2(zK);
|
|
45760
|
+
p = subtract2(p, scale(betaK, vKm1));
|
|
45761
|
+
const alphaK = dot2(p, zK);
|
|
45762
|
+
alphas.push(alphaK);
|
|
45763
|
+
p = subtract2(p, scale(alphaK, vK));
|
|
45764
|
+
const zRaw = applyM(p);
|
|
45765
|
+
const betaNext = Math.sqrt(Math.max(0, dot2(p, zRaw)));
|
|
45766
|
+
const T = Array.from({ length: k + 1 }, () => new Array(k).fill(0));
|
|
45767
|
+
for (let i = 0; i < k; i++) {
|
|
45768
|
+
T[i][i] = alphas[i];
|
|
45769
|
+
if (i + 1 < k) {
|
|
45770
|
+
T[i + 1][i] = betas[i + 1];
|
|
45771
|
+
T[i][i + 1] = betas[i + 1];
|
|
45772
|
+
}
|
|
45773
|
+
}
|
|
45774
|
+
T[k][k - 1] = betaNext;
|
|
45775
|
+
const rhs = new Array(k + 1).fill(0);
|
|
45776
|
+
rhs[0] = beta1;
|
|
45777
|
+
const y = solveLeastSquaresQR(T, rhs);
|
|
45778
|
+
let xCandidate = x0.slice();
|
|
45779
|
+
for (let i = 0; i < k; i++) {
|
|
45780
|
+
xCandidate = axpy(y[i], Z[i + 1], xCandidate);
|
|
45781
|
+
}
|
|
45782
|
+
residual = relativeResidual(matvec2, xCandidate, b, bNorm);
|
|
45783
|
+
if (residual < bestResidual) {
|
|
45784
|
+
bestResidual = residual;
|
|
45785
|
+
bestX = xCandidate;
|
|
45786
|
+
}
|
|
45787
|
+
if (residual < tol) {
|
|
45788
|
+
return { x: xCandidate, iterations: k, converged: true, residual };
|
|
45789
|
+
}
|
|
45790
|
+
if (betaNext < 1e-300) break;
|
|
45791
|
+
betas.push(betaNext);
|
|
45792
|
+
V.push(scale(1 / betaNext, p));
|
|
45793
|
+
Z.push(scale(1 / betaNext, zRaw));
|
|
45794
|
+
}
|
|
45795
|
+
return { x: bestX, iterations, converged: bestResidual < tol, residual: bestResidual };
|
|
45796
|
+
}
|
|
45797
|
+
function solveLeastSquaresQR(T, rhs) {
|
|
45798
|
+
const m = T.length;
|
|
45799
|
+
const n = T[0]?.length ?? 0;
|
|
45800
|
+
const R = T.map((row2) => row2.slice());
|
|
45801
|
+
const c = rhs.slice();
|
|
45802
|
+
for (let k = 0; k < n; k++) {
|
|
45803
|
+
let normX = 0;
|
|
45804
|
+
for (let i = k; i < m; i++) normX += R[i][k] * R[i][k];
|
|
45805
|
+
normX = Math.sqrt(normX);
|
|
45806
|
+
if (normX < 1e-300) continue;
|
|
45807
|
+
const alpha = R[k][k] >= 0 ? -normX : normX;
|
|
45808
|
+
const v = new Array(m).fill(0);
|
|
45809
|
+
v[k] = R[k][k] - alpha;
|
|
45810
|
+
for (let i = k + 1; i < m; i++) v[i] = R[i][k];
|
|
45811
|
+
let vNormSq = 0;
|
|
45812
|
+
for (let i = k; i < m; i++) vNormSq += v[i] * v[i];
|
|
45813
|
+
if (vNormSq < 1e-300) continue;
|
|
45814
|
+
for (let j = k; j < n; j++) {
|
|
45815
|
+
let dotVR = 0;
|
|
45816
|
+
for (let i = k; i < m; i++) dotVR += v[i] * R[i][j];
|
|
45817
|
+
const factor2 = 2 * dotVR / vNormSq;
|
|
45818
|
+
for (let i = k; i < m; i++) R[i][j] -= factor2 * v[i];
|
|
45819
|
+
}
|
|
45820
|
+
let dotVC = 0;
|
|
45821
|
+
for (let i = k; i < m; i++) dotVC += v[i] * c[i];
|
|
45822
|
+
const factorC = 2 * dotVC / vNormSq;
|
|
45823
|
+
for (let i = k; i < m; i++) c[i] -= factorC * v[i];
|
|
45824
|
+
}
|
|
45825
|
+
const y = new Array(n).fill(0);
|
|
45826
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
45827
|
+
let sum3 = c[i];
|
|
45828
|
+
for (let j = i + 1; j < n; j++) sum3 -= R[i][j] * y[j];
|
|
45829
|
+
y[i] = Math.abs(R[i][i]) > 1e-300 ? sum3 / R[i][i] : 0;
|
|
45830
|
+
}
|
|
45831
|
+
return y;
|
|
45832
|
+
}
|
|
45833
|
+
function gmres(a, b, opts) {
|
|
45834
|
+
const n = b.length;
|
|
45835
|
+
const matvec2 = toMatvec(a);
|
|
45836
|
+
const applyM = resolvePreconditioner(a, opts?.preconditioner);
|
|
45837
|
+
const tol = opts?.tol ?? 1e-10;
|
|
45838
|
+
const maxIter = opts?.maxIter ?? defaultMaxIter(n);
|
|
45839
|
+
const restart = Math.max(1, Math.min(opts?.restart ?? 30, n));
|
|
45840
|
+
const bNorm = norm25(b);
|
|
45841
|
+
let x = opts?.x0 ? opts.x0.slice() : zeros2(n);
|
|
45842
|
+
let totalIterations = 0;
|
|
45843
|
+
let residual = relativeResidual(matvec2, x, b, bNorm);
|
|
45844
|
+
if (residual < tol) {
|
|
45845
|
+
return { x, iterations: 0, converged: true, residual };
|
|
45846
|
+
}
|
|
45847
|
+
while (totalIterations < maxIter) {
|
|
45848
|
+
const r0 = applyM(subtract2(b, matvec2(x)));
|
|
45849
|
+
const beta2 = norm25(r0);
|
|
45850
|
+
if (beta2 < 1e-300) {
|
|
45851
|
+
return { x, iterations: totalIterations, converged: residual < tol, residual };
|
|
45852
|
+
}
|
|
45853
|
+
const m = Math.min(restart, maxIter - totalIterations);
|
|
45854
|
+
const V = [scale(1 / beta2, r0)];
|
|
45855
|
+
const H = Array.from({ length: m + 1 }, () => new Array(m).fill(0));
|
|
45856
|
+
const g = new Array(m + 1).fill(0);
|
|
45857
|
+
g[0] = beta2;
|
|
45858
|
+
const cs = new Array(m).fill(0);
|
|
45859
|
+
const sn = new Array(m).fill(0);
|
|
45860
|
+
let k = 0;
|
|
45861
|
+
for (; k < m; k++) {
|
|
45862
|
+
totalIterations++;
|
|
45863
|
+
let w = applyM(matvec2(V[k]));
|
|
45864
|
+
for (let i = 0; i <= k; i++) {
|
|
45865
|
+
H[i][k] = dot2(w, V[i]);
|
|
45866
|
+
w = axpy(-H[i][k], V[i], w);
|
|
45867
|
+
}
|
|
45868
|
+
H[k + 1][k] = norm25(w);
|
|
45869
|
+
V.push(H[k + 1][k] > 1e-300 ? scale(1 / H[k + 1][k], w) : zeros2(n));
|
|
45870
|
+
for (let i = 0; i < k; i++) {
|
|
45871
|
+
const temp2 = cs[i] * H[i][k] + sn[i] * H[i + 1][k];
|
|
45872
|
+
H[i + 1][k] = -sn[i] * H[i][k] + cs[i] * H[i + 1][k];
|
|
45873
|
+
H[i][k] = temp2;
|
|
45874
|
+
}
|
|
45875
|
+
const denom = Math.sqrt(H[k][k] * H[k][k] + H[k + 1][k] * H[k + 1][k]);
|
|
45876
|
+
if (denom < 1e-300) {
|
|
45877
|
+
cs[k] = 1;
|
|
45878
|
+
sn[k] = 0;
|
|
45879
|
+
} else {
|
|
45880
|
+
cs[k] = H[k][k] / denom;
|
|
45881
|
+
sn[k] = H[k + 1][k] / denom;
|
|
45882
|
+
}
|
|
45883
|
+
H[k][k] = cs[k] * H[k][k] + sn[k] * H[k + 1][k];
|
|
45884
|
+
H[k + 1][k] = 0;
|
|
45885
|
+
const temp = cs[k] * g[k] + sn[k] * g[k + 1];
|
|
45886
|
+
g[k + 1] = -sn[k] * g[k] + cs[k] * g[k + 1];
|
|
45887
|
+
g[k] = temp;
|
|
45888
|
+
residual = relativeResidualNorm(Math.abs(g[k + 1]), bNorm);
|
|
45889
|
+
if (residual < tol) {
|
|
45890
|
+
k++;
|
|
45891
|
+
break;
|
|
45892
|
+
}
|
|
45893
|
+
}
|
|
45894
|
+
const y = new Array(k).fill(0);
|
|
45895
|
+
for (let i = k - 1; i >= 0; i--) {
|
|
45896
|
+
let sum3 = g[i];
|
|
45897
|
+
for (let j = i + 1; j < k; j++) sum3 -= H[i][j] * y[j];
|
|
45898
|
+
y[i] = Math.abs(H[i][i]) > 1e-300 ? sum3 / H[i][i] : 0;
|
|
45899
|
+
}
|
|
45900
|
+
for (let i = 0; i < k; i++) {
|
|
45901
|
+
x = axpy(y[i], V[i], x);
|
|
45902
|
+
}
|
|
45903
|
+
residual = relativeResidual(matvec2, x, b, bNorm);
|
|
45904
|
+
if (residual < tol || k < m) {
|
|
45905
|
+
return { x, iterations: totalIterations, converged: residual < tol, residual };
|
|
45906
|
+
}
|
|
45907
|
+
}
|
|
45908
|
+
return { x, iterations: totalIterations, converged: residual < tol, residual };
|
|
45909
|
+
}
|
|
45910
|
+
function bicgstab(a, b, opts) {
|
|
45911
|
+
const n = b.length;
|
|
45912
|
+
const matvec2 = toMatvec(a);
|
|
45913
|
+
const applyM = resolvePreconditioner(a, opts?.preconditioner);
|
|
45914
|
+
const tol = opts?.tol ?? 1e-10;
|
|
45915
|
+
const maxIter = opts?.maxIter ?? defaultMaxIter(n);
|
|
45916
|
+
const bNorm = norm25(b);
|
|
45917
|
+
let x = opts?.x0 ? opts.x0.slice() : zeros2(n);
|
|
45918
|
+
let r = subtract2(b, matvec2(x));
|
|
45919
|
+
const rHat0 = r.slice();
|
|
45920
|
+
let residual = relativeResidualNorm(norm25(r), bNorm);
|
|
45921
|
+
if (residual < tol) {
|
|
45922
|
+
return { x, iterations: 0, converged: true, residual };
|
|
45923
|
+
}
|
|
45924
|
+
let rho = 1;
|
|
45925
|
+
let alpha = 1;
|
|
45926
|
+
let omega = 1;
|
|
45927
|
+
let v = zeros2(n);
|
|
45928
|
+
let p = zeros2(n);
|
|
45929
|
+
let iterations = 0;
|
|
45930
|
+
for (let iter = 1; iter <= maxIter; iter++) {
|
|
45931
|
+
iterations = iter;
|
|
45932
|
+
const rhoNew = dot2(rHat0, r);
|
|
45933
|
+
if (Math.abs(rhoNew) < 1e-300) break;
|
|
45934
|
+
if (iter === 1) {
|
|
45935
|
+
p = r.slice();
|
|
45936
|
+
} else {
|
|
45937
|
+
const beta2 = rhoNew / rho * (alpha / omega);
|
|
45938
|
+
p = add2(r, scale(beta2, subtract2(p, scale(omega, v))));
|
|
45939
|
+
}
|
|
45940
|
+
rho = rhoNew;
|
|
45941
|
+
const pHat = applyM(p);
|
|
45942
|
+
v = matvec2(pHat);
|
|
45943
|
+
const rHatV = dot2(rHat0, v);
|
|
45944
|
+
if (Math.abs(rHatV) < 1e-300) break;
|
|
45945
|
+
alpha = rho / rHatV;
|
|
45946
|
+
const s = axpy(-alpha, v, r);
|
|
45947
|
+
const sNorm = relativeResidualNorm(norm25(s), bNorm);
|
|
45948
|
+
if (sNorm < tol) {
|
|
45949
|
+
x = axpy(alpha, pHat, x);
|
|
45950
|
+
residual = sNorm;
|
|
45951
|
+
return { x, iterations, converged: true, residual };
|
|
45952
|
+
}
|
|
45953
|
+
const sHat = applyM(s);
|
|
45954
|
+
const t = matvec2(sHat);
|
|
45955
|
+
const tt = dot2(t, t);
|
|
45956
|
+
omega = tt > 1e-300 ? dot2(t, s) / tt : 0;
|
|
45957
|
+
x = axpy(alpha, pHat, x);
|
|
45958
|
+
x = axpy(omega, sHat, x);
|
|
45959
|
+
r = axpy(-omega, t, s);
|
|
45960
|
+
residual = relativeResidualNorm(norm25(r), bNorm);
|
|
45961
|
+
if (residual < tol) {
|
|
45962
|
+
return { x, iterations, converged: true, residual };
|
|
45963
|
+
}
|
|
45964
|
+
if (Math.abs(omega) < 1e-300) break;
|
|
45965
|
+
}
|
|
45966
|
+
return { x, iterations, converged: residual < tol, residual };
|
|
45967
|
+
}
|
|
45968
|
+
|
|
45969
|
+
// src/numeric/eigsh.ts
|
|
45970
|
+
function isDenseMatrix3(a) {
|
|
45971
|
+
return Array.isArray(a);
|
|
45972
|
+
}
|
|
45973
|
+
function toMatvecAndSize(a, nOpt) {
|
|
45974
|
+
if (isDenseMatrix3(a)) {
|
|
45975
|
+
const rows = a;
|
|
45976
|
+
const n = rows.length;
|
|
45977
|
+
if (n === 0 || rows.some((row2) => row2.length !== n)) {
|
|
45978
|
+
throw new Error("eigsh: dense matrix input must be square and non-empty");
|
|
45979
|
+
}
|
|
45980
|
+
return {
|
|
45981
|
+
n,
|
|
45982
|
+
matvec: (x) => rows.map((row2) => row2.reduce((s, v, j) => s + v * x[j], 0))
|
|
45983
|
+
};
|
|
45984
|
+
}
|
|
45985
|
+
if (nOpt === void 0) {
|
|
45986
|
+
throw new Error(
|
|
45987
|
+
"eigsh: a matvec operator requires opts.n (the matrix dimension) since it cannot be inferred from a function"
|
|
45988
|
+
);
|
|
45989
|
+
}
|
|
45990
|
+
return { matvec: a, n: nOpt };
|
|
45991
|
+
}
|
|
45992
|
+
function dot3(a, b) {
|
|
45993
|
+
let s = 0;
|
|
45994
|
+
for (let i = 0; i < a.length; i++) s += a[i] * b[i];
|
|
45995
|
+
return s;
|
|
45996
|
+
}
|
|
45997
|
+
function norm26(a) {
|
|
45998
|
+
return Math.sqrt(dot3(a, a));
|
|
45999
|
+
}
|
|
46000
|
+
function axpy2(alpha, x, y) {
|
|
46001
|
+
const out = new Array(x.length);
|
|
46002
|
+
for (let i = 0; i < x.length; i++) out[i] = alpha * x[i] + y[i];
|
|
46003
|
+
return out;
|
|
46004
|
+
}
|
|
46005
|
+
function scale2(alpha, x) {
|
|
46006
|
+
return x.map((v) => alpha * v);
|
|
46007
|
+
}
|
|
46008
|
+
function startVector(n) {
|
|
46009
|
+
const v = new Array(n);
|
|
46010
|
+
for (let i = 0; i < n; i++) v[i] = Math.sin(i + 1);
|
|
46011
|
+
const nrm = norm26(v);
|
|
46012
|
+
return nrm > 1e-300 ? scale2(1 / nrm, v) : v.map((_, i) => i === 0 ? 1 : 0);
|
|
46013
|
+
}
|
|
46014
|
+
function lanczos(matvec2, n, m) {
|
|
46015
|
+
const V = [startVector(n)];
|
|
46016
|
+
const alphas = [];
|
|
46017
|
+
const betas = [];
|
|
46018
|
+
for (let j = 0; j < m; j++) {
|
|
46019
|
+
const vj = V[j];
|
|
46020
|
+
let w = matvec2(vj);
|
|
46021
|
+
if (j > 0) w = axpy2(-betas[j - 1], V[j - 1], w);
|
|
46022
|
+
const alpha = dot3(w, vj);
|
|
46023
|
+
alphas.push(alpha);
|
|
46024
|
+
w = axpy2(-alpha, vj, w);
|
|
46025
|
+
for (let pass = 0; pass < 2; pass++) {
|
|
46026
|
+
for (let i = 0; i <= j; i++) {
|
|
46027
|
+
const c = dot3(w, V[i]);
|
|
46028
|
+
w = axpy2(-c, V[i], w);
|
|
46029
|
+
}
|
|
46030
|
+
}
|
|
46031
|
+
const beta2 = norm26(w);
|
|
46032
|
+
if (j === m - 1 || beta2 < 1e-13) break;
|
|
46033
|
+
betas.push(beta2);
|
|
46034
|
+
V.push(scale2(1 / beta2, w));
|
|
46035
|
+
}
|
|
46036
|
+
return { V, alphas, betas };
|
|
46037
|
+
}
|
|
46038
|
+
function jacobiEigenSymmetric(input, tol) {
|
|
46039
|
+
const n = input.length;
|
|
46040
|
+
const a = input.map((row2) => row2.slice());
|
|
46041
|
+
const v = Array.from(
|
|
46042
|
+
{ length: n },
|
|
46043
|
+
(_, i) => Array.from({ length: n }, (_2, j) => i === j ? 1 : 0)
|
|
46044
|
+
);
|
|
46045
|
+
const maxSweeps = 100;
|
|
46046
|
+
for (let sweep = 0; sweep < maxSweeps; sweep++) {
|
|
46047
|
+
let offDiagSumSq = 0;
|
|
46048
|
+
for (let p = 0; p < n; p++) {
|
|
46049
|
+
for (let q = p + 1; q < n; q++) offDiagSumSq += a[p][q] * a[p][q];
|
|
46050
|
+
}
|
|
46051
|
+
if (offDiagSumSq < tol * tol) break;
|
|
46052
|
+
for (let p = 0; p < n; p++) {
|
|
46053
|
+
for (let q = p + 1; q < n; q++) {
|
|
46054
|
+
const apq = a[p][q];
|
|
46055
|
+
if (Math.abs(apq) < 1e-300) continue;
|
|
46056
|
+
const theta = (a[q][q] - a[p][p]) / (2 * apq);
|
|
46057
|
+
const sign3 = theta === 0 ? 1 : Math.sign(theta);
|
|
46058
|
+
const t = sign3 / (Math.abs(theta) + Math.sqrt(theta * theta + 1));
|
|
46059
|
+
const c = 1 / Math.sqrt(t * t + 1);
|
|
46060
|
+
const s = t * c;
|
|
46061
|
+
const app = a[p][p];
|
|
46062
|
+
const aqq = a[q][q];
|
|
46063
|
+
a[p][p] = c * c * app - 2 * s * c * apq + s * s * aqq;
|
|
46064
|
+
a[q][q] = s * s * app + 2 * s * c * apq + c * c * aqq;
|
|
46065
|
+
a[p][q] = 0;
|
|
46066
|
+
a[q][p] = 0;
|
|
46067
|
+
for (let i = 0; i < n; i++) {
|
|
46068
|
+
if (i === p || i === q) continue;
|
|
46069
|
+
const aip = a[i][p];
|
|
46070
|
+
const aiq = a[i][q];
|
|
46071
|
+
a[i][p] = c * aip - s * aiq;
|
|
46072
|
+
a[p][i] = a[i][p];
|
|
46073
|
+
a[i][q] = s * aip + c * aiq;
|
|
46074
|
+
a[q][i] = a[i][q];
|
|
46075
|
+
}
|
|
46076
|
+
for (let i = 0; i < n; i++) {
|
|
46077
|
+
const vip = v[i][p];
|
|
46078
|
+
const viq = v[i][q];
|
|
46079
|
+
v[i][p] = c * vip - s * viq;
|
|
46080
|
+
v[i][q] = s * vip + c * viq;
|
|
46081
|
+
}
|
|
46082
|
+
}
|
|
46083
|
+
}
|
|
46084
|
+
}
|
|
46085
|
+
const values = new Array(n);
|
|
46086
|
+
for (let i = 0; i < n; i++) values[i] = a[i][i];
|
|
46087
|
+
return { values, vectors: v };
|
|
46088
|
+
}
|
|
46089
|
+
function eigsh(a, k = 1, opts) {
|
|
46090
|
+
const which = opts?.which ?? "LM";
|
|
46091
|
+
const { matvec: matvec2, n } = toMatvecAndSize(a, opts?.n);
|
|
46092
|
+
if (!Number.isInteger(k) || k < 1 || k > n) {
|
|
46093
|
+
throw new Error(`eigsh: k must be an integer between 1 and n (n=${n}), got ${k}`);
|
|
46094
|
+
}
|
|
46095
|
+
const tol = opts?.tol ?? 1e-10;
|
|
46096
|
+
const m = Math.min(opts?.maxIter ?? Math.max(2 * k + 20, 20), n);
|
|
46097
|
+
const { V, alphas, betas } = lanczos(matvec2, n, m);
|
|
46098
|
+
const size2 = alphas.length;
|
|
46099
|
+
if (k > size2) {
|
|
46100
|
+
throw new Error(
|
|
46101
|
+
`eigsh: Lanczos basis collapsed to ${size2} vectors (invariant subspace) before ${k} eigenpairs could be extracted`
|
|
46102
|
+
);
|
|
46103
|
+
}
|
|
46104
|
+
const T = Array.from({ length: size2 }, () => new Array(size2).fill(0));
|
|
46105
|
+
for (let i = 0; i < size2; i++) {
|
|
46106
|
+
T[i][i] = alphas[i];
|
|
46107
|
+
if (i + 1 < size2) {
|
|
46108
|
+
T[i][i + 1] = betas[i];
|
|
46109
|
+
T[i + 1][i] = betas[i];
|
|
46110
|
+
}
|
|
46111
|
+
}
|
|
46112
|
+
const { values, vectors } = jacobiEigenSymmetric(T, tol);
|
|
46113
|
+
const order = values.map((value, index) => ({ value, index })).sort((a1, b1) => which === "LM" ? b1.value - a1.value : a1.value - b1.value);
|
|
46114
|
+
const eigenvalues = order.slice(0, k).map((o) => o.value);
|
|
46115
|
+
const eigenvectors = Array.from({ length: n }, () => new Array(k).fill(0));
|
|
46116
|
+
for (let col = 0; col < k; col++) {
|
|
46117
|
+
const ritzIndex = order[col].index;
|
|
46118
|
+
let full = new Array(n).fill(0);
|
|
46119
|
+
for (let i = 0; i < size2; i++) {
|
|
46120
|
+
full = axpy2(vectors[i][ritzIndex], V[i], full);
|
|
46121
|
+
}
|
|
46122
|
+
const nrm = norm26(full);
|
|
46123
|
+
if (nrm > 1e-300) full = scale2(1 / nrm, full);
|
|
46124
|
+
for (let row2 = 0; row2 < n; row2++) eigenvectors[row2][col] = full[row2];
|
|
46125
|
+
}
|
|
46126
|
+
return { eigenvalues, eigenvectors };
|
|
46127
|
+
}
|
|
46128
|
+
|
|
46129
|
+
// src/numeric/structured-solvers.ts
|
|
46130
|
+
function thomasSolve(sub, diag2, sup, d) {
|
|
46131
|
+
const n = diag2.length;
|
|
46132
|
+
if (n === 0) return [];
|
|
46133
|
+
if (sub.length !== n - 1 || sup.length !== n - 1 || d.length !== n) {
|
|
46134
|
+
throw new Error(
|
|
46135
|
+
`thomasSolve: expected sub/sup of length ${n - 1} and d of length ${n}, got sub=${sub.length}, sup=${sup.length}, d=${d.length}`
|
|
46136
|
+
);
|
|
46137
|
+
}
|
|
46138
|
+
const cp = new Array(n).fill(0);
|
|
46139
|
+
const dp = new Array(n).fill(0);
|
|
46140
|
+
if (diag2[0] === 0) throw new Error("thomasSolve: zero pivot at row 0 (no pivoting is performed)");
|
|
46141
|
+
cp[0] = n > 1 ? sup[0] / diag2[0] : 0;
|
|
46142
|
+
dp[0] = d[0] / diag2[0];
|
|
46143
|
+
for (let i = 1; i < n; i++) {
|
|
46144
|
+
const m = diag2[i] - sub[i - 1] * cp[i - 1];
|
|
46145
|
+
if (m === 0) {
|
|
46146
|
+
throw new Error(`thomasSolve: zero pivot at row ${i} (no pivoting is performed)`);
|
|
46147
|
+
}
|
|
46148
|
+
cp[i] = i < n - 1 ? sup[i] / m : 0;
|
|
46149
|
+
dp[i] = (d[i] - sub[i - 1] * dp[i - 1]) / m;
|
|
46150
|
+
}
|
|
46151
|
+
const x = new Array(n);
|
|
46152
|
+
x[n - 1] = dp[n - 1];
|
|
46153
|
+
for (let i = n - 2; i >= 0; i--) {
|
|
46154
|
+
x[i] = dp[i] - cp[i] * x[i + 1];
|
|
46155
|
+
}
|
|
46156
|
+
return x;
|
|
46157
|
+
}
|
|
46158
|
+
function solveBanded(l, u, A, b) {
|
|
46159
|
+
const n = A.length;
|
|
46160
|
+
if (b.length !== n) {
|
|
46161
|
+
throw new Error(`solveBanded: A is ${n}x? but b has length ${b.length}`);
|
|
46162
|
+
}
|
|
46163
|
+
for (const row2 of A) {
|
|
46164
|
+
if (row2.length !== n) throw new Error("solveBanded: A must be a square dense matrix");
|
|
46165
|
+
}
|
|
46166
|
+
const W = A.map((row2) => row2.slice());
|
|
46167
|
+
const rhs = b.slice();
|
|
46168
|
+
for (let k = 0; k < n - 1; k++) {
|
|
46169
|
+
const pivot = W[k][k];
|
|
46170
|
+
if (pivot === 0)
|
|
46171
|
+
throw new Error(`solveBanded: zero pivot at row ${k} (no pivoting is performed)`);
|
|
46172
|
+
const iMax = Math.min(n - 1, k + l);
|
|
46173
|
+
const jMax = Math.min(n - 1, k + u);
|
|
46174
|
+
for (let i = k + 1; i <= iMax; i++) {
|
|
46175
|
+
const factor2 = W[i][k] / pivot;
|
|
46176
|
+
if (factor2 === 0) continue;
|
|
46177
|
+
for (let j = k; j <= jMax; j++) {
|
|
46178
|
+
W[i][j] -= factor2 * W[k][j];
|
|
46179
|
+
}
|
|
46180
|
+
rhs[i] -= factor2 * rhs[k];
|
|
46181
|
+
}
|
|
46182
|
+
}
|
|
46183
|
+
const x = new Array(n).fill(0);
|
|
46184
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
46185
|
+
let sum3 = rhs[i];
|
|
46186
|
+
const jMax = Math.min(n - 1, i + u);
|
|
46187
|
+
for (let j = i + 1; j <= jMax; j++) {
|
|
46188
|
+
sum3 -= W[i][j] * x[j];
|
|
46189
|
+
}
|
|
46190
|
+
if (W[i][i] === 0)
|
|
46191
|
+
throw new Error(`solveBanded: zero pivot at row ${i} during back-substitution`);
|
|
46192
|
+
x[i] = sum3 / W[i][i];
|
|
46193
|
+
}
|
|
46194
|
+
return x;
|
|
46195
|
+
}
|
|
46196
|
+
function toeplitzSolve(c, r, b) {
|
|
46197
|
+
const n = b.length;
|
|
46198
|
+
if (c.length !== n || r.length !== n) {
|
|
46199
|
+
throw new Error(
|
|
46200
|
+
`toeplitzSolve: expected c and r of length ${n}, got c=${c.length}, r=${r.length}`
|
|
46201
|
+
);
|
|
46202
|
+
}
|
|
46203
|
+
if (Math.abs(c[0] - r[0]) > 1e-12 * (Math.abs(c[0]) + Math.abs(r[0]) + 1)) {
|
|
46204
|
+
throw new Error(`toeplitzSolve: c[0] (${c[0]}) must equal r[0] (${r[0]})`);
|
|
46205
|
+
}
|
|
46206
|
+
const c0 = c[0];
|
|
46207
|
+
if (c0 === 0) throw new Error("toeplitzSolve: zero diagonal (c[0] === 0)");
|
|
46208
|
+
let x = [b[0] / c0];
|
|
46209
|
+
if (n === 1) return x;
|
|
46210
|
+
let f = [c[1] / c0];
|
|
46211
|
+
let fs = [r[1] / c0];
|
|
46212
|
+
for (let m = 1; m < n; m++) {
|
|
46213
|
+
const v = new Array(m);
|
|
46214
|
+
const u = new Array(m);
|
|
46215
|
+
for (let j = 0; j < m; j++) {
|
|
46216
|
+
v[j] = c[m - j];
|
|
46217
|
+
u[j] = r[m - j];
|
|
46218
|
+
}
|
|
46219
|
+
const A = new Array(m);
|
|
46220
|
+
const Astar = new Array(m);
|
|
46221
|
+
for (let i = 0; i < m; i++) {
|
|
46222
|
+
A[i] = fs[m - 1 - i];
|
|
46223
|
+
Astar[i] = f[m - 1 - i];
|
|
46224
|
+
}
|
|
46225
|
+
let vDotA = 0;
|
|
46226
|
+
let vDotX = 0;
|
|
46227
|
+
for (let i = 0; i < m; i++) {
|
|
46228
|
+
vDotA += v[i] * A[i];
|
|
46229
|
+
vDotX += v[i] * x[i];
|
|
46230
|
+
}
|
|
46231
|
+
const delta = c0 - vDotA;
|
|
46232
|
+
if (delta === 0) throw new Error(`toeplitzSolve: breakdown at order ${m + 1} (zero pivot)`);
|
|
46233
|
+
const qx = (b[m] - vDotX) / delta;
|
|
46234
|
+
const xNew = new Array(m + 1);
|
|
46235
|
+
for (let i = 0; i < m; i++) xNew[i] = x[i] - qx * A[i];
|
|
46236
|
+
xNew[m] = qx;
|
|
46237
|
+
x = xNew;
|
|
46238
|
+
if (m + 1 < n) {
|
|
46239
|
+
let vDotF = 0;
|
|
46240
|
+
let uDotFs = 0;
|
|
46241
|
+
for (let i = 0; i < m; i++) {
|
|
46242
|
+
vDotF += v[i] * f[i];
|
|
46243
|
+
uDotFs += u[i] * fs[i];
|
|
46244
|
+
}
|
|
46245
|
+
const qf = (c[m + 1] - vDotF) / delta;
|
|
46246
|
+
const qfs = (r[m + 1] - uDotFs) / delta;
|
|
46247
|
+
const fNew = new Array(m + 1);
|
|
46248
|
+
const fsNew = new Array(m + 1);
|
|
46249
|
+
for (let i = 0; i < m; i++) {
|
|
46250
|
+
fNew[i] = f[i] - qf * A[i];
|
|
46251
|
+
fsNew[i] = fs[i] - qfs * Astar[i];
|
|
46252
|
+
}
|
|
46253
|
+
fNew[m] = qf;
|
|
46254
|
+
fsNew[m] = qfs;
|
|
46255
|
+
f = fNew;
|
|
46256
|
+
fs = fsNew;
|
|
46257
|
+
}
|
|
46258
|
+
}
|
|
46259
|
+
return x;
|
|
46260
|
+
}
|
|
46261
|
+
function ldl(A) {
|
|
46262
|
+
const n = A.length;
|
|
46263
|
+
for (const row2 of A) {
|
|
46264
|
+
if (row2.length !== n) throw new Error("ldl: A must be a square matrix");
|
|
46265
|
+
}
|
|
46266
|
+
const W = A.map((row2) => row2.slice());
|
|
46267
|
+
const L = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
46268
|
+
const D = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
46269
|
+
const perm = Array.from({ length: n }, (_, i) => i);
|
|
46270
|
+
const swap = (a, b) => {
|
|
46271
|
+
if (a === b) return;
|
|
46272
|
+
[perm[a], perm[b]] = [perm[b], perm[a]];
|
|
46273
|
+
[W[a], W[b]] = [W[b], W[a]];
|
|
46274
|
+
for (let i = 0; i < n; i++) [W[i][a], W[i][b]] = [W[i][b], W[i][a]];
|
|
46275
|
+
[L[a], L[b]] = [L[b], L[a]];
|
|
46276
|
+
};
|
|
46277
|
+
const alpha = (1 + Math.sqrt(17)) / 8;
|
|
46278
|
+
let k = 0;
|
|
46279
|
+
while (k < n) {
|
|
46280
|
+
if (k === n - 1) {
|
|
46281
|
+
L[k][k] = 1;
|
|
46282
|
+
D[k][k] = W[k][k];
|
|
46283
|
+
k += 1;
|
|
46284
|
+
continue;
|
|
46285
|
+
}
|
|
46286
|
+
const w1 = Math.abs(W[k][k]);
|
|
46287
|
+
let r = k + 1;
|
|
46288
|
+
let lambda = Math.abs(W[k + 1][k]);
|
|
46289
|
+
for (let i = k + 2; i < n; i++) {
|
|
46290
|
+
const val = Math.abs(W[i][k]);
|
|
46291
|
+
if (val > lambda) {
|
|
46292
|
+
lambda = val;
|
|
46293
|
+
r = i;
|
|
46294
|
+
}
|
|
46295
|
+
}
|
|
46296
|
+
let use1x1 = true;
|
|
46297
|
+
let swapWith = -1;
|
|
46298
|
+
if (lambda !== 0 && w1 < alpha * lambda) {
|
|
46299
|
+
let sigma = 0;
|
|
46300
|
+
for (let i = k; i < n; i++) {
|
|
46301
|
+
if (i !== r) sigma = Math.max(sigma, Math.abs(W[i][r]));
|
|
46302
|
+
}
|
|
46303
|
+
if (w1 * sigma < alpha * lambda * lambda) {
|
|
46304
|
+
if (Math.abs(W[r][r]) >= alpha * sigma) {
|
|
46305
|
+
swapWith = r;
|
|
46306
|
+
} else {
|
|
46307
|
+
use1x1 = false;
|
|
46308
|
+
swapWith = r;
|
|
46309
|
+
}
|
|
46310
|
+
}
|
|
46311
|
+
}
|
|
46312
|
+
if (use1x1) {
|
|
46313
|
+
if (swapWith >= 0) swap(k, swapWith);
|
|
46314
|
+
const d = W[k][k];
|
|
46315
|
+
L[k][k] = 1;
|
|
46316
|
+
D[k][k] = d;
|
|
46317
|
+
if (d === 0) throw new Error(`ldl: singular 1x1 pivot at step ${k}`);
|
|
46318
|
+
for (let i = k + 1; i < n; i++) L[i][k] = W[i][k] / d;
|
|
46319
|
+
for (let i = k + 1; i < n; i++) {
|
|
46320
|
+
for (let j = k + 1; j < n; j++) {
|
|
46321
|
+
W[i][j] -= L[i][k] * d * L[j][k];
|
|
46322
|
+
}
|
|
46323
|
+
}
|
|
46324
|
+
k += 1;
|
|
46325
|
+
} else {
|
|
46326
|
+
swap(k + 1, swapWith);
|
|
46327
|
+
const a = W[k][k];
|
|
46328
|
+
const bVal = W[k][k + 1];
|
|
46329
|
+
const cVal = W[k + 1][k];
|
|
46330
|
+
const dd = W[k + 1][k + 1];
|
|
46331
|
+
const det2 = a * dd - bVal * cVal;
|
|
46332
|
+
if (det2 === 0) throw new Error(`ldl: singular 2x2 pivot at step ${k}`);
|
|
46333
|
+
D[k][k] = a;
|
|
46334
|
+
D[k][k + 1] = bVal;
|
|
46335
|
+
D[k + 1][k] = cVal;
|
|
46336
|
+
D[k + 1][k + 1] = dd;
|
|
46337
|
+
L[k][k] = 1;
|
|
46338
|
+
L[k + 1][k + 1] = 1;
|
|
46339
|
+
for (let i = k + 2; i < n; i++) {
|
|
46340
|
+
const wi0 = W[i][k];
|
|
46341
|
+
const wi1 = W[i][k + 1];
|
|
46342
|
+
L[i][k] = (wi0 * dd - wi1 * cVal) / det2;
|
|
46343
|
+
L[i][k + 1] = (-wi0 * bVal + wi1 * a) / det2;
|
|
46344
|
+
}
|
|
46345
|
+
for (let i = k + 2; i < n; i++) {
|
|
46346
|
+
for (let j = k + 2; j < n; j++) {
|
|
46347
|
+
const upd = L[i][k] * (a * L[j][k] + bVal * L[j][k + 1]) + L[i][k + 1] * (cVal * L[j][k] + dd * L[j][k + 1]);
|
|
46348
|
+
W[i][j] -= upd;
|
|
46349
|
+
}
|
|
46350
|
+
}
|
|
46351
|
+
k += 2;
|
|
46352
|
+
}
|
|
46353
|
+
}
|
|
46354
|
+
return { L, D, perm };
|
|
46355
|
+
}
|
|
46356
|
+
|
|
46357
|
+
// src/numeric/matrix-functions.ts
|
|
46358
|
+
import { eig as eig3 } from "@danielsimonjr/mathts-matrix";
|
|
46359
|
+
function cSub(a, b) {
|
|
46360
|
+
return { re: a.re - b.re, im: a.im - b.im };
|
|
46361
|
+
}
|
|
46362
|
+
function cMul(a, b) {
|
|
46363
|
+
return { re: a.re * b.re - a.im * b.im, im: a.re * b.im + a.im * b.re };
|
|
46364
|
+
}
|
|
46365
|
+
function cDiv(a, b) {
|
|
46366
|
+
const d = b.re * b.re + b.im * b.im;
|
|
46367
|
+
return { re: (a.re * b.re + a.im * b.im) / d, im: (a.im * b.re - a.re * b.im) / d };
|
|
46368
|
+
}
|
|
46369
|
+
function cAbs(a) {
|
|
46370
|
+
return Math.hypot(a.re, a.im);
|
|
46371
|
+
}
|
|
46372
|
+
function cZeros(n) {
|
|
46373
|
+
return {
|
|
46374
|
+
re: Array.from({ length: n }, () => new Array(n).fill(0)),
|
|
46375
|
+
im: Array.from({ length: n }, () => new Array(n).fill(0))
|
|
46376
|
+
};
|
|
46377
|
+
}
|
|
46378
|
+
function cFromReal(A) {
|
|
46379
|
+
const n = A.length;
|
|
46380
|
+
return {
|
|
46381
|
+
re: A.map((row2) => row2.slice()),
|
|
46382
|
+
im: Array.from({ length: n }, () => new Array(n).fill(0))
|
|
46383
|
+
};
|
|
46384
|
+
}
|
|
46385
|
+
function cShiftedReal(A, lambda) {
|
|
46386
|
+
const n = A.length;
|
|
46387
|
+
const re3 = A.map((row2) => row2.slice());
|
|
46388
|
+
const im3 = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
46389
|
+
for (let i = 0; i < n; i++) {
|
|
46390
|
+
re3[i][i] -= lambda.re;
|
|
46391
|
+
im3[i][i] -= lambda.im;
|
|
46392
|
+
}
|
|
46393
|
+
return { re: re3, im: im3 };
|
|
46394
|
+
}
|
|
46395
|
+
function cMatMul(X, Y) {
|
|
46396
|
+
const n = X.re.length;
|
|
46397
|
+
const out = cZeros(n);
|
|
46398
|
+
for (let i = 0; i < n; i++) {
|
|
46399
|
+
for (let k = 0; k < n; k++) {
|
|
46400
|
+
const xr = X.re[i][k];
|
|
46401
|
+
const xi = X.im[i][k];
|
|
46402
|
+
if (xr === 0 && xi === 0) continue;
|
|
46403
|
+
for (let j = 0; j < n; j++) {
|
|
46404
|
+
const yr = Y.re[k][j];
|
|
46405
|
+
const yi = Y.im[k][j];
|
|
46406
|
+
out.re[i][j] += xr * yr - xi * yi;
|
|
46407
|
+
out.im[i][j] += xr * yi + xi * yr;
|
|
46408
|
+
}
|
|
46409
|
+
}
|
|
46410
|
+
}
|
|
46411
|
+
return out;
|
|
46412
|
+
}
|
|
46413
|
+
function cMatScalarDiv(X, s) {
|
|
46414
|
+
const n = X.re.length;
|
|
46415
|
+
const out = cZeros(n);
|
|
46416
|
+
for (let i = 0; i < n; i++) {
|
|
46417
|
+
for (let j = 0; j < n; j++) {
|
|
46418
|
+
const q = cDiv({ re: X.re[i][j], im: X.im[i][j] }, s);
|
|
46419
|
+
out.re[i][j] = q.re;
|
|
46420
|
+
out.im[i][j] = q.im;
|
|
46421
|
+
}
|
|
46422
|
+
}
|
|
46423
|
+
return out;
|
|
46424
|
+
}
|
|
46425
|
+
function cAccumulate(F, s, M) {
|
|
46426
|
+
const n = F.re.length;
|
|
46427
|
+
for (let i = 0; i < n; i++) {
|
|
46428
|
+
for (let j = 0; j < n; j++) {
|
|
46429
|
+
const term = cMul(s, { re: M.re[i][j], im: M.im[i][j] });
|
|
46430
|
+
F.re[i][j] += term.re;
|
|
46431
|
+
F.im[i][j] += term.im;
|
|
46432
|
+
}
|
|
46433
|
+
}
|
|
46434
|
+
}
|
|
46435
|
+
var EIGENVALUE_DISTINCT_REL_TOL = 1e-8;
|
|
46436
|
+
function isDiagonal(A, n) {
|
|
46437
|
+
for (let i = 0; i < n; i++) {
|
|
46438
|
+
for (let j = 0; j < n; j++) {
|
|
46439
|
+
if (i !== j && A[i][j] !== 0) return false;
|
|
46440
|
+
}
|
|
46441
|
+
}
|
|
46442
|
+
return true;
|
|
46443
|
+
}
|
|
46444
|
+
function funm(A, f) {
|
|
46445
|
+
const n = A.length;
|
|
46446
|
+
if (n === 0) return { re: [], im: [] };
|
|
46447
|
+
for (const row2 of A) {
|
|
46448
|
+
if (row2.length !== n) throw new Error(`funm: matrix must be square (got ${n}x${row2.length})`);
|
|
46449
|
+
}
|
|
46450
|
+
if (isDiagonal(A, n)) {
|
|
46451
|
+
const out = cZeros(n);
|
|
46452
|
+
for (let i = 0; i < n; i++) {
|
|
46453
|
+
const fi = f({ re: A[i][i], im: 0 });
|
|
46454
|
+
out.re[i][i] = fi.re;
|
|
46455
|
+
out.im[i][i] = fi.im;
|
|
46456
|
+
}
|
|
46457
|
+
return out;
|
|
46458
|
+
}
|
|
46459
|
+
const { values } = eig3(A, { computeVectors: false });
|
|
46460
|
+
const maxAbs = values.reduce((m, v) => Math.max(m, cAbs(v)), 0);
|
|
46461
|
+
const tol = EIGENVALUE_DISTINCT_REL_TOL * Math.max(1, maxAbs);
|
|
46462
|
+
for (let i = 0; i < n; i++) {
|
|
46463
|
+
for (let j = i + 1; j < n; j++) {
|
|
46464
|
+
if (cAbs(cSub(values[i], values[j])) < tol) {
|
|
46465
|
+
throw new Error(
|
|
46466
|
+
"funm: matrix has repeated (or numerically indistinguishable) eigenvalues and is not diagonal \u2014 defective/non-diagonalizable matrices are not supported (Schur-Parlett block recurrence not yet implemented)"
|
|
46467
|
+
);
|
|
46468
|
+
}
|
|
46469
|
+
}
|
|
46470
|
+
}
|
|
46471
|
+
const F = cZeros(n);
|
|
46472
|
+
for (let i = 0; i < n; i++) {
|
|
46473
|
+
const lambdaI = values[i];
|
|
46474
|
+
let numerator = cFromReal(A);
|
|
46475
|
+
let denom = { re: 1, im: 0 };
|
|
46476
|
+
let first = true;
|
|
46477
|
+
for (let j = 0; j < n; j++) {
|
|
46478
|
+
if (j === i) continue;
|
|
46479
|
+
const factor2 = cShiftedReal(A, values[j]);
|
|
46480
|
+
numerator = first ? factor2 : cMatMul(numerator, factor2);
|
|
46481
|
+
first = false;
|
|
46482
|
+
denom = cMul(denom, cSub(lambdaI, values[j]));
|
|
46483
|
+
}
|
|
46484
|
+
cAccumulate(F, f(lambdaI), cMatScalarDiv(numerator, denom));
|
|
46485
|
+
}
|
|
46486
|
+
return F;
|
|
46487
|
+
}
|
|
46488
|
+
function complexCos(z) {
|
|
46489
|
+
return {
|
|
46490
|
+
re: Math.cos(z.re) * Math.cosh(z.im),
|
|
46491
|
+
im: -Math.sin(z.re) * Math.sinh(z.im)
|
|
46492
|
+
};
|
|
46493
|
+
}
|
|
46494
|
+
function complexSin(z) {
|
|
46495
|
+
return {
|
|
46496
|
+
re: Math.sin(z.re) * Math.cosh(z.im),
|
|
46497
|
+
im: Math.cos(z.re) * Math.sinh(z.im)
|
|
46498
|
+
};
|
|
46499
|
+
}
|
|
46500
|
+
function cosm(A) {
|
|
46501
|
+
return funm(A, complexCos);
|
|
46502
|
+
}
|
|
46503
|
+
function sinm(A) {
|
|
46504
|
+
return funm(A, complexSin);
|
|
46505
|
+
}
|
|
46506
|
+
|
|
46507
|
+
// src/numeric/control-equations.ts
|
|
46508
|
+
function assertSquare2(A, name254) {
|
|
46509
|
+
const n = A.length;
|
|
46510
|
+
if (n === 0) throw new Error(`${name254}: empty matrix`);
|
|
46511
|
+
for (const row2 of A) {
|
|
46512
|
+
if (row2.length !== n)
|
|
46513
|
+
throw new Error(`${name254}: matrix must be square (got ${n}x${row2.length})`);
|
|
46514
|
+
}
|
|
46515
|
+
return n;
|
|
46516
|
+
}
|
|
46517
|
+
function zeros3(rows, cols) {
|
|
46518
|
+
return Array.from({ length: rows }, () => new Array(cols).fill(0));
|
|
46519
|
+
}
|
|
46520
|
+
function eye2(n) {
|
|
46521
|
+
const I2 = zeros3(n, n);
|
|
46522
|
+
for (let i = 0; i < n; i++) I2[i][i] = 1;
|
|
46523
|
+
return I2;
|
|
46524
|
+
}
|
|
46525
|
+
function transpose3(A) {
|
|
46526
|
+
const n = A.length;
|
|
46527
|
+
const m = A[0].length;
|
|
46528
|
+
const T = zeros3(m, n);
|
|
46529
|
+
for (let i = 0; i < n; i++) for (let j = 0; j < m; j++) T[j][i] = A[i][j];
|
|
46530
|
+
return T;
|
|
46531
|
+
}
|
|
46532
|
+
function matmul2(A, B) {
|
|
46533
|
+
const n = A.length;
|
|
46534
|
+
const k = B.length;
|
|
46535
|
+
const m = B[0].length;
|
|
46536
|
+
const C = zeros3(n, m);
|
|
46537
|
+
for (let i = 0; i < n; i++) {
|
|
46538
|
+
for (let p = 0; p < k; p++) {
|
|
46539
|
+
const a = A[i][p];
|
|
46540
|
+
if (a === 0) continue;
|
|
46541
|
+
for (let j = 0; j < m; j++) C[i][j] += a * B[p][j];
|
|
46542
|
+
}
|
|
46543
|
+
}
|
|
46544
|
+
return C;
|
|
46545
|
+
}
|
|
46546
|
+
function matadd(A, B, s = 1) {
|
|
46547
|
+
const n = A.length;
|
|
46548
|
+
const m = A[0].length;
|
|
46549
|
+
const C = zeros3(n, m);
|
|
46550
|
+
for (let i = 0; i < n; i++) for (let j = 0; j < m; j++) C[i][j] = A[i][j] + s * B[i][j];
|
|
46551
|
+
return C;
|
|
46552
|
+
}
|
|
46553
|
+
function matScale(A, s) {
|
|
46554
|
+
return A.map((row2) => row2.map((v) => v * s));
|
|
46555
|
+
}
|
|
46556
|
+
function inv2(A) {
|
|
46557
|
+
const n = A.length;
|
|
46558
|
+
const Inv = zeros3(n, n);
|
|
46559
|
+
for (let j = 0; j < n; j++) {
|
|
46560
|
+
const e = new Array(n).fill(0);
|
|
46561
|
+
e[j] = 1;
|
|
46562
|
+
const col = linsolve(A, e);
|
|
46563
|
+
for (let i = 0; i < n; i++) Inv[i][j] = col[i];
|
|
46564
|
+
}
|
|
46565
|
+
return Inv;
|
|
46566
|
+
}
|
|
46567
|
+
function norm1(A) {
|
|
46568
|
+
const n = A.length;
|
|
46569
|
+
const m = A[0].length;
|
|
46570
|
+
let maxSum = 0;
|
|
46571
|
+
for (let j = 0; j < m; j++) {
|
|
46572
|
+
let s = 0;
|
|
46573
|
+
for (let i = 0; i < n; i++) s += Math.abs(A[i][j]);
|
|
46574
|
+
maxSum = Math.max(maxSum, s);
|
|
46575
|
+
}
|
|
46576
|
+
return maxSum;
|
|
46577
|
+
}
|
|
46578
|
+
function symmetrize(X) {
|
|
46579
|
+
return matScale(matadd(X, transpose3(X)), 0.5);
|
|
46580
|
+
}
|
|
46581
|
+
function maxAbsDiff(A, B) {
|
|
46582
|
+
const n = A.length;
|
|
46583
|
+
const m = A[0].length;
|
|
46584
|
+
let d = 0;
|
|
46585
|
+
for (let i = 0; i < n; i++)
|
|
46586
|
+
for (let j = 0; j < m; j++) d = Math.max(d, Math.abs(A[i][j] - B[i][j]));
|
|
46587
|
+
return d;
|
|
46588
|
+
}
|
|
46589
|
+
function sylvesterOperator(M, N) {
|
|
46590
|
+
const n = M.length;
|
|
46591
|
+
const n26 = n * n;
|
|
46592
|
+
const L = zeros3(n26, n26);
|
|
46593
|
+
for (let i = 0; i < n; i++) {
|
|
46594
|
+
for (let j = 0; j < n; j++) {
|
|
46595
|
+
const row2 = i * n + j;
|
|
46596
|
+
for (let p = 0; p < n; p++) {
|
|
46597
|
+
const mip = M[i][p];
|
|
46598
|
+
if (mip === 0) continue;
|
|
46599
|
+
for (let q = 0; q < n; q++) {
|
|
46600
|
+
L[row2][p * n + q] = mip * N[q][j];
|
|
46601
|
+
}
|
|
46602
|
+
}
|
|
46603
|
+
}
|
|
46604
|
+
}
|
|
46605
|
+
return L;
|
|
46606
|
+
}
|
|
46607
|
+
function vecRowMajor(Q2) {
|
|
46608
|
+
const n = Q2.length;
|
|
46609
|
+
const v = new Array(n * n);
|
|
46610
|
+
for (let i = 0; i < n; i++) for (let j = 0; j < n; j++) v[i * n + j] = Q2[i][j];
|
|
46611
|
+
return v;
|
|
46612
|
+
}
|
|
46613
|
+
function unvecRowMajor(v, n) {
|
|
46614
|
+
const X = zeros3(n, n);
|
|
46615
|
+
for (let i = 0; i < n; i++) for (let j = 0; j < n; j++) X[i][j] = v[i * n + j];
|
|
46616
|
+
return X;
|
|
46617
|
+
}
|
|
46618
|
+
function dlyap(A, Q2) {
|
|
46619
|
+
const n = assertSquare2(A, "dlyap");
|
|
46620
|
+
assertSquare2(Q2, "dlyap");
|
|
46621
|
+
if (Q2.length !== n) throw new Error("dlyap: A and Q must have the same size");
|
|
46622
|
+
const L = sylvesterOperator(A, transpose3(A));
|
|
46623
|
+
const n26 = n * n;
|
|
46624
|
+
const M = zeros3(n26, n26);
|
|
46625
|
+
for (let r = 0; r < n26; r++) {
|
|
46626
|
+
for (let c = 0; c < n26; c++) {
|
|
46627
|
+
M[r][c] = (r === c ? 1 : 0) - L[r][c];
|
|
46628
|
+
}
|
|
46629
|
+
}
|
|
46630
|
+
const vecQ = vecRowMajor(Q2);
|
|
46631
|
+
const vecX = linsolve(M, vecQ);
|
|
46632
|
+
return symmetrize(unvecRowMajor(vecX, n));
|
|
46633
|
+
}
|
|
46634
|
+
var RICCATI_MAX_ITER = 100;
|
|
46635
|
+
var RICCATI_TOL = 1e-13;
|
|
46636
|
+
function care(A, B, Q2, R) {
|
|
46637
|
+
const n = assertSquare2(A, "care");
|
|
46638
|
+
assertSquare2(Q2, "care");
|
|
46639
|
+
if (Q2.length !== n) throw new Error("care: A and Q must have the same size");
|
|
46640
|
+
if (B.length !== n) throw new Error("care: B must have n rows (n = size of A)");
|
|
46641
|
+
const m = B[0]?.length ?? 0;
|
|
46642
|
+
assertSquare2(R, "care");
|
|
46643
|
+
if (R.length !== m) throw new Error("care: R must be m x m (m = number of columns of B)");
|
|
46644
|
+
const Rinv = inv2(R);
|
|
46645
|
+
const G = matmul2(matmul2(B, Rinv), transpose3(B));
|
|
46646
|
+
const At = transpose3(A);
|
|
46647
|
+
const n26 = 2 * n;
|
|
46648
|
+
let Z = zeros3(n26, n26);
|
|
46649
|
+
for (let i = 0; i < n; i++) {
|
|
46650
|
+
for (let j = 0; j < n; j++) {
|
|
46651
|
+
Z[i][j] = A[i][j];
|
|
46652
|
+
Z[i][n + j] = -G[i][j];
|
|
46653
|
+
Z[n + i][j] = -Q2[i][j];
|
|
46654
|
+
Z[n + i][n + j] = -At[i][j];
|
|
46655
|
+
}
|
|
46656
|
+
}
|
|
46657
|
+
for (let iter = 0; iter < RICCATI_MAX_ITER; iter++) {
|
|
46658
|
+
const Zinv = inv2(Z);
|
|
46659
|
+
const c = Math.sqrt(norm1(Zinv) / norm1(Z));
|
|
46660
|
+
const Znew = matScale(matadd(matScale(Z, c), matScale(Zinv, 1 / c)), 0.5);
|
|
46661
|
+
const diff2 = maxAbsDiff(Znew, Z);
|
|
46662
|
+
Z = Znew;
|
|
46663
|
+
if (diff2 < RICCATI_TOL) break;
|
|
46664
|
+
}
|
|
46665
|
+
const S = Z;
|
|
46666
|
+
const P2 = matScale(matadd(eye2(n26), S, -1), 0.5);
|
|
46667
|
+
const U1 = zeros3(n, n);
|
|
46668
|
+
const U2 = zeros3(n, n);
|
|
46669
|
+
for (let i = 0; i < n; i++) {
|
|
46670
|
+
for (let j = 0; j < n; j++) {
|
|
46671
|
+
U1[i][j] = P2[i][j];
|
|
46672
|
+
U2[i][j] = P2[n + i][j];
|
|
46673
|
+
}
|
|
46674
|
+
}
|
|
46675
|
+
const X = matmul2(U2, inv2(U1));
|
|
46676
|
+
return symmetrize(X);
|
|
46677
|
+
}
|
|
46678
|
+
function dare(A, B, Q2, R) {
|
|
46679
|
+
const n = assertSquare2(A, "dare");
|
|
46680
|
+
assertSquare2(Q2, "dare");
|
|
46681
|
+
if (Q2.length !== n) throw new Error("dare: A and Q must have the same size");
|
|
46682
|
+
if (B.length !== n) throw new Error("dare: B must have n rows (n = size of A)");
|
|
46683
|
+
const m = B[0]?.length ?? 0;
|
|
46684
|
+
assertSquare2(R, "dare");
|
|
46685
|
+
if (R.length !== m) throw new Error("dare: R must be m x m (m = number of columns of B)");
|
|
46686
|
+
const Rinv = inv2(R);
|
|
46687
|
+
let Ak = A.map((row2) => row2.slice());
|
|
46688
|
+
let Gk = matmul2(matmul2(B, Rinv), transpose3(B));
|
|
46689
|
+
let Hk = Q2.map((row2) => row2.slice());
|
|
46690
|
+
for (let iter = 0; iter < RICCATI_MAX_ITER; iter++) {
|
|
46691
|
+
const I_GH_inv = inv2(matadd(eye2(n), matmul2(Gk, Hk)));
|
|
46692
|
+
const AkT = transpose3(Ak);
|
|
46693
|
+
const Ak_IGHinv = matmul2(Ak, I_GH_inv);
|
|
46694
|
+
const Anew = matmul2(Ak_IGHinv, Ak);
|
|
46695
|
+
const Gnew = matadd(Gk, matmul2(matmul2(Ak_IGHinv, Gk), AkT));
|
|
46696
|
+
const Hnew = matadd(Hk, matmul2(matmul2(AkT, matmul2(Hk, I_GH_inv)), Ak));
|
|
46697
|
+
const diff2 = maxAbsDiff(Hnew, Hk);
|
|
46698
|
+
Ak = Anew;
|
|
46699
|
+
Gk = Gnew;
|
|
46700
|
+
Hk = Hnew;
|
|
46701
|
+
if (diff2 < RICCATI_TOL) break;
|
|
46702
|
+
}
|
|
46703
|
+
return symmetrize(Hk);
|
|
46704
|
+
}
|
|
46705
|
+
|
|
45616
46706
|
// src/numeric/minimize-scalar.ts
|
|
45617
46707
|
var GOLD = (3 - Math.sqrt(5)) / 2;
|
|
45618
46708
|
var EPS2 = 2220446049250313e-31;
|
|
@@ -45755,7 +46845,7 @@ function acf(x, nlags) {
|
|
|
45755
46845
|
}
|
|
45756
46846
|
|
|
45757
46847
|
// src/ml/ols.ts
|
|
45758
|
-
function
|
|
46848
|
+
function transpose4(m) {
|
|
45759
46849
|
const rows = m.length;
|
|
45760
46850
|
const cols = m[0].length;
|
|
45761
46851
|
const out = Array.from({ length: cols }, () => new Array(rows).fill(0));
|
|
@@ -45766,7 +46856,7 @@ function transpose3(m) {
|
|
|
45766
46856
|
}
|
|
45767
46857
|
return out;
|
|
45768
46858
|
}
|
|
45769
|
-
function
|
|
46859
|
+
function matmul3(a, b) {
|
|
45770
46860
|
const n = a.length;
|
|
45771
46861
|
const k = b.length;
|
|
45772
46862
|
const m = b[0].length;
|
|
@@ -45820,8 +46910,8 @@ function ols(X, y, opts) {
|
|
|
45820
46910
|
const design = useIntercept ? X.map((row2) => [1, ...row2]) : X.map((row2) => [...row2]);
|
|
45821
46911
|
const p = design[0].length;
|
|
45822
46912
|
if (n <= p) throw new Error(`ols: need more observations (${n}) than parameters (${p})`);
|
|
45823
|
-
const Xt =
|
|
45824
|
-
const XtX =
|
|
46913
|
+
const Xt = transpose4(design);
|
|
46914
|
+
const XtX = matmul3(Xt, design);
|
|
45825
46915
|
const Xty = matVec(Xt, y);
|
|
45826
46916
|
const XtXinv = invert(XtX);
|
|
45827
46917
|
const coefficients = matVec(XtXinv, Xty);
|
|
@@ -46019,7 +47109,7 @@ function center(X, y, n, p, useIntercept) {
|
|
|
46019
47109
|
const yc = y.map((v) => v - yMean);
|
|
46020
47110
|
return { Xc, yc, xMean, yMean };
|
|
46021
47111
|
}
|
|
46022
|
-
function
|
|
47112
|
+
function dot4(a, b) {
|
|
46023
47113
|
let s = 0;
|
|
46024
47114
|
for (let i = 0; i < a.length; i++) s += a[i] * b[i];
|
|
46025
47115
|
return s;
|
|
@@ -46047,19 +47137,19 @@ function ridge(X, y, alpha, opts) {
|
|
|
46047
47137
|
for (let i = 0; i < n; i++) Xty[j] += Xc[i][j] * yc[i];
|
|
46048
47138
|
}
|
|
46049
47139
|
const coefficients = linsolve(XtX, Xty);
|
|
46050
|
-
const intercept = useIntercept ? yMean -
|
|
47140
|
+
const intercept = useIntercept ? yMean - dot4(xMean, coefficients) : 0;
|
|
46051
47141
|
return { coefficients, intercept };
|
|
46052
47142
|
}
|
|
46053
47143
|
function standardize(Xc, n, p) {
|
|
46054
|
-
const
|
|
47144
|
+
const scale3 = new Array(p);
|
|
46055
47145
|
for (let j = 0; j < p; j++) {
|
|
46056
47146
|
let ss = 0;
|
|
46057
47147
|
for (let i = 0; i < n; i++) ss += Xc[i][j] * Xc[i][j];
|
|
46058
47148
|
const meanSq = ss / n;
|
|
46059
|
-
|
|
47149
|
+
scale3[j] = meanSq > 1e-15 ? Math.sqrt(meanSq) : 1;
|
|
46060
47150
|
}
|
|
46061
|
-
const Xs = Xc.map((row2) => row2.map((v, j) => v /
|
|
46062
|
-
return { Xs, scale };
|
|
47151
|
+
const Xs = Xc.map((row2) => row2.map((v, j) => v / scale3[j]));
|
|
47152
|
+
return { Xs, scale: scale3 };
|
|
46063
47153
|
}
|
|
46064
47154
|
function coordinateDescent(Xs, yc, n, p, l1, l2, maxIter, tol) {
|
|
46065
47155
|
const beta2 = new Array(p).fill(0);
|
|
@@ -46091,10 +47181,10 @@ function lasso(X, y, alpha, opts) {
|
|
|
46091
47181
|
const maxIter = opts?.maxIter ?? 1e3;
|
|
46092
47182
|
const tol = opts?.tol ?? 1e-7;
|
|
46093
47183
|
const { Xc, yc, xMean, yMean } = center(X, y, n, p, useIntercept);
|
|
46094
|
-
const { Xs, scale } = standardize(Xc, n, p);
|
|
47184
|
+
const { Xs, scale: scale3 } = standardize(Xc, n, p);
|
|
46095
47185
|
const betaStd = coordinateDescent(Xs, yc, n, p, alpha, 0, maxIter, tol);
|
|
46096
|
-
const coefficients = betaStd.map((b, j) => b /
|
|
46097
|
-
const intercept = useIntercept ? yMean -
|
|
47186
|
+
const coefficients = betaStd.map((b, j) => b / scale3[j]);
|
|
47187
|
+
const intercept = useIntercept ? yMean - dot4(xMean, coefficients) : 0;
|
|
46098
47188
|
return { coefficients, intercept };
|
|
46099
47189
|
}
|
|
46100
47190
|
function elasticNet(X, y, alpha, l1Ratio, opts) {
|
|
@@ -46105,12 +47195,12 @@ function elasticNet(X, y, alpha, l1Ratio, opts) {
|
|
|
46105
47195
|
const maxIter = opts?.maxIter ?? 1e3;
|
|
46106
47196
|
const tol = opts?.tol ?? 1e-7;
|
|
46107
47197
|
const { Xc, yc, xMean, yMean } = center(X, y, n, p, useIntercept);
|
|
46108
|
-
const { Xs, scale } = standardize(Xc, n, p);
|
|
47198
|
+
const { Xs, scale: scale3 } = standardize(Xc, n, p);
|
|
46109
47199
|
const l1 = alpha * l1Ratio;
|
|
46110
47200
|
const l2 = alpha * (1 - l1Ratio);
|
|
46111
47201
|
const betaStd = coordinateDescent(Xs, yc, n, p, l1, l2, maxIter, tol);
|
|
46112
|
-
const coefficients = betaStd.map((b, j) => b /
|
|
46113
|
-
const intercept = useIntercept ? yMean -
|
|
47202
|
+
const coefficients = betaStd.map((b, j) => b / scale3[j]);
|
|
47203
|
+
const intercept = useIntercept ? yMean - dot4(xMean, coefficients) : 0;
|
|
46114
47204
|
return { coefficients, intercept };
|
|
46115
47205
|
}
|
|
46116
47206
|
|
|
@@ -46177,8 +47267,8 @@ function logisticRegression(X, y, opts) {
|
|
|
46177
47267
|
let stepNorm = 0;
|
|
46178
47268
|
for (const d of delta) stepNorm = Math.max(stepNorm, Math.abs(d));
|
|
46179
47269
|
if (stepNorm > MAX_STEP_NORM) {
|
|
46180
|
-
const
|
|
46181
|
-
delta = delta.map((d) => d *
|
|
47270
|
+
const scale3 = MAX_STEP_NORM / stepNorm;
|
|
47271
|
+
delta = delta.map((d) => d * scale3);
|
|
46182
47272
|
stepNorm = MAX_STEP_NORM;
|
|
46183
47273
|
}
|
|
46184
47274
|
beta2 = beta2.map((b, j) => b + delta[j]);
|
|
@@ -46216,7 +47306,7 @@ function nelderMead(f, x0, opts = {}) {
|
|
|
46216
47306
|
for (let i = 0; i < n; i++) for (let j = 0; j < n; j++) c[j] += pts[i][j] / n;
|
|
46217
47307
|
return c;
|
|
46218
47308
|
};
|
|
46219
|
-
const
|
|
47309
|
+
const add3 = (a, b, s) => a.map((v, i) => v + s * b[i]);
|
|
46220
47310
|
const sub = (a, b) => a.map((v, i) => v - b[i]);
|
|
46221
47311
|
for (; iter < maxIter; iter++) {
|
|
46222
47312
|
const order = fv.map((_, i) => i).sort((i, j) => fv[i] - fv[j]);
|
|
@@ -46224,10 +47314,10 @@ function nelderMead(f, x0, opts = {}) {
|
|
|
46224
47314
|
fv = order.map((i) => fv[i]);
|
|
46225
47315
|
if (Math.abs(fv[n] - fv[0]) <= tol * (Math.abs(fv[0]) + tol)) break;
|
|
46226
47316
|
const c = centroid2(simplex.slice(0, n));
|
|
46227
|
-
const xr =
|
|
47317
|
+
const xr = add3(c, sub(c, simplex[n]), alpha);
|
|
46228
47318
|
const fr = f(xr);
|
|
46229
47319
|
if (fr < fv[0]) {
|
|
46230
|
-
const xe =
|
|
47320
|
+
const xe = add3(c, sub(c, simplex[n]), gamma2);
|
|
46231
47321
|
const fe = f(xe);
|
|
46232
47322
|
if (fe < fr) {
|
|
46233
47323
|
simplex[n] = xe;
|
|
@@ -46240,14 +47330,14 @@ function nelderMead(f, x0, opts = {}) {
|
|
|
46240
47330
|
simplex[n] = xr;
|
|
46241
47331
|
fv[n] = fr;
|
|
46242
47332
|
} else {
|
|
46243
|
-
const xc =
|
|
47333
|
+
const xc = add3(c, sub(simplex[n], c), rho);
|
|
46244
47334
|
const fc = f(xc);
|
|
46245
47335
|
if (fc < fv[n]) {
|
|
46246
47336
|
simplex[n] = xc;
|
|
46247
47337
|
fv[n] = fc;
|
|
46248
47338
|
} else {
|
|
46249
47339
|
for (let i = 1; i <= n; i++) {
|
|
46250
|
-
simplex[i] =
|
|
47340
|
+
simplex[i] = add3(simplex[0], sub(simplex[i], simplex[0]), sigma);
|
|
46251
47341
|
fv[i] = f(simplex[i]);
|
|
46252
47342
|
}
|
|
46253
47343
|
}
|
|
@@ -46291,7 +47381,7 @@ function levenbergMarquardt(residual, x0, opts = {}) {
|
|
|
46291
47381
|
let x = Array.from(x0);
|
|
46292
47382
|
let lambda = 1e-3;
|
|
46293
47383
|
const h = 1e-7;
|
|
46294
|
-
const
|
|
47384
|
+
const norm27 = (v) => v.reduce((s, c) => s + c * c, 0);
|
|
46295
47385
|
const jacobian2 = (xc, r0) => {
|
|
46296
47386
|
const m = r0.length;
|
|
46297
47387
|
const J = Array.from({ length: m }, () => new Array(n).fill(0));
|
|
@@ -46304,7 +47394,7 @@ function levenbergMarquardt(residual, x0, opts = {}) {
|
|
|
46304
47394
|
return J;
|
|
46305
47395
|
};
|
|
46306
47396
|
let r = residual(x);
|
|
46307
|
-
let cost =
|
|
47397
|
+
let cost = norm27(r);
|
|
46308
47398
|
let iter = 0;
|
|
46309
47399
|
for (; iter < maxIter; iter++) {
|
|
46310
47400
|
const J = jacobian2(x, r);
|
|
@@ -46335,7 +47425,7 @@ function levenbergMarquardt(residual, x0, opts = {}) {
|
|
|
46335
47425
|
}
|
|
46336
47426
|
const xNew = x.map((v, i) => v + delta[i]);
|
|
46337
47427
|
const rNew = residual(xNew);
|
|
46338
|
-
const costNew =
|
|
47428
|
+
const costNew = norm27(rNew);
|
|
46339
47429
|
if (costNew < cost) {
|
|
46340
47430
|
x = xNew;
|
|
46341
47431
|
r = rNew;
|
|
@@ -46685,8 +47775,8 @@ function fitPoisson(data) {
|
|
|
46685
47775
|
for (const k of data) logLikelihood += -lambda + k * Math.log(lambda) - logFactorial(k);
|
|
46686
47776
|
return { params: { lambda }, logLikelihood };
|
|
46687
47777
|
}
|
|
46688
|
-
function gammaLogPdf(x, shape,
|
|
46689
|
-
return (shape - 1) * Math.log(x) - x /
|
|
47778
|
+
function gammaLogPdf(x, shape, scale3) {
|
|
47779
|
+
return (shape - 1) * Math.log(x) - x / scale3 - lgamma(shape) - shape * Math.log(scale3);
|
|
46690
47780
|
}
|
|
46691
47781
|
function fitGamma(data) {
|
|
46692
47782
|
for (const x of data) {
|
|
@@ -46703,10 +47793,10 @@ function fitGamma(data) {
|
|
|
46703
47793
|
const k0 = (3 - s + Math.sqrt((s - 3) * (s - 3) + 24 * s)) / (12 * s);
|
|
46704
47794
|
const f = (k) => Math.log(k) - digamma(k) - s;
|
|
46705
47795
|
const shape = secant(f, k0, k0 * 1.1, { tol: 1e-12, maxIter: 200 });
|
|
46706
|
-
const
|
|
47796
|
+
const scale3 = xbar / shape;
|
|
46707
47797
|
let logLikelihood = 0;
|
|
46708
|
-
for (const x of data) logLikelihood += gammaLogPdf(x, shape,
|
|
46709
|
-
return { params: { shape, scale }, logLikelihood };
|
|
47798
|
+
for (const x of data) logLikelihood += gammaLogPdf(x, shape, scale3);
|
|
47799
|
+
return { params: { shape, scale: scale3 }, logLikelihood };
|
|
46710
47800
|
}
|
|
46711
47801
|
function fitDistribution(name254, data) {
|
|
46712
47802
|
if (data.length === 0) {
|
|
@@ -46754,7 +47844,7 @@ function clipToBounds(x, bounds) {
|
|
|
46754
47844
|
return Math.min(hi, Math.max(lo, v));
|
|
46755
47845
|
});
|
|
46756
47846
|
}
|
|
46757
|
-
function
|
|
47847
|
+
function dot5(a, b) {
|
|
46758
47848
|
let s = 0;
|
|
46759
47849
|
for (let i = 0; i < a.length; i++) s += a[i] * b[i];
|
|
46760
47850
|
return s;
|
|
@@ -46786,9 +47876,9 @@ function bfgs(f, x0, opts = {}) {
|
|
|
46786
47876
|
let converged = infNorm(g) < tol;
|
|
46787
47877
|
while (!converged && iter < maxIter) {
|
|
46788
47878
|
const d = matVec2(H, g).map((v) => -v);
|
|
46789
|
-
const gd =
|
|
47879
|
+
const gd = dot5(g, d);
|
|
46790
47880
|
const dir = gd < 0 ? d : g.map((v) => -v);
|
|
46791
|
-
const dirSlope = gd < 0 ? gd : -
|
|
47881
|
+
const dirSlope = gd < 0 ? gd : -dot5(g, g);
|
|
46792
47882
|
let alpha = 1;
|
|
46793
47883
|
let xNew = clipToBounds(
|
|
46794
47884
|
x.map((v, i) => v + alpha * dir[i]),
|
|
@@ -46808,11 +47898,11 @@ function bfgs(f, x0, opts = {}) {
|
|
|
46808
47898
|
const gNew = gradOf(xNew);
|
|
46809
47899
|
const s = xNew.map((v, i) => v - x[i]);
|
|
46810
47900
|
const y = gNew.map((v, i) => v - g[i]);
|
|
46811
|
-
const sy =
|
|
47901
|
+
const sy = dot5(s, y);
|
|
46812
47902
|
if (sy > 1e-12) {
|
|
46813
47903
|
const rho = 1 / sy;
|
|
46814
47904
|
const Hy = matVec2(H, y);
|
|
46815
|
-
const yHy =
|
|
47905
|
+
const yHy = dot5(y, Hy);
|
|
46816
47906
|
const HNew = Array.from({ length: n }, () => new Array(n).fill(0));
|
|
46817
47907
|
for (let i = 0; i < n; i++) {
|
|
46818
47908
|
for (let j = 0; j < n; j++) {
|
|
@@ -47073,18 +48163,18 @@ function integrateNode(raw, x) {
|
|
|
47073
48163
|
if (fn === "sqrt") return integrateNode(parse2(`(${us})^(0.5)`), x);
|
|
47074
48164
|
const a = linearSlope(us, x);
|
|
47075
48165
|
if (a === null) throw new NotIntegrable(`non-linear argument of ${fn}`);
|
|
47076
|
-
const
|
|
48166
|
+
const inv3 = a === 1 ? "" : ` / ${num(a)}`;
|
|
47077
48167
|
switch (fn) {
|
|
47078
48168
|
case "sin":
|
|
47079
|
-
return `-cos(${us})${
|
|
48169
|
+
return `-cos(${us})${inv3}`;
|
|
47080
48170
|
case "cos":
|
|
47081
|
-
return `sin(${us})${
|
|
48171
|
+
return `sin(${us})${inv3}`;
|
|
47082
48172
|
case "exp":
|
|
47083
|
-
return `exp(${us})${
|
|
48173
|
+
return `exp(${us})${inv3}`;
|
|
47084
48174
|
case "sinh":
|
|
47085
|
-
return `cosh(${us})${
|
|
48175
|
+
return `cosh(${us})${inv3}`;
|
|
47086
48176
|
case "cosh":
|
|
47087
|
-
return `sinh(${us})${
|
|
48177
|
+
return `sinh(${us})${inv3}`;
|
|
47088
48178
|
default:
|
|
47089
48179
|
throw new NotIntegrable(`function ${fn}`);
|
|
47090
48180
|
}
|
|
@@ -47196,17 +48286,17 @@ function filtfilt(b, a, x) {
|
|
|
47196
48286
|
return back.slice(pad, pad + n);
|
|
47197
48287
|
}
|
|
47198
48288
|
var cAdd = (p, q) => p.add(q);
|
|
47199
|
-
var
|
|
47200
|
-
var
|
|
47201
|
-
var
|
|
47202
|
-
var cScale = (p, s) =>
|
|
48289
|
+
var cSub2 = (p, q) => p.sub(q);
|
|
48290
|
+
var cMul2 = (p, q) => p.multiply(q);
|
|
48291
|
+
var cDiv2 = (p, q) => p.divide(q);
|
|
48292
|
+
var cScale = (p, s) => cMul2(p, new Complex11(s, 0));
|
|
47203
48293
|
function polyFromRoots(roots) {
|
|
47204
48294
|
let c = [new Complex11(1, 0)];
|
|
47205
48295
|
for (const r of roots) {
|
|
47206
48296
|
const next = Array.from({ length: c.length + 1 }, () => new Complex11(0, 0));
|
|
47207
48297
|
for (let i = 0; i < c.length; i++) {
|
|
47208
48298
|
next[i] = cAdd(next[i], c[i]);
|
|
47209
|
-
next[i + 1] =
|
|
48299
|
+
next[i + 1] = cSub2(next[i + 1], cMul2(c[i], r));
|
|
47210
48300
|
}
|
|
47211
48301
|
c = next;
|
|
47212
48302
|
}
|
|
@@ -47228,21 +48318,21 @@ function lp2lpZpk(z, p, k, wo) {
|
|
|
47228
48318
|
function lp2hpZpk(z, p, k, wo) {
|
|
47229
48319
|
const degree2 = relativeDegree(z, p);
|
|
47230
48320
|
const woC = new Complex11(wo, 0);
|
|
47231
|
-
const zHp = z.map((zv) =>
|
|
48321
|
+
const zHp = z.map((zv) => cDiv2(woC, zv));
|
|
47232
48322
|
for (let i = 0; i < degree2; i++) zHp.push(new Complex11(0, 0));
|
|
47233
48323
|
let prodZ = new Complex11(1, 0);
|
|
47234
|
-
for (const zv of z) prodZ =
|
|
48324
|
+
for (const zv of z) prodZ = cMul2(prodZ, zv.negate());
|
|
47235
48325
|
let prodP = new Complex11(1, 0);
|
|
47236
|
-
for (const pv of p) prodP =
|
|
47237
|
-
return { z: zHp, p: p.map((pv) =>
|
|
48326
|
+
for (const pv of p) prodP = cMul2(prodP, pv.negate());
|
|
48327
|
+
return { z: zHp, p: p.map((pv) => cDiv2(woC, pv)), k: k * cDiv2(prodZ, prodP).re };
|
|
47238
48328
|
}
|
|
47239
48329
|
function lp2bpZpk(z, p, k, wo, bw) {
|
|
47240
48330
|
const degree2 = relativeDegree(z, p);
|
|
47241
48331
|
const wo2 = new Complex11(wo * wo, 0);
|
|
47242
48332
|
const shift = (roots) => {
|
|
47243
48333
|
const lp = roots.map((r) => cScale(r, bw / 2));
|
|
47244
|
-
const plus = lp.map((r) => cAdd(r,
|
|
47245
|
-
const minus = lp.map((r) =>
|
|
48334
|
+
const plus = lp.map((r) => cAdd(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
48335
|
+
const minus = lp.map((r) => cSub2(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
47246
48336
|
return plus.concat(minus);
|
|
47247
48337
|
};
|
|
47248
48338
|
const zBp = shift(z);
|
|
@@ -47254,33 +48344,33 @@ function lp2bsZpk(z, p, k, wo, bw) {
|
|
|
47254
48344
|
const wo2 = new Complex11(wo * wo, 0);
|
|
47255
48345
|
const bw2 = new Complex11(bw / 2, 0);
|
|
47256
48346
|
const shift = (roots) => {
|
|
47257
|
-
const hp = roots.map((r) =>
|
|
47258
|
-
const plus = hp.map((r) => cAdd(r,
|
|
47259
|
-
const minus = hp.map((r) =>
|
|
48347
|
+
const hp = roots.map((r) => cDiv2(bw2, r));
|
|
48348
|
+
const plus = hp.map((r) => cAdd(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
48349
|
+
const minus = hp.map((r) => cSub2(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
47260
48350
|
return plus.concat(minus);
|
|
47261
48351
|
};
|
|
47262
48352
|
const zBs = shift(z);
|
|
47263
48353
|
for (let i = 0; i < degree2; i++) zBs.push(new Complex11(0, wo));
|
|
47264
48354
|
for (let i = 0; i < degree2; i++) zBs.push(new Complex11(0, -wo));
|
|
47265
48355
|
let prodZ = new Complex11(1, 0);
|
|
47266
|
-
for (const zv of z) prodZ =
|
|
48356
|
+
for (const zv of z) prodZ = cMul2(prodZ, zv.negate());
|
|
47267
48357
|
let prodP = new Complex11(1, 0);
|
|
47268
|
-
for (const pv of p) prodP =
|
|
47269
|
-
return { z: zBs, p: shift(p), k: k *
|
|
48358
|
+
for (const pv of p) prodP = cMul2(prodP, pv.negate());
|
|
48359
|
+
return { z: zBs, p: shift(p), k: k * cDiv2(prodZ, prodP).re };
|
|
47270
48360
|
}
|
|
47271
48361
|
function bilinearZpk(z, p, k, fs) {
|
|
47272
48362
|
const degree2 = relativeDegree(z, p);
|
|
47273
48363
|
const fs2 = new Complex11(2 * fs, 0);
|
|
47274
|
-
const zZ = z.map((zv) =>
|
|
48364
|
+
const zZ = z.map((zv) => cDiv2(cAdd(fs2, zv), cSub2(fs2, zv)));
|
|
47275
48365
|
for (let i = 0; i < degree2; i++) zZ.push(new Complex11(-1, 0));
|
|
47276
48366
|
let prodZ = new Complex11(1, 0);
|
|
47277
|
-
for (const zv of z) prodZ =
|
|
48367
|
+
for (const zv of z) prodZ = cMul2(prodZ, cSub2(fs2, zv));
|
|
47278
48368
|
let prodP = new Complex11(1, 0);
|
|
47279
|
-
for (const pv of p) prodP =
|
|
48369
|
+
for (const pv of p) prodP = cMul2(prodP, cSub2(fs2, pv));
|
|
47280
48370
|
return {
|
|
47281
48371
|
z: zZ,
|
|
47282
|
-
p: p.map((pv) =>
|
|
47283
|
-
k: k *
|
|
48372
|
+
p: p.map((pv) => cDiv2(cAdd(fs2, pv), cSub2(fs2, pv))),
|
|
48373
|
+
k: k * cDiv2(prodZ, prodP).re
|
|
47284
48374
|
};
|
|
47285
48375
|
}
|
|
47286
48376
|
function zpkToTf(z, p, k) {
|
|
@@ -47461,7 +48551,7 @@ function cheb1ap(N, rp) {
|
|
|
47461
48551
|
p.push(new Complex12(-Math.sinh(mu) * Math.cos(theta), -Math.cosh(mu) * Math.sin(theta)));
|
|
47462
48552
|
}
|
|
47463
48553
|
let prod2 = new Complex12(1, 0);
|
|
47464
|
-
for (const pv of p) prod2 =
|
|
48554
|
+
for (const pv of p) prod2 = cMul2(prod2, pv.negate());
|
|
47465
48555
|
let k = prod2.re;
|
|
47466
48556
|
if (N % 2 === 0) k /= Math.sqrt(1 + eps * eps);
|
|
47467
48557
|
return { z: [], p, k };
|
|
@@ -47486,13 +48576,13 @@ function cheb2ap(N, rs) {
|
|
|
47486
48576
|
for (let m = -N + 1; m < N; m += 2) {
|
|
47487
48577
|
const theta = Math.PI * m / (2 * N);
|
|
47488
48578
|
const s = new Complex12(Math.sinh(mu) * Math.cos(theta), Math.cosh(mu) * Math.sin(theta));
|
|
47489
|
-
p.push(
|
|
48579
|
+
p.push(cDiv2(new Complex12(1, 0), s).negate());
|
|
47490
48580
|
}
|
|
47491
48581
|
let prodP = new Complex12(1, 0);
|
|
47492
|
-
for (const pv of p) prodP =
|
|
48582
|
+
for (const pv of p) prodP = cMul2(prodP, pv.negate());
|
|
47493
48583
|
let prodZ = new Complex12(1, 0);
|
|
47494
|
-
for (const zv of z) prodZ =
|
|
47495
|
-
const k =
|
|
48584
|
+
for (const zv of z) prodZ = cMul2(prodZ, zv.negate());
|
|
48585
|
+
const k = cDiv2(prodP, prodZ).re;
|
|
47496
48586
|
return { z, p, k };
|
|
47497
48587
|
}
|
|
47498
48588
|
function cheby2(N, rs, Wn, btype = "low") {
|
|
@@ -47546,7 +48636,7 @@ function arcJacSn(w, m) {
|
|
|
47546
48636
|
for (let i = 0; i < ks.length - 1; i++) {
|
|
47547
48637
|
const knext = ks[i + 1];
|
|
47548
48638
|
const comp = complementComplex(cScale(wn, ks[i]));
|
|
47549
|
-
wn =
|
|
48639
|
+
wn = cDiv2(cScale(wn, 2), cMul2(new Complex12(1 + knext, 0), new Complex12(1, 0).add(comp)));
|
|
47550
48640
|
}
|
|
47551
48641
|
return cScale(cScale(wn.asin(), 2 / Math.PI), K);
|
|
47552
48642
|
}
|
|
@@ -47606,10 +48696,10 @@ function ellipap(N, rp, rs) {
|
|
|
47606
48696
|
pFull = pHalf.concat(pHalf.map((pv) => new Complex12(pv.re, -pv.im)));
|
|
47607
48697
|
}
|
|
47608
48698
|
let prodP = new Complex12(1, 0);
|
|
47609
|
-
for (const pv of pFull) prodP =
|
|
48699
|
+
for (const pv of pFull) prodP = cMul2(prodP, pv.negate());
|
|
47610
48700
|
let prodZ = new Complex12(1, 0);
|
|
47611
|
-
for (const zv of zFull) prodZ =
|
|
47612
|
-
let k =
|
|
48701
|
+
for (const zv of zFull) prodZ = cMul2(prodZ, zv.negate());
|
|
48702
|
+
let k = cDiv2(prodP, prodZ).re;
|
|
47613
48703
|
if (N % 2 === 0) k /= Math.sqrt(1 + epsSq);
|
|
47614
48704
|
return { z: zFull, p: pFull, k };
|
|
47615
48705
|
}
|
|
@@ -48146,23 +49236,23 @@ function waverec(coeffs, wavelet = "haar") {
|
|
|
48146
49236
|
}
|
|
48147
49237
|
return approx;
|
|
48148
49238
|
}
|
|
48149
|
-
function rickerWavelet(points,
|
|
48150
|
-
const amplitude = 2 / (Math.sqrt(3 *
|
|
49239
|
+
function rickerWavelet(points, scale3) {
|
|
49240
|
+
const amplitude = 2 / (Math.sqrt(3 * scale3) * Math.pow(Math.PI, 0.25));
|
|
48151
49241
|
const out = new Array(points);
|
|
48152
49242
|
const center2 = (points - 1) / 2;
|
|
48153
49243
|
for (let i = 0; i < points; i++) {
|
|
48154
|
-
const t = (i - center2) /
|
|
49244
|
+
const t = (i - center2) / scale3;
|
|
48155
49245
|
const t2 = t * t;
|
|
48156
49246
|
out[i] = amplitude * (1 - t2) * Math.exp(-t2 / 2);
|
|
48157
49247
|
}
|
|
48158
49248
|
return out;
|
|
48159
49249
|
}
|
|
48160
|
-
function morletWavelet(points,
|
|
48161
|
-
const norm4 = 1 / (Math.sqrt(
|
|
49250
|
+
function morletWavelet(points, scale3) {
|
|
49251
|
+
const norm4 = 1 / (Math.sqrt(scale3) * Math.pow(Math.PI, 0.25));
|
|
48162
49252
|
const out = new Array(points);
|
|
48163
49253
|
const center2 = (points - 1) / 2;
|
|
48164
49254
|
for (let i = 0; i < points; i++) {
|
|
48165
|
-
const t = (i - center2) /
|
|
49255
|
+
const t = (i - center2) / scale3;
|
|
48166
49256
|
out[i] = norm4 * Math.cos(5 * t) * Math.exp(-(t * t) / 2);
|
|
48167
49257
|
}
|
|
48168
49258
|
return out;
|
|
@@ -48172,10 +49262,10 @@ function cwt(x, scales, wavelet = "ricker") {
|
|
|
48172
49262
|
throw new Error(`cwt: unsupported wavelet "${wavelet}"`);
|
|
48173
49263
|
}
|
|
48174
49264
|
const n = x.length;
|
|
48175
|
-
return scales.map((
|
|
48176
|
-
if (
|
|
48177
|
-
const points = Math.max(1, Math.min(Math.round(10 *
|
|
48178
|
-
const psi = wavelet === "ricker" ? rickerWavelet(points,
|
|
49265
|
+
return scales.map((scale3) => {
|
|
49266
|
+
if (scale3 <= 0) throw new Error("cwt: scales must be positive");
|
|
49267
|
+
const points = Math.max(1, Math.min(Math.round(10 * scale3), n));
|
|
49268
|
+
const psi = wavelet === "ricker" ? rickerWavelet(points, scale3) : morletWavelet(points, scale3);
|
|
48179
49269
|
return convDirect(x, psi, "same");
|
|
48180
49270
|
});
|
|
48181
49271
|
}
|
|
@@ -48293,10 +49383,10 @@ function crossPower(x, y, opts) {
|
|
|
48293
49383
|
im3[k] += X.im * Y.re - X.re * Y.im;
|
|
48294
49384
|
}
|
|
48295
49385
|
}
|
|
48296
|
-
const
|
|
49386
|
+
const scale3 = 1 / (fs * winSum2 * nSeg);
|
|
48297
49387
|
for (let k = 0; k < half; k++) {
|
|
48298
|
-
re3[k] *=
|
|
48299
|
-
im3[k] *=
|
|
49388
|
+
re3[k] *= scale3;
|
|
49389
|
+
im3[k] *= scale3;
|
|
48300
49390
|
}
|
|
48301
49391
|
const frequencies = Array.from({ length: half }, (_, k) => k * fs / nfft);
|
|
48302
49392
|
return { frequencies, re: re3, im: im3 };
|
|
@@ -48386,15 +49476,15 @@ function haversine(lat1, lon1, lat2, lon2, radius = EARTH_RADIUS_KM) {
|
|
|
48386
49476
|
const a = Math.sin(dPhi / 2) ** 2 + Math.cos(phi1) * Math.cos(phi2) * Math.sin(dLambda / 2) ** 2;
|
|
48387
49477
|
return radius * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
48388
49478
|
}
|
|
48389
|
-
var
|
|
48390
|
-
var norm3 = (a) => Math.sqrt(
|
|
49479
|
+
var dot6 = (a, b) => a.reduce((s, v, i) => s + v * b[i], 0);
|
|
49480
|
+
var norm3 = (a) => Math.sqrt(dot6(a, a));
|
|
48391
49481
|
function slerp(v0, v1, t) {
|
|
48392
49482
|
const n0 = norm3(v0);
|
|
48393
49483
|
const n16 = norm3(v1);
|
|
48394
49484
|
if (n0 === 0 || n16 === 0) throw new Error("slerp: input vectors must be non-zero");
|
|
48395
49485
|
const u0 = v0.map((v) => v / n0);
|
|
48396
49486
|
const u1 = v1.map((v) => v / n16);
|
|
48397
|
-
let cos2 =
|
|
49487
|
+
let cos2 = dot6(u0, u1);
|
|
48398
49488
|
cos2 = cos2 > 1 ? 1 : cos2 < -1 ? -1 : cos2;
|
|
48399
49489
|
const omega = Math.acos(cos2);
|
|
48400
49490
|
const mag = n0 + (n16 - n0) * t;
|
|
@@ -48501,22 +49591,22 @@ function noncentralTCDF(t, df, nc) {
|
|
|
48501
49591
|
}
|
|
48502
49592
|
function circularSums(angles, opts) {
|
|
48503
49593
|
const { high = TWO_PI, low = 0 } = opts;
|
|
48504
|
-
const
|
|
49594
|
+
const scale3 = TWO_PI / (high - low);
|
|
48505
49595
|
let sinSum = 0;
|
|
48506
49596
|
let cosSum = 0;
|
|
48507
49597
|
for (const a of angles) {
|
|
48508
|
-
const theta = (a - low) *
|
|
49598
|
+
const theta = (a - low) * scale3;
|
|
48509
49599
|
sinSum += Math.sin(theta);
|
|
48510
49600
|
cosSum += Math.cos(theta);
|
|
48511
49601
|
}
|
|
48512
|
-
return { sinSum, cosSum, scale };
|
|
49602
|
+
return { sinSum, cosSum, scale: scale3 };
|
|
48513
49603
|
}
|
|
48514
49604
|
function circmean(angles, opts = {}) {
|
|
48515
49605
|
const { low = 0 } = opts;
|
|
48516
|
-
const { sinSum, cosSum, scale } = circularSums(angles, opts);
|
|
49606
|
+
const { sinSum, cosSum, scale: scale3 } = circularSums(angles, opts);
|
|
48517
49607
|
let mean7 = Math.atan2(sinSum, cosSum);
|
|
48518
49608
|
if (mean7 < 0) mean7 += TWO_PI;
|
|
48519
|
-
return mean7 /
|
|
49609
|
+
return mean7 / scale3 + low;
|
|
48520
49610
|
}
|
|
48521
49611
|
function circvar(angles, opts = {}) {
|
|
48522
49612
|
const n = angles.length;
|
|
@@ -48788,6 +49878,7 @@ export {
|
|
|
48788
49878
|
betweennessCentrality,
|
|
48789
49879
|
bezierCurve,
|
|
48790
49880
|
bfgs,
|
|
49881
|
+
bicgstab,
|
|
48791
49882
|
bigint,
|
|
48792
49883
|
bignumber,
|
|
48793
49884
|
bilinear,
|
|
@@ -48808,6 +49899,7 @@ export {
|
|
|
48808
49899
|
butter,
|
|
48809
49900
|
buttord,
|
|
48810
49901
|
cancel,
|
|
49902
|
+
care,
|
|
48811
49903
|
carlsonRC,
|
|
48812
49904
|
carlsonRD,
|
|
48813
49905
|
carlsonRF,
|
|
@@ -48824,6 +49916,7 @@ export {
|
|
|
48824
49916
|
cbrt,
|
|
48825
49917
|
ceil,
|
|
48826
49918
|
centroid,
|
|
49919
|
+
cg,
|
|
48827
49920
|
chain,
|
|
48828
49921
|
characteristicPolynomial,
|
|
48829
49922
|
cheby1,
|
|
@@ -48864,7 +49957,9 @@ export {
|
|
|
48864
49957
|
compareUnits,
|
|
48865
49958
|
compileExpr,
|
|
48866
49959
|
complex,
|
|
49960
|
+
complexCos,
|
|
48867
49961
|
complexExpand,
|
|
49962
|
+
complexSin,
|
|
48868
49963
|
composition,
|
|
48869
49964
|
concat2 as concat,
|
|
48870
49965
|
cond,
|
|
@@ -48883,6 +49978,7 @@ export {
|
|
|
48883
49978
|
cos,
|
|
48884
49979
|
cosIntegral,
|
|
48885
49980
|
cosh,
|
|
49981
|
+
cosm,
|
|
48886
49982
|
cot,
|
|
48887
49983
|
coth,
|
|
48888
49984
|
coulomb,
|
|
@@ -48916,6 +50012,7 @@ export {
|
|
|
48916
50012
|
curvefit,
|
|
48917
50013
|
cwt,
|
|
48918
50014
|
dagostinoTest,
|
|
50015
|
+
dare,
|
|
48919
50016
|
dbscan,
|
|
48920
50017
|
dct,
|
|
48921
50018
|
decimate,
|
|
@@ -48949,6 +50046,7 @@ export {
|
|
|
48949
50046
|
divideScalar,
|
|
48950
50047
|
divisorSigma,
|
|
48951
50048
|
divisors,
|
|
50049
|
+
dlyap,
|
|
48952
50050
|
dot,
|
|
48953
50051
|
dot3D,
|
|
48954
50052
|
dotDivide,
|
|
@@ -48961,6 +50059,7 @@ export {
|
|
|
48961
50059
|
efimovFactor,
|
|
48962
50060
|
eigenvectorCentrality,
|
|
48963
50061
|
eigs,
|
|
50062
|
+
eigsh,
|
|
48964
50063
|
elasticNet,
|
|
48965
50064
|
electricConstant,
|
|
48966
50065
|
electronMass,
|
|
@@ -49106,6 +50205,7 @@ export {
|
|
|
49106
50205
|
fsum,
|
|
49107
50206
|
fullSimplify,
|
|
49108
50207
|
functionExpand,
|
|
50208
|
+
funm,
|
|
49109
50209
|
fuseUnaryChain,
|
|
49110
50210
|
fuseUnaryChainAsync,
|
|
49111
50211
|
fuseUnaryChainReduceAsync,
|
|
@@ -49128,6 +50228,7 @@ export {
|
|
|
49128
50228
|
getMatrixDataType,
|
|
49129
50229
|
globalMinimize,
|
|
49130
50230
|
gmean,
|
|
50231
|
+
gmres,
|
|
49131
50232
|
goertzel,
|
|
49132
50233
|
gpuAdd,
|
|
49133
50234
|
gpuMatmul,
|
|
@@ -49245,6 +50346,7 @@ export {
|
|
|
49245
50346
|
largerEq,
|
|
49246
50347
|
lasso,
|
|
49247
50348
|
lcm,
|
|
50349
|
+
ldl,
|
|
49248
50350
|
leafCount,
|
|
49249
50351
|
leastSquares,
|
|
49250
50352
|
leftShift,
|
|
@@ -49323,6 +50425,7 @@ export {
|
|
|
49323
50425
|
minimizeScalar,
|
|
49324
50426
|
minimumSpanningTree,
|
|
49325
50427
|
minkowskiDistance,
|
|
50428
|
+
minres,
|
|
49326
50429
|
mod,
|
|
49327
50430
|
mode,
|
|
49328
50431
|
moebiusMu,
|
|
@@ -49555,6 +50658,7 @@ export {
|
|
|
49555
50658
|
sinIntegral,
|
|
49556
50659
|
singularValues2 as singularValues,
|
|
49557
50660
|
sinh,
|
|
50661
|
+
sinm,
|
|
49558
50662
|
size,
|
|
49559
50663
|
skewness,
|
|
49560
50664
|
slerp,
|
|
@@ -49564,6 +50668,7 @@ export {
|
|
|
49564
50668
|
softmax,
|
|
49565
50669
|
solve,
|
|
49566
50670
|
solveBVP,
|
|
50671
|
+
solveBanded,
|
|
49567
50672
|
solveODE,
|
|
49568
50673
|
solveODESystem,
|
|
49569
50674
|
solvePDE,
|
|
@@ -49616,6 +50721,7 @@ export {
|
|
|
49616
50721
|
terminatePool,
|
|
49617
50722
|
terminateSignal,
|
|
49618
50723
|
terminateStatistics,
|
|
50724
|
+
thomasSolve,
|
|
49619
50725
|
thomsonCrossSection,
|
|
49620
50726
|
to,
|
|
49621
50727
|
toBest,
|
|
@@ -49623,6 +50729,7 @@ export {
|
|
|
49623
50729
|
toRadians,
|
|
49624
50730
|
toRadicals,
|
|
49625
50731
|
toeplitz,
|
|
50732
|
+
toeplitzSolve,
|
|
49626
50733
|
together,
|
|
49627
50734
|
topologicalSort,
|
|
49628
50735
|
trace2 as trace,
|