@pawells/math-extended 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +319 -0
- package/build/angles.d.ts +31 -0
- package/build/angles.d.ts.map +1 -0
- package/build/angles.js +85 -0
- package/build/angles.js.map +1 -0
- package/build/angles.spec.d.ts +2 -0
- package/build/angles.spec.d.ts.map +1 -0
- package/build/angles.spec.js +147 -0
- package/build/angles.spec.js.map +1 -0
- package/build/clamp.d.ts +17 -0
- package/build/clamp.d.ts.map +1 -0
- package/build/clamp.js +19 -0
- package/build/clamp.js.map +1 -0
- package/build/clamp.spec.d.ts +2 -0
- package/build/clamp.spec.d.ts.map +1 -0
- package/build/clamp.spec.js +19 -0
- package/build/clamp.spec.js.map +1 -0
- package/build/documentation-validation.spec.d.ts +11 -0
- package/build/documentation-validation.spec.d.ts.map +1 -0
- package/build/documentation-validation.spec.js +401 -0
- package/build/documentation-validation.spec.js.map +1 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +8 -0
- package/build/index.js.map +1 -0
- package/build/interpolation.d.ts +175 -0
- package/build/interpolation.d.ts.map +1 -0
- package/build/interpolation.js +369 -0
- package/build/interpolation.js.map +1 -0
- package/build/interpolation.spec.d.ts +2 -0
- package/build/interpolation.spec.d.ts.map +1 -0
- package/build/interpolation.spec.js +480 -0
- package/build/interpolation.spec.js.map +1 -0
- package/build/matrices/arithmetic.d.ts +411 -0
- package/build/matrices/arithmetic.d.ts.map +1 -0
- package/build/matrices/arithmetic.js +954 -0
- package/build/matrices/arithmetic.js.map +1 -0
- package/build/matrices/arithmetic.spec.d.ts +2 -0
- package/build/matrices/arithmetic.spec.d.ts.map +1 -0
- package/build/matrices/arithmetic.spec.js +915 -0
- package/build/matrices/arithmetic.spec.js.map +1 -0
- package/build/matrices/asserts.d.ts +306 -0
- package/build/matrices/asserts.d.ts.map +1 -0
- package/build/matrices/asserts.js +396 -0
- package/build/matrices/asserts.js.map +1 -0
- package/build/matrices/asserts.spec.d.ts +2 -0
- package/build/matrices/asserts.spec.d.ts.map +1 -0
- package/build/matrices/asserts.spec.js +565 -0
- package/build/matrices/asserts.spec.js.map +1 -0
- package/build/matrices/core.d.ts +168 -0
- package/build/matrices/core.d.ts.map +1 -0
- package/build/matrices/core.js +457 -0
- package/build/matrices/core.js.map +1 -0
- package/build/matrices/core.spec.d.ts +2 -0
- package/build/matrices/core.spec.d.ts.map +1 -0
- package/build/matrices/core.spec.js +634 -0
- package/build/matrices/core.spec.js.map +1 -0
- package/build/matrices/decompositions.d.ts +326 -0
- package/build/matrices/decompositions.d.ts.map +1 -0
- package/build/matrices/decompositions.js +816 -0
- package/build/matrices/decompositions.js.map +1 -0
- package/build/matrices/decompositions.spec.d.ts +2 -0
- package/build/matrices/decompositions.spec.d.ts.map +1 -0
- package/build/matrices/decompositions.spec.js +195 -0
- package/build/matrices/decompositions.spec.js.map +1 -0
- package/build/matrices/index.d.ts +9 -0
- package/build/matrices/index.d.ts.map +1 -0
- package/build/matrices/index.js +9 -0
- package/build/matrices/index.js.map +1 -0
- package/build/matrices/linear-algebra.d.ts +64 -0
- package/build/matrices/linear-algebra.d.ts.map +1 -0
- package/build/matrices/linear-algebra.js +253 -0
- package/build/matrices/linear-algebra.js.map +1 -0
- package/build/matrices/linear-algebra.spec.d.ts +2 -0
- package/build/matrices/linear-algebra.spec.d.ts.map +1 -0
- package/build/matrices/linear-algebra.spec.js +355 -0
- package/build/matrices/linear-algebra.spec.js.map +1 -0
- package/build/matrices/normalization.d.ts +62 -0
- package/build/matrices/normalization.d.ts.map +1 -0
- package/build/matrices/normalization.js +167 -0
- package/build/matrices/normalization.js.map +1 -0
- package/build/matrices/normalization.spec.d.ts +2 -0
- package/build/matrices/normalization.spec.d.ts.map +1 -0
- package/build/matrices/normalization.spec.js +335 -0
- package/build/matrices/normalization.spec.js.map +1 -0
- package/build/matrices/transformations.d.ts +484 -0
- package/build/matrices/transformations.d.ts.map +1 -0
- package/build/matrices/transformations.js +592 -0
- package/build/matrices/transformations.js.map +1 -0
- package/build/matrices/transformations.spec.d.ts +2 -0
- package/build/matrices/transformations.spec.d.ts.map +1 -0
- package/build/matrices/transformations.spec.js +755 -0
- package/build/matrices/transformations.spec.js.map +1 -0
- package/build/matrices/types.d.ts +134 -0
- package/build/matrices/types.d.ts.map +1 -0
- package/build/matrices/types.js +6 -0
- package/build/matrices/types.js.map +1 -0
- package/build/quaternions/asserts.d.ts +77 -0
- package/build/quaternions/asserts.d.ts.map +1 -0
- package/build/quaternions/asserts.js +175 -0
- package/build/quaternions/asserts.js.map +1 -0
- package/build/quaternions/asserts.spec.d.ts +2 -0
- package/build/quaternions/asserts.spec.d.ts.map +1 -0
- package/build/quaternions/asserts.spec.js +320 -0
- package/build/quaternions/asserts.spec.js.map +1 -0
- package/build/quaternions/conversions.d.ts +73 -0
- package/build/quaternions/conversions.d.ts.map +1 -0
- package/build/quaternions/conversions.js +179 -0
- package/build/quaternions/conversions.js.map +1 -0
- package/build/quaternions/conversions.spec.d.ts +2 -0
- package/build/quaternions/conversions.spec.d.ts.map +1 -0
- package/build/quaternions/conversions.spec.js +344 -0
- package/build/quaternions/conversions.spec.js.map +1 -0
- package/build/quaternions/core.d.ts +203 -0
- package/build/quaternions/core.d.ts.map +1 -0
- package/build/quaternions/core.js +374 -0
- package/build/quaternions/core.js.map +1 -0
- package/build/quaternions/core.spec.d.ts +2 -0
- package/build/quaternions/core.spec.d.ts.map +1 -0
- package/build/quaternions/core.spec.js +294 -0
- package/build/quaternions/core.spec.js.map +1 -0
- package/build/quaternions/index.d.ts +7 -0
- package/build/quaternions/index.d.ts.map +1 -0
- package/build/quaternions/index.js +7 -0
- package/build/quaternions/index.js.map +1 -0
- package/build/quaternions/interpolation.d.ts +54 -0
- package/build/quaternions/interpolation.d.ts.map +1 -0
- package/build/quaternions/interpolation.js +201 -0
- package/build/quaternions/interpolation.js.map +1 -0
- package/build/quaternions/interpolation.spec.d.ts +2 -0
- package/build/quaternions/interpolation.spec.d.ts.map +1 -0
- package/build/quaternions/interpolation.spec.js +64 -0
- package/build/quaternions/interpolation.spec.js.map +1 -0
- package/build/quaternions/predefined.d.ts +36 -0
- package/build/quaternions/predefined.d.ts.map +1 -0
- package/build/quaternions/predefined.js +42 -0
- package/build/quaternions/predefined.js.map +1 -0
- package/build/quaternions/predefined.spec.d.ts +2 -0
- package/build/quaternions/predefined.spec.d.ts.map +1 -0
- package/build/quaternions/predefined.spec.js +35 -0
- package/build/quaternions/predefined.spec.js.map +1 -0
- package/build/quaternions/types.d.ts +55 -0
- package/build/quaternions/types.d.ts.map +1 -0
- package/build/quaternions/types.js +7 -0
- package/build/quaternions/types.js.map +1 -0
- package/build/random.d.ts +66 -0
- package/build/random.d.ts.map +1 -0
- package/build/random.js +115 -0
- package/build/random.js.map +1 -0
- package/build/random.spec.d.ts +2 -0
- package/build/random.spec.d.ts.map +1 -0
- package/build/random.spec.js +267 -0
- package/build/random.spec.js.map +1 -0
- package/build/vectors/asserts.d.ts +182 -0
- package/build/vectors/asserts.d.ts.map +1 -0
- package/build/vectors/asserts.js +285 -0
- package/build/vectors/asserts.js.map +1 -0
- package/build/vectors/asserts.spec.d.ts +2 -0
- package/build/vectors/asserts.spec.d.ts.map +1 -0
- package/build/vectors/asserts.spec.js +260 -0
- package/build/vectors/asserts.spec.js.map +1 -0
- package/build/vectors/core.d.ts +507 -0
- package/build/vectors/core.d.ts.map +1 -0
- package/build/vectors/core.js +825 -0
- package/build/vectors/core.js.map +1 -0
- package/build/vectors/core.spec.d.ts +2 -0
- package/build/vectors/core.spec.d.ts.map +1 -0
- package/build/vectors/core.spec.js +343 -0
- package/build/vectors/core.spec.js.map +1 -0
- package/build/vectors/index.d.ts +6 -0
- package/build/vectors/index.d.ts.map +1 -0
- package/build/vectors/index.js +6 -0
- package/build/vectors/index.js.map +1 -0
- package/build/vectors/interpolation.d.ts +404 -0
- package/build/vectors/interpolation.d.ts.map +1 -0
- package/build/vectors/interpolation.js +585 -0
- package/build/vectors/interpolation.js.map +1 -0
- package/build/vectors/interpolation.spec.d.ts +2 -0
- package/build/vectors/interpolation.spec.d.ts.map +1 -0
- package/build/vectors/interpolation.spec.js +378 -0
- package/build/vectors/interpolation.spec.js.map +1 -0
- package/build/vectors/predefined.d.ts +191 -0
- package/build/vectors/predefined.d.ts.map +1 -0
- package/build/vectors/predefined.js +191 -0
- package/build/vectors/predefined.js.map +1 -0
- package/build/vectors/predefined.spec.d.ts +2 -0
- package/build/vectors/predefined.spec.d.ts.map +1 -0
- package/build/vectors/predefined.spec.js +333 -0
- package/build/vectors/predefined.spec.js.map +1 -0
- package/build/vectors/types.d.ts +62 -0
- package/build/vectors/types.d.ts.map +1 -0
- package/build/vectors/types.js +6 -0
- package/build/vectors/types.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompositions.js","sourceRoot":"","sources":["../../src/matrices/decompositions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompositions.spec.d.ts","sourceRoot":"","sources":["../../src/matrices/decompositions.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { MatrixCholesky, MatrixEigen, MatrixLU, MatrixQR, MatrixSVD } from './decompositions.js';
|
|
2
|
+
describe('Matrix Decompositions', () => {
|
|
3
|
+
describe('MatrixCholesky', () => {
|
|
4
|
+
it('computes Cholesky decomposition for a symmetric positive definite matrix', () => {
|
|
5
|
+
const A = [
|
|
6
|
+
[4, 2],
|
|
7
|
+
[2, 3],
|
|
8
|
+
];
|
|
9
|
+
const L = MatrixCholesky(A);
|
|
10
|
+
expect(L?.[0]?.[0]).toBeCloseTo(2);
|
|
11
|
+
expect(L?.[1]?.[0]).toBeCloseTo(1);
|
|
12
|
+
expect(L?.[1]?.[1]).toBeCloseTo(Math.sqrt(2));
|
|
13
|
+
});
|
|
14
|
+
it('throws for non-positive definite matrix', () => {
|
|
15
|
+
const A = [
|
|
16
|
+
[1, 2],
|
|
17
|
+
[2, 1],
|
|
18
|
+
];
|
|
19
|
+
expect(() => MatrixCholesky(A)).toThrow();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('MatrixCholesky (edge/error cases)', () => {
|
|
23
|
+
it('throws for non-square matrix', () => {
|
|
24
|
+
const A = [[1, 2, 3], [4, 5, 6]];
|
|
25
|
+
expect(() => MatrixCholesky(A)).toThrow();
|
|
26
|
+
});
|
|
27
|
+
it('throws for non-symmetric matrix', () => {
|
|
28
|
+
const A = [[1, 2], [3, 4]];
|
|
29
|
+
expect(() => MatrixCholesky(A)).toThrow();
|
|
30
|
+
});
|
|
31
|
+
it('throws for empty matrix', () => {
|
|
32
|
+
expect(() => MatrixCholesky([])).toThrow();
|
|
33
|
+
});
|
|
34
|
+
it('throws for non-array input', () => {
|
|
35
|
+
expect(() => MatrixCholesky(null)).toThrow();
|
|
36
|
+
expect(() => MatrixCholesky(123)).toThrow();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('MatrixEigen', () => {
|
|
40
|
+
it('computes eigenvalues and eigenvectors for a 2x2 matrix', () => {
|
|
41
|
+
const A = [
|
|
42
|
+
[3, 1],
|
|
43
|
+
[0, 2],
|
|
44
|
+
];
|
|
45
|
+
const { eigenvalues, eigenvectors } = MatrixEigen(A);
|
|
46
|
+
expect(eigenvalues).toEqual([3, 2]);
|
|
47
|
+
// Eigenvectors: columns, up to sign
|
|
48
|
+
// For eigenvalue 3, eigenvector should be [1, 0] (ratio is Infinity)
|
|
49
|
+
expect(eigenvectors?.[0]?.[0]).toBeCloseTo(1);
|
|
50
|
+
expect(eigenvectors?.[1]?.[0]).toBeCloseTo(0);
|
|
51
|
+
// For eigenvalue 2, eigenvector should be [1, 1] or [1, -1] (ratio is ±1)
|
|
52
|
+
const ratio = (eigenvectors?.[0]?.[1] ?? 0) / (eigenvectors?.[1]?.[1] ?? 1);
|
|
53
|
+
expect(Math.abs(ratio)).toBeCloseTo(1);
|
|
54
|
+
});
|
|
55
|
+
it('returns correct result for 1x1 matrix', () => {
|
|
56
|
+
const A = [[5]];
|
|
57
|
+
const { eigenvalues, eigenvectors } = MatrixEigen(A);
|
|
58
|
+
expect(eigenvalues).toEqual([5]);
|
|
59
|
+
expect(eigenvectors).toEqual([[1]]);
|
|
60
|
+
});
|
|
61
|
+
it('throws for complex eigenvalues', () => {
|
|
62
|
+
const A = [
|
|
63
|
+
[0, -1],
|
|
64
|
+
[1, 0],
|
|
65
|
+
];
|
|
66
|
+
expect(() => MatrixEigen(A)).toThrow();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('MatrixEigen (edge/error cases)', () => {
|
|
70
|
+
it('throws for non-square matrix', () => {
|
|
71
|
+
const A = [[1, 2, 3], [4, 5, 6]];
|
|
72
|
+
expect(() => MatrixEigen(A)).toThrow();
|
|
73
|
+
});
|
|
74
|
+
it('throws for empty matrix', () => {
|
|
75
|
+
expect(() => MatrixEigen([])).toThrow();
|
|
76
|
+
});
|
|
77
|
+
it('throws for non-array input', () => {
|
|
78
|
+
expect(() => MatrixEigen(undefined)).toThrow();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('MatrixLU', () => {
|
|
82
|
+
it('computes LU decomposition for a 2x2 matrix', () => {
|
|
83
|
+
const A = [
|
|
84
|
+
[2, 1],
|
|
85
|
+
[1, 1],
|
|
86
|
+
];
|
|
87
|
+
const { L, U } = MatrixLU(A);
|
|
88
|
+
expect(L?.[0]?.[0]).toBeCloseTo(1);
|
|
89
|
+
expect(L?.[1]?.[0]).toBeCloseTo(0.5);
|
|
90
|
+
expect(L?.[1]?.[1]).toBeCloseTo(1);
|
|
91
|
+
expect(U?.[0]?.[0]).toBeCloseTo(2);
|
|
92
|
+
expect(U?.[0]?.[1]).toBeCloseTo(1);
|
|
93
|
+
expect(U?.[1]?.[1]).toBeCloseTo(0.5);
|
|
94
|
+
});
|
|
95
|
+
it('throws for singular matrix', () => {
|
|
96
|
+
const A = [
|
|
97
|
+
[1, 2],
|
|
98
|
+
[2, 4],
|
|
99
|
+
];
|
|
100
|
+
expect(() => MatrixLU(A)).toThrow();
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('MatrixLU (edge/error cases)', () => {
|
|
104
|
+
it('throws for non-square matrix', () => {
|
|
105
|
+
const A = [[1, 2, 3], [4, 5, 6]];
|
|
106
|
+
expect(() => MatrixLU(A)).toThrow();
|
|
107
|
+
});
|
|
108
|
+
it('throws for empty matrix', () => {
|
|
109
|
+
expect(() => MatrixLU([])).toThrow();
|
|
110
|
+
});
|
|
111
|
+
it('throws for non-array input', () => {
|
|
112
|
+
expect(() => MatrixLU(undefined)).toThrow();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('MatrixQR', () => {
|
|
116
|
+
it('computes QR decomposition for a 2x2 matrix', () => {
|
|
117
|
+
const A = [
|
|
118
|
+
[1, 1],
|
|
119
|
+
[1, 0],
|
|
120
|
+
];
|
|
121
|
+
const { Q, R } = MatrixQR(A);
|
|
122
|
+
// Q should be orthogonal: Q^T Q = I
|
|
123
|
+
const QTQ00 = ((Q?.[0]?.[0] ?? 0) * (Q?.[0]?.[0] ?? 0)) + ((Q?.[1]?.[0] ?? 0) * (Q?.[1]?.[0] ?? 0));
|
|
124
|
+
const QTQ01 = ((Q?.[0]?.[0] ?? 0) * (Q?.[0]?.[1] ?? 0)) + ((Q?.[1]?.[0] ?? 0) * (Q?.[1]?.[1] ?? 0));
|
|
125
|
+
const QTQ10 = ((Q?.[0]?.[1] ?? 0) * (Q?.[0]?.[0] ?? 0)) + ((Q?.[1]?.[1] ?? 0) * (Q?.[1]?.[0] ?? 0));
|
|
126
|
+
const QTQ11 = ((Q?.[0]?.[1] ?? 0) * (Q?.[0]?.[1] ?? 0)) + ((Q?.[1]?.[1] ?? 0) * (Q?.[1]?.[1] ?? 0));
|
|
127
|
+
expect(QTQ00).toBeCloseTo(1);
|
|
128
|
+
expect(QTQ11).toBeCloseTo(1);
|
|
129
|
+
expect(QTQ01).toBeCloseTo(0);
|
|
130
|
+
expect(QTQ10).toBeCloseTo(0);
|
|
131
|
+
// R should be upper triangular
|
|
132
|
+
expect(R?.[1]?.[0]).toBeCloseTo(0);
|
|
133
|
+
});
|
|
134
|
+
it('throws for more columns than rows', () => {
|
|
135
|
+
const A = [
|
|
136
|
+
[1, 2, 3],
|
|
137
|
+
[4, 5, 6],
|
|
138
|
+
];
|
|
139
|
+
expect(() => MatrixQR(A)).toThrow();
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('MatrixQR (edge/error cases)', () => {
|
|
143
|
+
it('throws for empty matrix', () => {
|
|
144
|
+
expect(() => MatrixQR([])).toThrow();
|
|
145
|
+
});
|
|
146
|
+
it('throws for non-array input', () => {
|
|
147
|
+
expect(() => MatrixQR(undefined)).toThrow();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('MatrixSVD', () => {
|
|
151
|
+
it('computes SVD for a 2x2 matrix', () => {
|
|
152
|
+
const A = [
|
|
153
|
+
[1, 0],
|
|
154
|
+
[0, 2],
|
|
155
|
+
];
|
|
156
|
+
const { U, S, VT } = MatrixSVD(A);
|
|
157
|
+
expect(S?.[0] ?? 0).toBeGreaterThanOrEqual(S?.[1] ?? 0);
|
|
158
|
+
// U and VT should be orthogonal
|
|
159
|
+
const UUT = ((U?.[0]?.[0] ?? 0) * (U?.[0]?.[0] ?? 0)) + ((U?.[1]?.[0] ?? 0) * (U?.[1]?.[0] ?? 0));
|
|
160
|
+
expect(UUT).toBeCloseTo(1);
|
|
161
|
+
const VTV = ((VT?.[0]?.[0] ?? 0) * (VT?.[0]?.[0] ?? 0)) + ((VT?.[1]?.[0] ?? 0) * (VT?.[1]?.[0] ?? 0));
|
|
162
|
+
expect(VTV).toBeCloseTo(1);
|
|
163
|
+
});
|
|
164
|
+
it('computes SVD for a 1x1 matrix', () => {
|
|
165
|
+
const A = [[-3]];
|
|
166
|
+
const { U, S, VT } = MatrixSVD(A);
|
|
167
|
+
expect(S?.[0]).toBeCloseTo(3);
|
|
168
|
+
expect(U?.[0]?.[0]).toBeCloseTo(1);
|
|
169
|
+
expect(VT?.[0]?.[0]).toBeCloseTo(-1);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('MatrixSVD (edge/error cases)', () => {
|
|
173
|
+
it('throws for empty matrix', () => {
|
|
174
|
+
expect(() => MatrixSVD([])).toThrow();
|
|
175
|
+
});
|
|
176
|
+
it('throws for non-array input', () => {
|
|
177
|
+
expect(() => MatrixSVD(undefined)).toThrow();
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
// Additional property check: reconstruct original matrix from Cholesky
|
|
181
|
+
describe('MatrixCholesky (property)', () => {
|
|
182
|
+
it('reconstructs original matrix from L * L^T', () => {
|
|
183
|
+
const A = [[25, 15, -5], [15, 18, 0], [-5, 0, 11]];
|
|
184
|
+
const L = MatrixCholesky(A);
|
|
185
|
+
const LT = (L ?? [])[0]?.map((_, i) => (L ?? []).map((row) => row?.[i] ?? 0)) ?? [];
|
|
186
|
+
const reconstructed = (L ?? []).map((row) => (LT[0] ?? []).map((_, j) => row.reduce((sum, val, k) => sum + ((val ?? 0) * (LT[k]?.[j] ?? 0)), 0)));
|
|
187
|
+
for (let i = 0; i < 3; ++i) {
|
|
188
|
+
for (let j = 0; j < 3; ++j) {
|
|
189
|
+
expect(Number(reconstructed[i]?.[j] ?? 0)).toBeCloseTo(A[i]?.[j] ?? 0);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=decompositions.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompositions.spec.js","sourceRoot":"","sources":["../../src/matrices/decompositions.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './arithmetic.js';
|
|
2
|
+
export * from './asserts.js';
|
|
3
|
+
export * from './core.js';
|
|
4
|
+
export * from './decompositions.js';
|
|
5
|
+
export * from './linear-algebra.js';
|
|
6
|
+
export * from './normalization.js';
|
|
7
|
+
export * from './transformations.js';
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matrices/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './arithmetic.js';
|
|
2
|
+
export * from './asserts.js';
|
|
3
|
+
export * from './core.js';
|
|
4
|
+
export * from './decompositions.js';
|
|
5
|
+
export * from './linear-algebra.js';
|
|
6
|
+
export * from './normalization.js';
|
|
7
|
+
export * from './transformations.js';
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matrices/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { IMatrix } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Computes the determinant of a square matrix.
|
|
4
|
+
* @param matrix - The square matrix to compute determinant for
|
|
5
|
+
* @returns {number} The determinant value (can be positive, negative, or zero)
|
|
6
|
+
* @throws {Error} If the matrix is not square
|
|
7
|
+
* @example MatrixDeterminant([[1, 2], [3, 4]]) // -2 (1×4 - 2×3)
|
|
8
|
+
*/
|
|
9
|
+
export declare function MatrixDeterminant(matrix: IMatrix): number;
|
|
10
|
+
/**
|
|
11
|
+
* Computes the cofactor of a matrix element at the specified position.
|
|
12
|
+
* @param matrix - The square matrix (must be at least 1×1)
|
|
13
|
+
* @param x - Column index (0-based, 0 ≤ x < matrix width)
|
|
14
|
+
* @param y - Row index (0-based, 0 ≤ y < matrix height)
|
|
15
|
+
* @returns {number} The cofactor value (can be positive, negative, or zero)
|
|
16
|
+
* @throws {Error} If the matrix is not square or indices are out of bounds
|
|
17
|
+
* @example MatrixCofactorElement([[1, 2], [3, 4]], 0, 0) // +4 (sign: +, minor: 4)
|
|
18
|
+
*/
|
|
19
|
+
export declare function MatrixCofactorElement(matrix: IMatrix, x: number, y: number): number;
|
|
20
|
+
/**
|
|
21
|
+
* Computes the cofactor matrix (matrix of all cofactors) of a square matrix.
|
|
22
|
+
* @param matrix - The square matrix (must be at least 1×1)
|
|
23
|
+
* @returns {IMatrix} The cofactor matrix (same dimensions as input)
|
|
24
|
+
* @throws {Error} If the matrix is not square
|
|
25
|
+
* @example MatrixCofactor([[1, 2], [3, 4]]) // [[4, -3], [-2, 1]]
|
|
26
|
+
*/
|
|
27
|
+
export declare function MatrixCofactor(matrix: IMatrix): IMatrix;
|
|
28
|
+
/**
|
|
29
|
+
* Computes the adjoint (adjugate) matrix of a square matrix.
|
|
30
|
+
* @param matrix - The square matrix (must be at least 1×1)
|
|
31
|
+
* @returns {IMatrix} The adjoint matrix (same dimensions as input)
|
|
32
|
+
* @throws {Error} If the matrix is not square
|
|
33
|
+
* @example MatrixAdjoint([[1, 2], [3, 4]]) // [[4, -2], [-3, 1]]
|
|
34
|
+
*/
|
|
35
|
+
export declare function MatrixAdjoint(matrix: IMatrix): IMatrix;
|
|
36
|
+
/**
|
|
37
|
+
* Computes the matrix inverse (reciprocal) of a square matrix.
|
|
38
|
+
* @param matrix - The square matrix to invert (must be non-singular)
|
|
39
|
+
* @returns {IMatrix} The inverse matrix A⁻¹
|
|
40
|
+
* @throws {Error} If the matrix is not square or is singular (determinant is zero)
|
|
41
|
+
* @example MatrixInverse([[1, 2], [3, 4]]) // [[-2, 1], [1.5, -0.5]]
|
|
42
|
+
*/
|
|
43
|
+
export declare function MatrixInverse(matrix: IMatrix): IMatrix;
|
|
44
|
+
/**
|
|
45
|
+
* Orthogonalizes matrix columns using Gram-Schmidt process.
|
|
46
|
+
* @param matrix - Input matrix with columns to orthogonalize
|
|
47
|
+
* @returns {IMatrix} Matrix with orthonormal columns
|
|
48
|
+
* @throws {Error} If matrix contains linearly dependent columns
|
|
49
|
+
* @example MatrixGramSchmidt([[1, 1], [0, 1]]) // Orthonormal columns
|
|
50
|
+
* @complexity Time: O(n²m), Space: O(mn)
|
|
51
|
+
*/
|
|
52
|
+
export declare function MatrixGramSchmidt(matrix: IMatrix): IMatrix;
|
|
53
|
+
/**
|
|
54
|
+
* Computes matrix minor by removing specified row and column.
|
|
55
|
+
* @param matrix - Square matrix (≥ 2×2)
|
|
56
|
+
* @param x - Column index to remove
|
|
57
|
+
* @param y - Row index to remove
|
|
58
|
+
* @returns {number} Determinant of resulting submatrix
|
|
59
|
+
* @throws {Error} If matrix too small or indices out of bounds
|
|
60
|
+
* @example MatrixMinor([[1,2,3],[4,5,6],[7,8,9]], 1, 0) // -6
|
|
61
|
+
* @complexity Time: O(n³), Space: O(n²)
|
|
62
|
+
*/
|
|
63
|
+
export declare function MatrixMinor(matrix: IMatrix, x: number, y: number): number;
|
|
64
|
+
//# sourceMappingURL=linear-algebra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-algebra.d.ts","sourceRoot":"","sources":["../../src/matrices/linear-algebra.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMrC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAqCzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnF;AAUD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAevD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAGtD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAgCtD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAoF1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA6BzE"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { AssertNotEquals, AssertNumber } from '@pawells/typescript-common';
|
|
2
|
+
import { AssertMatrix, AssertMatrix1, AssertMatrix2, AssertMatrix3, AssertMatrixRow, AssertMatrixValue } from './asserts.js';
|
|
3
|
+
import { MatrixCreate, MatrixSize, MatrixSizeSquare, MatrixTranspose } from './core.js';
|
|
4
|
+
import { VectorProject, VectorSubtract } from '../vectors/core.js';
|
|
5
|
+
const GRAM_SCHMIDT_TOLERANCE = 1e-10;
|
|
6
|
+
/**
|
|
7
|
+
* Computes the determinant of a square matrix.
|
|
8
|
+
* @param matrix - The square matrix to compute determinant for
|
|
9
|
+
* @returns {number} The determinant value (can be positive, negative, or zero)
|
|
10
|
+
* @throws {Error} If the matrix is not square
|
|
11
|
+
* @example MatrixDeterminant([[1, 2], [3, 4]]) // -2 (1×4 - 2×3)
|
|
12
|
+
*/
|
|
13
|
+
export function MatrixDeterminant(matrix) {
|
|
14
|
+
AssertMatrix(matrix, { square: true });
|
|
15
|
+
const size = MatrixSizeSquare(matrix);
|
|
16
|
+
// 1×1: return single element
|
|
17
|
+
if (size === 1) {
|
|
18
|
+
AssertMatrix1(matrix);
|
|
19
|
+
return matrix[0][0];
|
|
20
|
+
}
|
|
21
|
+
// 2×2: ad - bc
|
|
22
|
+
if (size === 2) {
|
|
23
|
+
AssertMatrix2(matrix);
|
|
24
|
+
return (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);
|
|
25
|
+
}
|
|
26
|
+
// 3×3: Sarrus' rule
|
|
27
|
+
if (size === 3) {
|
|
28
|
+
AssertMatrix3(matrix);
|
|
29
|
+
return (matrix[0][0] * ((matrix[1][1] * matrix[2][2]) - (matrix[1][2] * matrix[2][1]))) - (matrix[0][1] * ((matrix[1][0] * matrix[2][2]) - (matrix[1][2] * matrix[2][0]))) + (matrix[0][2] * ((matrix[1][0] * matrix[2][1]) - (matrix[1][1] * matrix[2][0])));
|
|
30
|
+
}
|
|
31
|
+
// n×n: cofactor expansion along first row
|
|
32
|
+
let det = 0;
|
|
33
|
+
const [row] = matrix;
|
|
34
|
+
AssertMatrixRow(row);
|
|
35
|
+
for (let col = 0; col < size; col++) {
|
|
36
|
+
const element = row[col];
|
|
37
|
+
AssertMatrixValue(element);
|
|
38
|
+
const cofactor = MatrixCofactorElement(matrix, col, 0);
|
|
39
|
+
det += element * cofactor;
|
|
40
|
+
}
|
|
41
|
+
return det;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Computes the cofactor of a matrix element at the specified position.
|
|
45
|
+
* @param matrix - The square matrix (must be at least 1×1)
|
|
46
|
+
* @param x - Column index (0-based, 0 ≤ x < matrix width)
|
|
47
|
+
* @param y - Row index (0-based, 0 ≤ y < matrix height)
|
|
48
|
+
* @returns {number} The cofactor value (can be positive, negative, or zero)
|
|
49
|
+
* @throws {Error} If the matrix is not square or indices are out of bounds
|
|
50
|
+
* @example MatrixCofactorElement([[1, 2], [3, 4]], 0, 0) // +4 (sign: +, minor: 4)
|
|
51
|
+
*/
|
|
52
|
+
export function MatrixCofactorElement(matrix, x, y) {
|
|
53
|
+
AssertMatrix(matrix, { square: true });
|
|
54
|
+
const minor = MatrixMinor(matrix, x, y);
|
|
55
|
+
// Fix: sign should be (-1)^(row+col), where row = y, col = x
|
|
56
|
+
return Math.pow(-1, y + x) * minor;
|
|
57
|
+
}
|
|
58
|
+
function normalizeZeroMatrix(matrix) {
|
|
59
|
+
return matrix.map((row) => {
|
|
60
|
+
return row.map((v) => {
|
|
61
|
+
return Object.is(v, -0) ? 0 : v;
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Computes the cofactor matrix (matrix of all cofactors) of a square matrix.
|
|
67
|
+
* @param matrix - The square matrix (must be at least 1×1)
|
|
68
|
+
* @returns {IMatrix} The cofactor matrix (same dimensions as input)
|
|
69
|
+
* @throws {Error} If the matrix is not square
|
|
70
|
+
* @example MatrixCofactor([[1, 2], [3, 4]]) // [[4, -3], [-2, 1]]
|
|
71
|
+
*/
|
|
72
|
+
export function MatrixCofactor(matrix) {
|
|
73
|
+
AssertMatrix(matrix, { square: true });
|
|
74
|
+
const [size] = MatrixSize(matrix);
|
|
75
|
+
const result = MatrixCreate(size, size);
|
|
76
|
+
for (let row = 0; row < size; row++) {
|
|
77
|
+
for (let col = 0; col < size; col++) {
|
|
78
|
+
const resultRow = result[row];
|
|
79
|
+
AssertMatrixRow(resultRow);
|
|
80
|
+
resultRow[col] = MatrixCofactorElement(matrix, col, row);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return normalizeZeroMatrix(result);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Computes the adjoint (adjugate) matrix of a square matrix.
|
|
87
|
+
* @param matrix - The square matrix (must be at least 1×1)
|
|
88
|
+
* @returns {IMatrix} The adjoint matrix (same dimensions as input)
|
|
89
|
+
* @throws {Error} If the matrix is not square
|
|
90
|
+
* @example MatrixAdjoint([[1, 2], [3, 4]]) // [[4, -2], [-3, 1]]
|
|
91
|
+
*/
|
|
92
|
+
export function MatrixAdjoint(matrix) {
|
|
93
|
+
AssertMatrix(matrix, { square: true });
|
|
94
|
+
return normalizeZeroMatrix(MatrixTranspose(MatrixCofactor(matrix)));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Computes the matrix inverse (reciprocal) of a square matrix.
|
|
98
|
+
* @param matrix - The square matrix to invert (must be non-singular)
|
|
99
|
+
* @returns {IMatrix} The inverse matrix A⁻¹
|
|
100
|
+
* @throws {Error} If the matrix is not square or is singular (determinant is zero)
|
|
101
|
+
* @example MatrixInverse([[1, 2], [3, 4]]) // [[-2, 1], [1.5, -0.5]]
|
|
102
|
+
*/
|
|
103
|
+
export function MatrixInverse(matrix) {
|
|
104
|
+
AssertMatrix(matrix, { square: true });
|
|
105
|
+
const det = MatrixDeterminant(matrix);
|
|
106
|
+
AssertNotEquals(det, 0, { message: 'Matrix is not invertible (determinant is zero)' });
|
|
107
|
+
const [size] = MatrixSize(matrix);
|
|
108
|
+
const cof = MatrixCofactor(matrix);
|
|
109
|
+
// (1/det) * transpose(cofactor matrix)
|
|
110
|
+
const transposed = MatrixTranspose(cof);
|
|
111
|
+
const result = MatrixCreate(size, size);
|
|
112
|
+
const invDet = 1 / det;
|
|
113
|
+
for (let row = 0; row < size; row++) {
|
|
114
|
+
const transposedRow = transposed[row];
|
|
115
|
+
AssertMatrixRow(transposedRow);
|
|
116
|
+
const resultRow = result[row];
|
|
117
|
+
AssertMatrixRow(resultRow);
|
|
118
|
+
for (let col = 0; col < size; col++) {
|
|
119
|
+
const val = transposedRow[col];
|
|
120
|
+
if (typeof val !== 'number') {
|
|
121
|
+
throw new Error(`Transposed matrix value at position [${row}, ${col}] is not a number`);
|
|
122
|
+
}
|
|
123
|
+
resultRow[col] = Object.is(val * invDet, -0) ? 0 : val * invDet;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Orthogonalizes matrix columns using Gram-Schmidt process.
|
|
130
|
+
* @param matrix - Input matrix with columns to orthogonalize
|
|
131
|
+
* @returns {IMatrix} Matrix with orthonormal columns
|
|
132
|
+
* @throws {Error} If matrix contains linearly dependent columns
|
|
133
|
+
* @example MatrixGramSchmidt([[1, 1], [0, 1]]) // Orthonormal columns
|
|
134
|
+
* @complexity Time: O(n²m), Space: O(mn)
|
|
135
|
+
*/
|
|
136
|
+
export function MatrixGramSchmidt(matrix) {
|
|
137
|
+
const [rows, cols] = MatrixSize(matrix);
|
|
138
|
+
const result = MatrixCreate(rows, cols);
|
|
139
|
+
const vectors = [];
|
|
140
|
+
const orthonormalBasis = [];
|
|
141
|
+
// Extract columns as vectors
|
|
142
|
+
for (let j = 0; j < cols; j++) {
|
|
143
|
+
const vector = [];
|
|
144
|
+
for (let i = 0; i < rows; i++) {
|
|
145
|
+
const row = matrix[i];
|
|
146
|
+
if (!row)
|
|
147
|
+
throw new Error(`Matrix row at index ${i} is undefined`);
|
|
148
|
+
const value = row[j];
|
|
149
|
+
if (typeof value !== 'number')
|
|
150
|
+
throw new Error(`Matrix element at [${i}][${j}] is undefined`);
|
|
151
|
+
vector.push(value);
|
|
152
|
+
}
|
|
153
|
+
vectors.push(vector);
|
|
154
|
+
}
|
|
155
|
+
// Helper to generate an orthonormal vector not in the span of orthonormalBasis
|
|
156
|
+
function findOrthonormalVector(existing) {
|
|
157
|
+
for (let trial = 0; trial < rows; trial++) {
|
|
158
|
+
let candidate = Array(rows).fill(0);
|
|
159
|
+
candidate[trial] = 1;
|
|
160
|
+
// Remove projections onto existing basis
|
|
161
|
+
for (const b of existing) {
|
|
162
|
+
if (!b)
|
|
163
|
+
continue;
|
|
164
|
+
const proj = VectorProject(candidate, b);
|
|
165
|
+
candidate = VectorSubtract(candidate, proj);
|
|
166
|
+
}
|
|
167
|
+
const norm = Math.sqrt(candidate.reduce((sum, v) => sum + (v * v), 0));
|
|
168
|
+
if (norm > GRAM_SCHMIDT_TOLERANCE) {
|
|
169
|
+
return candidate.map((v) => v / norm);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Blank line for style
|
|
173
|
+
throw new Error('Unable to find orthonormal vector for null space');
|
|
174
|
+
}
|
|
175
|
+
// Apply Gram-Schmidt process
|
|
176
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
177
|
+
const currentVector = vectors[i];
|
|
178
|
+
if (!currentVector)
|
|
179
|
+
throw new Error(`Vector at index ${i} is undefined`);
|
|
180
|
+
let orthogonalVector = [...currentVector];
|
|
181
|
+
// Remove projections onto previous basis
|
|
182
|
+
for (const previousVector of orthonormalBasis) {
|
|
183
|
+
if (!previousVector)
|
|
184
|
+
continue;
|
|
185
|
+
const projection = VectorProject(orthogonalVector, previousVector);
|
|
186
|
+
for (let k = 0; k < orthogonalVector.length; k++) {
|
|
187
|
+
if (typeof projection[k] !== 'number' || typeof orthogonalVector[k] !== 'number')
|
|
188
|
+
throw new Error(`Projection or orthogonal vector component at index ${k} is undefined`);
|
|
189
|
+
// Defensive: if undefined, skip
|
|
190
|
+
if (projection[k] === undefined || orthogonalVector[k] === undefined)
|
|
191
|
+
continue;
|
|
192
|
+
orthogonalVector[k] = orthogonalVector[k] - projection[k];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const norm = Math.sqrt(orthogonalVector.reduce((sum, val) => sum + (val * val), 0));
|
|
196
|
+
if (norm > GRAM_SCHMIDT_TOLERANCE) {
|
|
197
|
+
orthogonalVector = orthogonalVector.map((val) => val / norm);
|
|
198
|
+
orthonormalBasis.push(orthogonalVector);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
const nullVec = findOrthonormalVector(orthonormalBasis);
|
|
202
|
+
orthonormalBasis.push(nullVec);
|
|
203
|
+
}
|
|
204
|
+
// Store as matrix column
|
|
205
|
+
for (let k = 0; k < rows; k++) {
|
|
206
|
+
const resultRow = result[k];
|
|
207
|
+
if (!resultRow)
|
|
208
|
+
throw new Error(`Result matrix row at index ${k} is undefined`);
|
|
209
|
+
const basisVec = orthonormalBasis[i];
|
|
210
|
+
if (!basisVec || typeof basisVec[k] !== 'number')
|
|
211
|
+
continue;
|
|
212
|
+
resultRow[i] = basisVec[k];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Computes matrix minor by removing specified row and column.
|
|
219
|
+
* @param matrix - Square matrix (≥ 2×2)
|
|
220
|
+
* @param x - Column index to remove
|
|
221
|
+
* @param y - Row index to remove
|
|
222
|
+
* @returns {number} Determinant of resulting submatrix
|
|
223
|
+
* @throws {Error} If matrix too small or indices out of bounds
|
|
224
|
+
* @example MatrixMinor([[1,2,3],[4,5,6],[7,8,9]], 1, 0) // -6
|
|
225
|
+
* @complexity Time: O(n³), Space: O(n²)
|
|
226
|
+
*/
|
|
227
|
+
export function MatrixMinor(matrix, x, y) {
|
|
228
|
+
AssertMatrix(matrix, { square: true });
|
|
229
|
+
const [rows, cols] = MatrixSize(matrix);
|
|
230
|
+
AssertNumber(rows, { gte: 2 }, { message: 'Matrix must be at least 2x2 to compute minor' });
|
|
231
|
+
AssertNumber(cols, { gte: 2 }, { message: 'Matrix must be at least 2x2 to compute minor' });
|
|
232
|
+
AssertNumber(x, { gte: 0, lt: cols }, { message: `Column index x must be in range [0, ${cols})` });
|
|
233
|
+
AssertNumber(y, { gte: 0, lt: rows }, { message: `Row index y must be in range [0, ${rows})` });
|
|
234
|
+
// Build submatrix excluding row y and column x
|
|
235
|
+
const minor = [];
|
|
236
|
+
for (let i = 0; i < rows; i++) {
|
|
237
|
+
if (i === y)
|
|
238
|
+
continue;
|
|
239
|
+
const row = [];
|
|
240
|
+
for (let j = 0; j < cols; j++) {
|
|
241
|
+
if (j === x)
|
|
242
|
+
continue;
|
|
243
|
+
const currentRow = matrix[i];
|
|
244
|
+
AssertMatrixRow(currentRow);
|
|
245
|
+
const value = currentRow[j];
|
|
246
|
+
AssertMatrixValue(value);
|
|
247
|
+
row.push(value);
|
|
248
|
+
}
|
|
249
|
+
minor.push(row);
|
|
250
|
+
}
|
|
251
|
+
return MatrixDeterminant(minor);
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=linear-algebra.js.map
|