@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.
Files changed (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/build/angles.d.ts +31 -0
  4. package/build/angles.d.ts.map +1 -0
  5. package/build/angles.js +85 -0
  6. package/build/angles.js.map +1 -0
  7. package/build/angles.spec.d.ts +2 -0
  8. package/build/angles.spec.d.ts.map +1 -0
  9. package/build/angles.spec.js +147 -0
  10. package/build/angles.spec.js.map +1 -0
  11. package/build/clamp.d.ts +17 -0
  12. package/build/clamp.d.ts.map +1 -0
  13. package/build/clamp.js +19 -0
  14. package/build/clamp.js.map +1 -0
  15. package/build/clamp.spec.d.ts +2 -0
  16. package/build/clamp.spec.d.ts.map +1 -0
  17. package/build/clamp.spec.js +19 -0
  18. package/build/clamp.spec.js.map +1 -0
  19. package/build/documentation-validation.spec.d.ts +11 -0
  20. package/build/documentation-validation.spec.d.ts.map +1 -0
  21. package/build/documentation-validation.spec.js +401 -0
  22. package/build/documentation-validation.spec.js.map +1 -0
  23. package/build/index.d.ts +8 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +8 -0
  26. package/build/index.js.map +1 -0
  27. package/build/interpolation.d.ts +175 -0
  28. package/build/interpolation.d.ts.map +1 -0
  29. package/build/interpolation.js +369 -0
  30. package/build/interpolation.js.map +1 -0
  31. package/build/interpolation.spec.d.ts +2 -0
  32. package/build/interpolation.spec.d.ts.map +1 -0
  33. package/build/interpolation.spec.js +480 -0
  34. package/build/interpolation.spec.js.map +1 -0
  35. package/build/matrices/arithmetic.d.ts +411 -0
  36. package/build/matrices/arithmetic.d.ts.map +1 -0
  37. package/build/matrices/arithmetic.js +954 -0
  38. package/build/matrices/arithmetic.js.map +1 -0
  39. package/build/matrices/arithmetic.spec.d.ts +2 -0
  40. package/build/matrices/arithmetic.spec.d.ts.map +1 -0
  41. package/build/matrices/arithmetic.spec.js +915 -0
  42. package/build/matrices/arithmetic.spec.js.map +1 -0
  43. package/build/matrices/asserts.d.ts +306 -0
  44. package/build/matrices/asserts.d.ts.map +1 -0
  45. package/build/matrices/asserts.js +396 -0
  46. package/build/matrices/asserts.js.map +1 -0
  47. package/build/matrices/asserts.spec.d.ts +2 -0
  48. package/build/matrices/asserts.spec.d.ts.map +1 -0
  49. package/build/matrices/asserts.spec.js +565 -0
  50. package/build/matrices/asserts.spec.js.map +1 -0
  51. package/build/matrices/core.d.ts +168 -0
  52. package/build/matrices/core.d.ts.map +1 -0
  53. package/build/matrices/core.js +457 -0
  54. package/build/matrices/core.js.map +1 -0
  55. package/build/matrices/core.spec.d.ts +2 -0
  56. package/build/matrices/core.spec.d.ts.map +1 -0
  57. package/build/matrices/core.spec.js +634 -0
  58. package/build/matrices/core.spec.js.map +1 -0
  59. package/build/matrices/decompositions.d.ts +326 -0
  60. package/build/matrices/decompositions.d.ts.map +1 -0
  61. package/build/matrices/decompositions.js +816 -0
  62. package/build/matrices/decompositions.js.map +1 -0
  63. package/build/matrices/decompositions.spec.d.ts +2 -0
  64. package/build/matrices/decompositions.spec.d.ts.map +1 -0
  65. package/build/matrices/decompositions.spec.js +195 -0
  66. package/build/matrices/decompositions.spec.js.map +1 -0
  67. package/build/matrices/index.d.ts +9 -0
  68. package/build/matrices/index.d.ts.map +1 -0
  69. package/build/matrices/index.js +9 -0
  70. package/build/matrices/index.js.map +1 -0
  71. package/build/matrices/linear-algebra.d.ts +64 -0
  72. package/build/matrices/linear-algebra.d.ts.map +1 -0
  73. package/build/matrices/linear-algebra.js +253 -0
  74. package/build/matrices/linear-algebra.js.map +1 -0
  75. package/build/matrices/linear-algebra.spec.d.ts +2 -0
  76. package/build/matrices/linear-algebra.spec.d.ts.map +1 -0
  77. package/build/matrices/linear-algebra.spec.js +355 -0
  78. package/build/matrices/linear-algebra.spec.js.map +1 -0
  79. package/build/matrices/normalization.d.ts +62 -0
  80. package/build/matrices/normalization.d.ts.map +1 -0
  81. package/build/matrices/normalization.js +167 -0
  82. package/build/matrices/normalization.js.map +1 -0
  83. package/build/matrices/normalization.spec.d.ts +2 -0
  84. package/build/matrices/normalization.spec.d.ts.map +1 -0
  85. package/build/matrices/normalization.spec.js +335 -0
  86. package/build/matrices/normalization.spec.js.map +1 -0
  87. package/build/matrices/transformations.d.ts +484 -0
  88. package/build/matrices/transformations.d.ts.map +1 -0
  89. package/build/matrices/transformations.js +592 -0
  90. package/build/matrices/transformations.js.map +1 -0
  91. package/build/matrices/transformations.spec.d.ts +2 -0
  92. package/build/matrices/transformations.spec.d.ts.map +1 -0
  93. package/build/matrices/transformations.spec.js +755 -0
  94. package/build/matrices/transformations.spec.js.map +1 -0
  95. package/build/matrices/types.d.ts +134 -0
  96. package/build/matrices/types.d.ts.map +1 -0
  97. package/build/matrices/types.js +6 -0
  98. package/build/matrices/types.js.map +1 -0
  99. package/build/quaternions/asserts.d.ts +77 -0
  100. package/build/quaternions/asserts.d.ts.map +1 -0
  101. package/build/quaternions/asserts.js +175 -0
  102. package/build/quaternions/asserts.js.map +1 -0
  103. package/build/quaternions/asserts.spec.d.ts +2 -0
  104. package/build/quaternions/asserts.spec.d.ts.map +1 -0
  105. package/build/quaternions/asserts.spec.js +320 -0
  106. package/build/quaternions/asserts.spec.js.map +1 -0
  107. package/build/quaternions/conversions.d.ts +73 -0
  108. package/build/quaternions/conversions.d.ts.map +1 -0
  109. package/build/quaternions/conversions.js +179 -0
  110. package/build/quaternions/conversions.js.map +1 -0
  111. package/build/quaternions/conversions.spec.d.ts +2 -0
  112. package/build/quaternions/conversions.spec.d.ts.map +1 -0
  113. package/build/quaternions/conversions.spec.js +344 -0
  114. package/build/quaternions/conversions.spec.js.map +1 -0
  115. package/build/quaternions/core.d.ts +203 -0
  116. package/build/quaternions/core.d.ts.map +1 -0
  117. package/build/quaternions/core.js +374 -0
  118. package/build/quaternions/core.js.map +1 -0
  119. package/build/quaternions/core.spec.d.ts +2 -0
  120. package/build/quaternions/core.spec.d.ts.map +1 -0
  121. package/build/quaternions/core.spec.js +294 -0
  122. package/build/quaternions/core.spec.js.map +1 -0
  123. package/build/quaternions/index.d.ts +7 -0
  124. package/build/quaternions/index.d.ts.map +1 -0
  125. package/build/quaternions/index.js +7 -0
  126. package/build/quaternions/index.js.map +1 -0
  127. package/build/quaternions/interpolation.d.ts +54 -0
  128. package/build/quaternions/interpolation.d.ts.map +1 -0
  129. package/build/quaternions/interpolation.js +201 -0
  130. package/build/quaternions/interpolation.js.map +1 -0
  131. package/build/quaternions/interpolation.spec.d.ts +2 -0
  132. package/build/quaternions/interpolation.spec.d.ts.map +1 -0
  133. package/build/quaternions/interpolation.spec.js +64 -0
  134. package/build/quaternions/interpolation.spec.js.map +1 -0
  135. package/build/quaternions/predefined.d.ts +36 -0
  136. package/build/quaternions/predefined.d.ts.map +1 -0
  137. package/build/quaternions/predefined.js +42 -0
  138. package/build/quaternions/predefined.js.map +1 -0
  139. package/build/quaternions/predefined.spec.d.ts +2 -0
  140. package/build/quaternions/predefined.spec.d.ts.map +1 -0
  141. package/build/quaternions/predefined.spec.js +35 -0
  142. package/build/quaternions/predefined.spec.js.map +1 -0
  143. package/build/quaternions/types.d.ts +55 -0
  144. package/build/quaternions/types.d.ts.map +1 -0
  145. package/build/quaternions/types.js +7 -0
  146. package/build/quaternions/types.js.map +1 -0
  147. package/build/random.d.ts +66 -0
  148. package/build/random.d.ts.map +1 -0
  149. package/build/random.js +115 -0
  150. package/build/random.js.map +1 -0
  151. package/build/random.spec.d.ts +2 -0
  152. package/build/random.spec.d.ts.map +1 -0
  153. package/build/random.spec.js +267 -0
  154. package/build/random.spec.js.map +1 -0
  155. package/build/vectors/asserts.d.ts +182 -0
  156. package/build/vectors/asserts.d.ts.map +1 -0
  157. package/build/vectors/asserts.js +285 -0
  158. package/build/vectors/asserts.js.map +1 -0
  159. package/build/vectors/asserts.spec.d.ts +2 -0
  160. package/build/vectors/asserts.spec.d.ts.map +1 -0
  161. package/build/vectors/asserts.spec.js +260 -0
  162. package/build/vectors/asserts.spec.js.map +1 -0
  163. package/build/vectors/core.d.ts +507 -0
  164. package/build/vectors/core.d.ts.map +1 -0
  165. package/build/vectors/core.js +825 -0
  166. package/build/vectors/core.js.map +1 -0
  167. package/build/vectors/core.spec.d.ts +2 -0
  168. package/build/vectors/core.spec.d.ts.map +1 -0
  169. package/build/vectors/core.spec.js +343 -0
  170. package/build/vectors/core.spec.js.map +1 -0
  171. package/build/vectors/index.d.ts +6 -0
  172. package/build/vectors/index.d.ts.map +1 -0
  173. package/build/vectors/index.js +6 -0
  174. package/build/vectors/index.js.map +1 -0
  175. package/build/vectors/interpolation.d.ts +404 -0
  176. package/build/vectors/interpolation.d.ts.map +1 -0
  177. package/build/vectors/interpolation.js +585 -0
  178. package/build/vectors/interpolation.js.map +1 -0
  179. package/build/vectors/interpolation.spec.d.ts +2 -0
  180. package/build/vectors/interpolation.spec.d.ts.map +1 -0
  181. package/build/vectors/interpolation.spec.js +378 -0
  182. package/build/vectors/interpolation.spec.js.map +1 -0
  183. package/build/vectors/predefined.d.ts +191 -0
  184. package/build/vectors/predefined.d.ts.map +1 -0
  185. package/build/vectors/predefined.js +191 -0
  186. package/build/vectors/predefined.js.map +1 -0
  187. package/build/vectors/predefined.spec.d.ts +2 -0
  188. package/build/vectors/predefined.spec.d.ts.map +1 -0
  189. package/build/vectors/predefined.spec.js +333 -0
  190. package/build/vectors/predefined.spec.js.map +1 -0
  191. package/build/vectors/types.d.ts +62 -0
  192. package/build/vectors/types.d.ts.map +1 -0
  193. package/build/vectors/types.js +6 -0
  194. package/build/vectors/types.js.map +1 -0
  195. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-algebra.js","sourceRoot":"","sources":["../../src/matrices/linear-algebra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=linear-algebra.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-algebra.spec.d.ts","sourceRoot":"","sources":["../../src/matrices/linear-algebra.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,355 @@
1
+ import { MatrixDeterminant, MatrixCofactorElement, MatrixCofactor, MatrixAdjoint, MatrixInverse, MatrixGramSchmidt, MatrixMinor, } from './linear-algebra.js';
2
+ describe('Matrix Operations for Linear Algebra', () => {
3
+ describe('MatrixDeterminant', () => {
4
+ test('should calculate determinant of 1x1 matrix', () => {
5
+ const matrix = [[5]];
6
+ expect(MatrixDeterminant(matrix)).toBe(5);
7
+ });
8
+ test('should calculate determinant of 2x2 matrix', () => {
9
+ const matrix = [[1, 2], [3, 4]];
10
+ expect(MatrixDeterminant(matrix)).toBe(-2); // 1*4 - 2*3 = -2
11
+ });
12
+ test('should calculate determinant of 2x2 identity matrix', () => {
13
+ const matrix = [[1, 0], [0, 1]];
14
+ expect(MatrixDeterminant(matrix)).toBe(1);
15
+ });
16
+ test('should calculate determinant of 3x3 matrix', () => {
17
+ const matrix = [
18
+ [1, 2, 3],
19
+ [4, 5, 6],
20
+ [7, 8, 9],
21
+ ];
22
+ expect(MatrixDeterminant(matrix)).toBe(0); // This matrix is singular
23
+ });
24
+ test('should calculate determinant of 3x3 non-singular matrix', () => {
25
+ const matrix = [
26
+ [2, -3, 1],
27
+ [2, 0, -1],
28
+ [1, 4, 5],
29
+ ];
30
+ expect(MatrixDeterminant(matrix)).toBe(49);
31
+ });
32
+ test('should calculate determinant of 3x3 identity matrix', () => {
33
+ const matrix = [
34
+ [1, 0, 0],
35
+ [0, 1, 0],
36
+ [0, 0, 1],
37
+ ];
38
+ expect(MatrixDeterminant(matrix)).toBe(1);
39
+ });
40
+ test('should calculate determinant of larger matrix using cofactor expansion', () => {
41
+ const matrix = [
42
+ [1, 2, 3, 4],
43
+ [2, 1, 4, 3],
44
+ [3, 4, 1, 2],
45
+ [4, 3, 2, 1],
46
+ ];
47
+ expect(MatrixDeterminant(matrix)).toBe(0);
48
+ });
49
+ test('should throw error for non-square matrix', () => {
50
+ const matrix = [[1, 2, 3], [4, 5, 6]];
51
+ expect(() => MatrixDeterminant(matrix)).toThrow();
52
+ });
53
+ test('should handle zero determinant matrix', () => {
54
+ const matrix = [
55
+ [1, 2],
56
+ [2, 4],
57
+ ];
58
+ expect(MatrixDeterminant(matrix)).toBe(0);
59
+ });
60
+ });
61
+ describe('MatrixCofactorElement', () => {
62
+ test('should calculate cofactor element for 2x2 matrix', () => {
63
+ const matrix = [[1, 2], [3, 4]];
64
+ expect(MatrixCofactorElement(matrix, 0, 0)).toBe(4); // +4
65
+ expect(MatrixCofactorElement(matrix, 1, 0)).toBe(-3); // -3
66
+ expect(MatrixCofactorElement(matrix, 0, 1)).toBe(-2); // -2
67
+ expect(MatrixCofactorElement(matrix, 1, 1)).toBe(1); // +1
68
+ });
69
+ test('should calculate cofactor element for 3x3 matrix', () => {
70
+ const matrix = [
71
+ [1, 2, 3],
72
+ [0, 1, 4],
73
+ [5, 6, 0],
74
+ ];
75
+ expect(MatrixCofactorElement(matrix, 0, 0)).toBe(-24); // +(1*0 - 4*6) = -24
76
+ expect(MatrixCofactorElement(matrix, 1, 0)).toBe(20); // -(0*0 - 4*5) = 20
77
+ });
78
+ test('should throw error for non-square matrix', () => {
79
+ const matrix = [[1, 2, 3], [4, 5, 6]];
80
+ expect(() => MatrixCofactorElement(matrix, 0, 0)).toThrow();
81
+ });
82
+ test('should throw error for out-of-bounds indices', () => {
83
+ const matrix = [[1, 2], [3, 4]];
84
+ expect(() => MatrixCofactorElement(matrix, 2, 0)).toThrow();
85
+ expect(() => MatrixCofactorElement(matrix, 0, 2)).toThrow();
86
+ });
87
+ });
88
+ describe('MatrixCofactor', () => {
89
+ test('should calculate cofactor matrix for 2x2 matrix', () => {
90
+ const matrix = [[1, 2], [3, 4]];
91
+ const result = MatrixCofactor(matrix);
92
+ expect(result).toEqual([[4, -3], [-2, 1]]);
93
+ });
94
+ test('should calculate cofactor matrix for 3x3 matrix', () => {
95
+ const matrix = [
96
+ [1, 2, 3],
97
+ [0, 1, 4],
98
+ [5, 6, 0],
99
+ ];
100
+ const result = MatrixCofactor(matrix);
101
+ expect(result).toEqual([
102
+ [-24, 20, -5],
103
+ [18, -15, 4],
104
+ [5, -4, 1],
105
+ ]);
106
+ });
107
+ test('should calculate cofactor matrix for identity matrix', () => {
108
+ const matrix = [[1, 0], [0, 1]];
109
+ const result = MatrixCofactor(matrix);
110
+ expect(result).toEqual([[1, 0], [0, 1]]);
111
+ });
112
+ test('should throw error for non-square matrix', () => {
113
+ const matrix = [[1, 2, 3], [4, 5, 6]];
114
+ expect(() => MatrixCofactor(matrix)).toThrow();
115
+ });
116
+ });
117
+ describe('MatrixAdjoint', () => {
118
+ test('should calculate adjoint matrix for 2x2 matrix', () => {
119
+ const matrix = [[1, 2], [3, 4]];
120
+ const result = MatrixAdjoint(matrix);
121
+ expect(result).toEqual([[4, -2], [-3, 1]]);
122
+ });
123
+ test('should calculate adjoint matrix for 3x3 matrix', () => {
124
+ const matrix = [
125
+ [1, 2, 3],
126
+ [0, 1, 4],
127
+ [5, 6, 0],
128
+ ];
129
+ const result = MatrixAdjoint(matrix);
130
+ expect(result).toEqual([
131
+ [-24, 18, 5],
132
+ [20, -15, -4],
133
+ [-5, 4, 1],
134
+ ]);
135
+ });
136
+ test('should calculate adjoint matrix for identity matrix', () => {
137
+ const matrix = [[1, 0], [0, 1]];
138
+ const result = MatrixAdjoint(matrix);
139
+ expect(result).toEqual([[1, 0], [0, 1]]);
140
+ });
141
+ test('should throw error for non-square matrix', () => {
142
+ const matrix = [[1, 2, 3], [4, 5, 6]];
143
+ expect(() => MatrixAdjoint(matrix)).toThrow();
144
+ });
145
+ });
146
+ describe('MatrixInverse', () => {
147
+ test('should calculate inverse of 2x2 matrix', () => {
148
+ const matrix = [[1, 2], [3, 4]];
149
+ const result = MatrixInverse(matrix);
150
+ expect(result[0]?.[0]).toBeCloseTo(-2);
151
+ expect(result[0]?.[1]).toBeCloseTo(1);
152
+ expect(result[1]?.[0]).toBeCloseTo(1.5);
153
+ expect(result[1]?.[1]).toBeCloseTo(-0.5);
154
+ });
155
+ test('should calculate inverse of identity matrix', () => {
156
+ const matrix = [[1, 0], [0, 1]];
157
+ const result = MatrixInverse(matrix);
158
+ expect(result).toEqual([[1, 0], [0, 1]]);
159
+ });
160
+ test('should calculate inverse of 3x3 matrix', () => {
161
+ const matrix = [
162
+ [2, -1, 0],
163
+ [-1, 2, -1],
164
+ [0, -1, 2],
165
+ ];
166
+ const result = MatrixInverse(matrix);
167
+ expect(result[0]?.[0]).toBeCloseTo(0.75);
168
+ expect(result[0]?.[1]).toBeCloseTo(0.5);
169
+ expect(result[0]?.[2]).toBeCloseTo(0.25);
170
+ });
171
+ test('should verify inverse property A * A^-1 = I', () => {
172
+ const matrix = [[2, 1], [1, 1]];
173
+ const inverse = MatrixInverse(matrix);
174
+ // Manually multiply matrix * inverse
175
+ const product = [
176
+ [((matrix[0]?.[0] ?? 0) * (inverse[0]?.[0] ?? 0)) + ((matrix[0]?.[1] ?? 0) * (inverse[1]?.[0] ?? 0)),
177
+ ((matrix[0]?.[0] ?? 0) * (inverse[0]?.[1] ?? 0)) + ((matrix[0]?.[1] ?? 0) * (inverse[1]?.[1] ?? 0))],
178
+ [((matrix[1]?.[0] ?? 0) * (inverse[0]?.[0] ?? 0)) + ((matrix[1]?.[1] ?? 0) * (inverse[1]?.[0] ?? 0)),
179
+ ((matrix[1]?.[0] ?? 0) * (inverse[0]?.[1] ?? 0)) + ((matrix[1]?.[1] ?? 0) * (inverse[1]?.[1] ?? 0))],
180
+ ];
181
+ expect(product[0]?.[0]).toBeCloseTo(1);
182
+ expect(product[0]?.[1]).toBeCloseTo(0);
183
+ expect(product[1]?.[0]).toBeCloseTo(0);
184
+ expect(product[1]?.[1]).toBeCloseTo(1);
185
+ });
186
+ test('should throw error for singular matrix', () => {
187
+ const matrix = [[1, 2], [2, 4]]; // determinant = 0
188
+ expect(() => MatrixInverse(matrix)).toThrow();
189
+ });
190
+ test('should throw error for non-square matrix', () => {
191
+ const matrix = [[1, 2, 3], [4, 5, 6]];
192
+ expect(() => MatrixInverse(matrix)).toThrow();
193
+ });
194
+ });
195
+ describe('MatrixGramSchmidt', () => {
196
+ test('should orthogonalize 2x2 matrix', () => {
197
+ const matrix = [[1, 1], [0, 1]];
198
+ const result = MatrixGramSchmidt(matrix);
199
+ // First column should be normalized [1, 0]
200
+ expect(result[0]?.[0]).toBeCloseTo(1);
201
+ expect(result[1]?.[0]).toBeCloseTo(0);
202
+ // Second column should be orthogonal to first and normalized
203
+ expect(result[0]?.[1]).toBeCloseTo(0);
204
+ expect(result[1]?.[1]).toBeCloseTo(1);
205
+ });
206
+ test('should orthogonalize 3x2 matrix', () => {
207
+ const matrix = [
208
+ [1, 1],
209
+ [1, 0],
210
+ [0, 1],
211
+ ];
212
+ const result = MatrixGramSchmidt(matrix);
213
+ // Check that columns are orthonormal
214
+ const col1 = [result[0]?.[0] ?? 0, result[1]?.[0] ?? 0, result[2]?.[0] ?? 0];
215
+ const col2 = [result[0]?.[1] ?? 0, result[1]?.[1] ?? 0, result[2]?.[1] ?? 0];
216
+ // Check normalization (column norms should be 1)
217
+ const norm1 = Math.sqrt(col1.reduce((sum, val) => sum + (val * val), 0));
218
+ const norm2 = Math.sqrt(col2.reduce((sum, val) => sum + (val * val), 0));
219
+ expect(norm1).toBeCloseTo(1);
220
+ expect(norm2).toBeCloseTo(1);
221
+ // Check orthogonality (dot product should be 0)
222
+ const dotProduct = col1.reduce((sum, val, i) => sum + (val * (col2[i] ?? 0)), 0);
223
+ expect(dotProduct).toBeCloseTo(0);
224
+ });
225
+ test('should handle identity matrix', () => {
226
+ const matrix = [
227
+ [1, 0, 0],
228
+ [0, 1, 0],
229
+ [0, 0, 1],
230
+ ];
231
+ const result = MatrixGramSchmidt(matrix);
232
+ // Identity matrix should remain unchanged
233
+ expect(result[0]?.[0]).toBeCloseTo(1);
234
+ expect(result[1]?.[1]).toBeCloseTo(1);
235
+ expect(result[2]?.[2]).toBeCloseTo(1);
236
+ expect(result[0]?.[1]).toBeCloseTo(0);
237
+ expect(result[0]?.[2]).toBeCloseTo(0);
238
+ expect(result[1]?.[2]).toBeCloseTo(0);
239
+ });
240
+ test('should handle single column matrix', () => {
241
+ const matrix = [[3], [4]];
242
+ const result = MatrixGramSchmidt(matrix);
243
+ // Should normalize the single column
244
+ expect(result[0]?.[0]).toBeCloseTo(0.6); // 3/5
245
+ expect(result[1]?.[0]).toBeCloseTo(0.8); // 4/5
246
+ });
247
+ });
248
+ describe('MatrixMinor', () => {
249
+ test('should calculate minor for 2x2 matrix', () => {
250
+ const matrix = [[1, 2], [3, 4]];
251
+ expect(MatrixMinor(matrix, 0, 0)).toBe(4);
252
+ expect(MatrixMinor(matrix, 1, 0)).toBe(3);
253
+ expect(MatrixMinor(matrix, 0, 1)).toBe(2);
254
+ expect(MatrixMinor(matrix, 1, 1)).toBe(1);
255
+ });
256
+ test('should calculate minor for 3x3 matrix', () => {
257
+ const matrix = [
258
+ [1, 2, 3],
259
+ [4, 5, 6],
260
+ [7, 8, 9],
261
+ ];
262
+ expect(MatrixMinor(matrix, 0, 0)).toBe(-3); // det([[5,6],[8,9]]) = 45-48 = -3
263
+ expect(MatrixMinor(matrix, 1, 0)).toBe(-6); // det([[4,6],[7,9]]) = 36-42 = -6
264
+ expect(MatrixMinor(matrix, 2, 0)).toBe(-3); // det([[4,5],[7,8]]) = 32-35 = -3
265
+ });
266
+ test('should calculate minor for 4x4 matrix', () => {
267
+ const matrix = [
268
+ [1, 2, 3, 4],
269
+ [5, 6, 7, 8],
270
+ [9, 10, 11, 12],
271
+ [13, 14, 15, 16],
272
+ ];
273
+ const minor = MatrixMinor(matrix, 0, 0);
274
+ expect(typeof minor).toBe('number');
275
+ expect(minor).toBe(0); // This matrix has determinant 0
276
+ });
277
+ test('should throw error for 1x1 matrix', () => {
278
+ const matrix = [[5]];
279
+ expect(() => MatrixMinor(matrix, 0, 0)).toThrow();
280
+ });
281
+ test('should throw error for non-square matrix', () => {
282
+ const matrix = [[1, 2, 3], [4, 5, 6]];
283
+ expect(() => MatrixMinor(matrix, 0, 0)).toThrow();
284
+ });
285
+ test('should throw error for out-of-bounds indices', () => {
286
+ const matrix = [[1, 2], [3, 4]];
287
+ expect(() => MatrixMinor(matrix, 2, 0)).toThrow();
288
+ expect(() => MatrixMinor(matrix, 0, 2)).toThrow();
289
+ expect(() => MatrixMinor(matrix, -1, 0)).toThrow();
290
+ expect(() => MatrixMinor(matrix, 0, -1)).toThrow();
291
+ });
292
+ });
293
+ // Integration tests
294
+ describe('Integration Tests', () => {
295
+ test('determinant should equal product of eigenvalues for known matrices', () => {
296
+ // For a diagonal matrix, determinant = product of diagonal elements
297
+ const diagonal = [
298
+ [2, 0, 0],
299
+ [0, 3, 0],
300
+ [0, 0, 4],
301
+ ];
302
+ expect(MatrixDeterminant(diagonal)).toBe(24); // 2 * 3 * 4
303
+ });
304
+ test('inverse and adjoint relationship: A^-1 = adj(A) / det(A)', () => {
305
+ const matrix = [[1, 2], [3, 4]];
306
+ const inverse = MatrixInverse(matrix);
307
+ const adjoint = MatrixAdjoint(matrix);
308
+ const determinant = MatrixDeterminant(matrix);
309
+ for (let i = 0; i < 2; i++) {
310
+ for (let j = 0; j < 2; j++) {
311
+ expect(inverse[i]?.[j]).toBeCloseTo((adjoint[i]?.[j] ?? 0) / determinant);
312
+ }
313
+ }
314
+ });
315
+ test('cofactor and minor relationship: C_ij = (-1)^(i+j) * M_ij', () => {
316
+ const matrix = [
317
+ [1, 2, 3],
318
+ [4, 5, 6],
319
+ [7, 8, 9],
320
+ ];
321
+ for (let i = 0; i < 3; i++) {
322
+ for (let j = 0; j < 3; j++) {
323
+ const cofactor = MatrixCofactorElement(matrix, j, i);
324
+ const minor = MatrixMinor(matrix, j, i);
325
+ const expectedCofactor = Math.pow(-1, i + j) * minor;
326
+ expect(cofactor).toBeCloseTo(expectedCofactor);
327
+ }
328
+ }
329
+ });
330
+ test('Gram-Schmidt should produce orthonormal matrix', () => {
331
+ const matrix = [
332
+ [1, 2, 1],
333
+ [0, 1, 2],
334
+ [1, 0, 1],
335
+ ];
336
+ const result = MatrixGramSchmidt(matrix);
337
+ // Check that all columns have unit length
338
+ for (let j = 0; j < 3; j++) {
339
+ const column = [result[0]?.[j] ?? 0, result[1]?.[j] ?? 0, result[2]?.[j] ?? 0];
340
+ const norm = Math.sqrt(column.reduce((sum, val) => sum + (val * val), 0));
341
+ expect(norm).toBeCloseTo(1, 5);
342
+ }
343
+ // Check that columns are pairwise orthogonal
344
+ for (let i = 0; i < 3; i++) {
345
+ for (let j = i + 1; j < 3; j++) {
346
+ const col1 = [result[0]?.[i] ?? 0, result[1]?.[i] ?? 0, result[2]?.[i] ?? 0];
347
+ const col2 = [result[0]?.[j] ?? 0, result[1]?.[j] ?? 0, result[2]?.[j] ?? 0];
348
+ const dotProduct = col1.reduce((sum, val, k) => sum + (val * (col2[k] ?? 0)), 0);
349
+ expect(dotProduct).toBeCloseTo(0, 5);
350
+ }
351
+ }
352
+ });
353
+ });
354
+ });
355
+ //# sourceMappingURL=linear-algebra.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-algebra.spec.js","sourceRoot":"","sources":["../../src/matrices/linear-algebra.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { IMatrix } from './types.js';
2
+ /**
3
+ * Computes the Frobenius norm (Euclidean norm) of a matrix.
4
+ * @param matrix - The input matrix (any dimensions)
5
+ * @returns {number} The Frobenius norm (always non-negative)
6
+ * @throws {Error} If the matrix contains invalid values
7
+ * @example MatrixFrobeniusNorm([[3, 4], [0, 0]]) // 5 (sqrt(3² + 4²))
8
+ */
9
+ export declare function MatrixFrobeniusNorm(matrix: IMatrix): number;
10
+ /**
11
+ * Computes the spectral norm (2-norm) of a matrix.
12
+ * This is the largest singular value of the matrix.
13
+ * @param matrix - The input matrix
14
+ * @returns {number} The spectral norm (always non-negative)
15
+ * @throws {Error} If the matrix contains invalid values
16
+ * @example MatrixSpectralNorm([[3, 0], [0, 4]]) // 4 (largest singular value)
17
+ */
18
+ export declare function MatrixSpectralNorm(matrix: IMatrix): number;
19
+ /**
20
+ * Computes the 1-norm (maximum column sum) of a matrix.
21
+ * @param matrix - The input matrix
22
+ * @returns {number} The 1-norm (always non-negative)
23
+ * @throws {Error} If the matrix contains invalid values
24
+ * @example Matrix1Norm([[1, 2], [3, 4]]) // 6 (max of column sums: 4, 6)
25
+ */
26
+ export declare function Matrix1Norm(matrix: IMatrix): number;
27
+ /**
28
+ * Computes the infinity norm (maximum row sum) of a matrix.
29
+ * @param matrix - The input matrix
30
+ * @returns {number} The infinity norm (always non-negative)
31
+ * @throws {Error} If the matrix contains invalid values
32
+ * @example MatrixInfinityNorm([[1, 2], [3, 4]]) // 7 (max of row sums: 3, 7)
33
+ */
34
+ export declare function MatrixInfinityNorm(matrix: IMatrix): number;
35
+ /**
36
+ * Computes the nuclear norm (trace norm) of a matrix.
37
+ * This is the sum of all singular values.
38
+ * @param matrix - The input matrix
39
+ * @returns {number} The nuclear norm (always non-negative)
40
+ * @throws {Error} If the matrix contains invalid values
41
+ * @example MatrixNuclearNorm([[3, 0], [0, 4]]) // 7 (sum of singular values: 3 + 4)
42
+ */
43
+ export declare function MatrixNuclearNorm(matrix: IMatrix): number;
44
+ /**
45
+ * Computes the max norm (entry-wise maximum) of a matrix.
46
+ * This is the maximum absolute value of any matrix element.
47
+ * @param matrix - The input matrix
48
+ * @returns {number} The max norm (always non-negative)
49
+ * @throws {Error} If the matrix contains invalid values
50
+ * @example MatrixMaxNorm([[1, -5], [3, 2]]) // 5 (max absolute value)
51
+ */
52
+ export declare function MatrixMaxNorm(matrix: IMatrix): number;
53
+ /**
54
+ * Computes a general p-norm of a matrix (treating it as a flattened vector).
55
+ * @param matrix - The input matrix
56
+ * @param p - The norm parameter (must be >= 1)
57
+ * @returns {number} The p-norm (always non-negative)
58
+ * @throws {Error} If the matrix contains invalid values or p < 1
59
+ * @example MatrixPNorm([[1, 2], [3, 4]], 1) // 10 (sum of absolute values)
60
+ */
61
+ export declare function MatrixPNorm(matrix: IMatrix, p: number): number;
62
+ //# sourceMappingURL=normalization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../../src/matrices/normalization.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAmB3D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAW1D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAwBnD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAwB1D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAWzD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAkBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0B9D"}
@@ -0,0 +1,167 @@
1
+ import { AssertMatrix, AssertMatrixRow, AssertMatrixValue } from './asserts.js';
2
+ import { MatrixSize } from './core.js';
3
+ import { MatrixSVD } from './decompositions.js';
4
+ /**
5
+ * Computes the Frobenius norm (Euclidean norm) of a matrix.
6
+ * @param matrix - The input matrix (any dimensions)
7
+ * @returns {number} The Frobenius norm (always non-negative)
8
+ * @throws {Error} If the matrix contains invalid values
9
+ * @example MatrixFrobeniusNorm([[3, 4], [0, 0]]) // 5 (sqrt(3² + 4²))
10
+ */
11
+ export function MatrixFrobeniusNorm(matrix) {
12
+ AssertMatrix(matrix);
13
+ const [rows, cols] = MatrixSize(matrix);
14
+ let sum = 0;
15
+ for (let row = 0; row < rows; row++) {
16
+ const matrixRow = matrix[row];
17
+ AssertMatrixRow(matrixRow, { rowIndex: row });
18
+ for (let col = 0; col < cols; col++) {
19
+ const val = matrixRow[col];
20
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
21
+ // Add square of each element to the sum
22
+ sum += val * val;
23
+ }
24
+ }
25
+ return Math.sqrt(sum);
26
+ }
27
+ /**
28
+ * Computes the spectral norm (2-norm) of a matrix.
29
+ * This is the largest singular value of the matrix.
30
+ * @param matrix - The input matrix
31
+ * @returns {number} The spectral norm (always non-negative)
32
+ * @throws {Error} If the matrix contains invalid values
33
+ * @example MatrixSpectralNorm([[3, 0], [0, 4]]) // 4 (largest singular value)
34
+ */
35
+ export function MatrixSpectralNorm(matrix) {
36
+ AssertMatrix(matrix);
37
+ const [rows, cols] = MatrixSize(matrix);
38
+ if (rows === 0 || cols === 0) {
39
+ return 0;
40
+ }
41
+ const svd = MatrixSVD(matrix);
42
+ // The spectral norm is the largest singular value
43
+ return Math.max(...svd.S);
44
+ }
45
+ /**
46
+ * Computes the 1-norm (maximum column sum) of a matrix.
47
+ * @param matrix - The input matrix
48
+ * @returns {number} The 1-norm (always non-negative)
49
+ * @throws {Error} If the matrix contains invalid values
50
+ * @example Matrix1Norm([[1, 2], [3, 4]]) // 6 (max of column sums: 4, 6)
51
+ */
52
+ export function Matrix1Norm(matrix) {
53
+ AssertMatrix(matrix);
54
+ const [rows, cols] = MatrixSize(matrix);
55
+ let maxColumnSum = 0;
56
+ // Iterate through each column
57
+ for (let col = 0; col < cols; col++) {
58
+ let columnSum = 0;
59
+ // Sum absolute values in this column
60
+ for (let row = 0; row < rows; row++) {
61
+ const matrixRow = matrix[row];
62
+ AssertMatrixRow(matrixRow, { rowIndex: row });
63
+ const val = matrixRow[col];
64
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
65
+ columnSum += Math.abs(val);
66
+ }
67
+ maxColumnSum = Math.max(maxColumnSum, columnSum);
68
+ }
69
+ return maxColumnSum;
70
+ }
71
+ /**
72
+ * Computes the infinity norm (maximum row sum) of a matrix.
73
+ * @param matrix - The input matrix
74
+ * @returns {number} The infinity norm (always non-negative)
75
+ * @throws {Error} If the matrix contains invalid values
76
+ * @example MatrixInfinityNorm([[1, 2], [3, 4]]) // 7 (max of row sums: 3, 7)
77
+ */
78
+ export function MatrixInfinityNorm(matrix) {
79
+ AssertMatrix(matrix);
80
+ const [rows, cols] = MatrixSize(matrix);
81
+ let maxRowSum = 0;
82
+ // Iterate through each row
83
+ for (let row = 0; row < rows; row++) {
84
+ const matrixRow = matrix[row];
85
+ AssertMatrixRow(matrixRow, { rowIndex: row });
86
+ let rowSum = 0;
87
+ // Sum absolute values in this row
88
+ for (let col = 0; col < cols; col++) {
89
+ const val = matrixRow[col];
90
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
91
+ rowSum += Math.abs(val);
92
+ }
93
+ maxRowSum = Math.max(maxRowSum, rowSum);
94
+ }
95
+ return maxRowSum;
96
+ }
97
+ /**
98
+ * Computes the nuclear norm (trace norm) of a matrix.
99
+ * This is the sum of all singular values.
100
+ * @param matrix - The input matrix
101
+ * @returns {number} The nuclear norm (always non-negative)
102
+ * @throws {Error} If the matrix contains invalid values
103
+ * @example MatrixNuclearNorm([[3, 0], [0, 4]]) // 7 (sum of singular values: 3 + 4)
104
+ */
105
+ export function MatrixNuclearNorm(matrix) {
106
+ AssertMatrix(matrix);
107
+ const [rows, cols] = MatrixSize(matrix);
108
+ if (rows === 0 || cols === 0) {
109
+ return 0;
110
+ }
111
+ const svd = MatrixSVD(matrix);
112
+ // The nuclear norm is the sum of all singular values
113
+ return svd.S.reduce((sum, sv) => sum + sv, 0);
114
+ }
115
+ /**
116
+ * Computes the max norm (entry-wise maximum) of a matrix.
117
+ * This is the maximum absolute value of any matrix element.
118
+ * @param matrix - The input matrix
119
+ * @returns {number} The max norm (always non-negative)
120
+ * @throws {Error} If the matrix contains invalid values
121
+ * @example MatrixMaxNorm([[1, -5], [3, 2]]) // 5 (max absolute value)
122
+ */
123
+ export function MatrixMaxNorm(matrix) {
124
+ AssertMatrix(matrix);
125
+ const [rows, cols] = MatrixSize(matrix);
126
+ let maxValue = 0;
127
+ for (let row = 0; row < rows; row++) {
128
+ const matrixRow = matrix[row];
129
+ AssertMatrixRow(matrixRow, { rowIndex: row });
130
+ for (let col = 0; col < cols; col++) {
131
+ const val = matrixRow[col];
132
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
133
+ maxValue = Math.max(maxValue, Math.abs(val));
134
+ }
135
+ }
136
+ return maxValue;
137
+ }
138
+ /**
139
+ * Computes a general p-norm of a matrix (treating it as a flattened vector).
140
+ * @param matrix - The input matrix
141
+ * @param p - The norm parameter (must be >= 1)
142
+ * @returns {number} The p-norm (always non-negative)
143
+ * @throws {Error} If the matrix contains invalid values or p < 1
144
+ * @example MatrixPNorm([[1, 2], [3, 4]], 1) // 10 (sum of absolute values)
145
+ */
146
+ export function MatrixPNorm(matrix, p) {
147
+ AssertMatrix(matrix);
148
+ if (p < 1) {
149
+ throw new Error('p-norm parameter must be >= 1');
150
+ }
151
+ if (p === Infinity) {
152
+ return MatrixMaxNorm(matrix);
153
+ }
154
+ const [rows, cols] = MatrixSize(matrix);
155
+ let sum = 0;
156
+ for (let row = 0; row < rows; row++) {
157
+ const matrixRow = matrix[row];
158
+ AssertMatrixRow(matrixRow, { rowIndex: row });
159
+ for (let col = 0; col < cols; col++) {
160
+ const val = matrixRow[col];
161
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
162
+ sum += Math.pow(Math.abs(val), p);
163
+ }
164
+ }
165
+ return Math.pow(sum, 1 / p);
166
+ }
167
+ //# sourceMappingURL=normalization.js.map