@johnhenry/math 0.0.2 → 0.1.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 CHANGED
@@ -42,7 +42,7 @@ export { SpecialOperator } from "./SpecialOperator.ts";
42
42
  export * as Statistics from "./Statistics.ts";
43
43
  export { StringEvaluator } from "./StringEvaluator.ts";
44
44
  export { Structure, type StructureOptions } from "./Structure.ts";
45
- export { type Assumption, type BinaryFuncName, type CmpOp, DegenerateOdeError, type DifferentiationStep, type Expr, FUNCTION_NAMES, type FuncName, InfiniteSolutionsError, IntegrationSingularityError, NoClosedFormError, NonLinearSystemError, NotIntegrableError, NotSeparableError, type OdeClosedFormResult, ProductNotDifferentiableError, SeriesDivergesError, SingularSystemError, Symbolic, SystemDidNotConvergeError, UndeclaredVariableError, } from "./Symbolic.ts";
45
+ export { type Assumption, type BinaryFuncName, type CmpOp, DegenerateOdeError, type DifferentiationStep, type Expr, FUNCTION_NAMES, type FuncName, InfiniteSolutionsError, IntegrationSingularityError, NoClosedFormError, NonLinearSystemError, NotIntegrableError, NotSeparableError, type OdeClosedFormResult, type ParseOptions, ProductNotDifferentiableError, SeriesDivergesError, SingularSystemError, Symbolic, SystemDidNotConvergeError, UndeclaredVariableError, } from "./Symbolic.ts";
46
46
  export { Type, TypeTag } from "./Type.ts";
47
47
  export { Utilities } from "./Utilities.ts";
48
48
  export { Vec4 } from "./Vec4.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johnhenry/math",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
package/src/DualNumber.ts CHANGED
@@ -25,6 +25,16 @@ export class DualNumber {
25
25
  return new DualNumber(x, 1);
26
26
  }
27
27
 
28
+ /**
29
+ * Builds a dual number whose value may be outside the function's domain. A
30
+ * NaN value (e.g. `log` of a negative) makes the derivative NaN too, rather
31
+ * than leaving a finite-looking derivative (`x.deriv / x.value`) next to a
32
+ * meaningless value.
33
+ */
34
+ private static domain(value: number, deriv: number): DualNumber {
35
+ return new DualNumber(value, Number.isNaN(value) ? Number.NaN : deriv);
36
+ }
37
+
28
38
  private static lift(x: DualNumber | number): DualNumber {
29
39
  return x instanceof DualNumber ? x : new DualNumber(x, 0);
30
40
  }
@@ -62,7 +72,7 @@ export class DualNumber {
62
72
  // general formula entirely rather than let it hit that indeterminate
63
73
  // form (issue #74).
64
74
  if (n === 0) return new DualNumber(1, 0);
65
- return new DualNumber(this.value ** n, n * this.value ** (n - 1) * this.deriv);
75
+ return DualNumber.domain(this.value ** n, n * this.value ** (n - 1) * this.deriv);
66
76
  }
67
77
 
68
78
  static sin(x: DualNumber): DualNumber {
@@ -80,11 +90,11 @@ export class DualNumber {
80
90
  return new DualNumber(e, e * x.deriv);
81
91
  }
82
92
  static log(x: DualNumber): DualNumber {
83
- return new DualNumber(Math.log(x.value), x.deriv / x.value);
93
+ return DualNumber.domain(Math.log(x.value), x.deriv / x.value);
84
94
  }
85
95
  static sqrt(x: DualNumber): DualNumber {
86
96
  const s = Math.sqrt(x.value);
87
- return new DualNumber(s, x.deriv / (2 * s));
97
+ return DualNumber.domain(s, x.deriv / (2 * s));
88
98
  }
89
99
 
90
100
  /** The derivative of `f` at `x`, evaluated exactly via dual numbers. */
@@ -59,6 +59,12 @@ export interface Placement3D {
59
59
 
60
60
  const v3 = (x: number, y: number, z = 0): Vec3 => ({ x, y, z });
61
61
  const asPoint = (p: Vector<number>): Vec3 => ({ x: p.x as number, y: p.y as number, z: p.z as number });
62
+ const isFinitePoint = (p: Vec3): boolean => Number.isFinite(p.x) && Number.isFinite(p.y) && Number.isFinite(p.z);
63
+ /** A triangle face, or `null` when any vertex is NaN / infinite (so the surface breaks there instead of drawing garbage). */
64
+ const finiteFace = (a: Vector<number>, b: Vector<number>, c: Vector<number>): Face | null => {
65
+ const face: Face = [asPoint(a), asPoint(b), asPoint(c)];
66
+ return face.every(isFinitePoint) ? face : null;
67
+ };
62
68
 
63
69
  export class Graph3DUtils {
64
70
  /** Sample `binaryOperation` over a 2D grid, returning a matrix of results. */
@@ -222,6 +228,8 @@ export class Graph3DUtils {
222
228
  /**
223
229
  * Build a surface mesh from a grid (matrix) of points, as two triangle
224
230
  * sweeps with distinct materials (bug fix: the first sweep now uses `alpha1`).
231
+ * Triangles touching a NaN or infinite vertex are omitted, so the surface
232
+ * breaks into pieces around them.
225
233
  */
226
234
  static pointMatrixToMesh3D(
227
235
  vector: Vector<Vector<Vector<number>>>,
@@ -239,11 +247,12 @@ export class Graph3DUtils {
239
247
  for (let i = 0; i < width - 1; i++) {
240
248
  for (let j = 0; j < height - 1; j++) {
241
249
  if (at(i, j) && vector[i + 1] && at(i, j + 1)) {
242
- faces1.push([
243
- asPoint(at(i, j) as Vector<number>),
244
- asPoint(at(i + 1, j) as Vector<number>),
245
- asPoint(at(i, j + 1) as Vector<number>),
246
- ]);
250
+ const face = finiteFace(
251
+ at(i, j) as Vector<number>,
252
+ at(i + 1, j) as Vector<number>,
253
+ at(i, j + 1) as Vector<number>,
254
+ );
255
+ if (face) faces1.push(face);
247
256
  }
248
257
  }
249
258
  }
@@ -252,11 +261,12 @@ export class Graph3DUtils {
252
261
  for (let i = 1; i < width; i++) {
253
262
  for (let j = 1; j < height; j++) {
254
263
  if (at(i, j) && vector[i - 1] && at(i, j - 1)) {
255
- faces2.push([
256
- asPoint(at(i, j) as Vector<number>),
257
- asPoint(at(i - 1, j) as Vector<number>),
258
- asPoint(at(i, j - 1) as Vector<number>),
259
- ]);
264
+ const face = finiteFace(
265
+ at(i, j) as Vector<number>,
266
+ at(i - 1, j) as Vector<number>,
267
+ at(i, j - 1) as Vector<number>,
268
+ );
269
+ if (face) faces2.push(face);
260
270
  }
261
271
  }
262
272
  }
package/src/GraphUtils.ts CHANGED
@@ -98,7 +98,10 @@ export class GraphUtils {
98
98
  return [...points].map((p) => GraphUtils.barPlacement(p, barWidth));
99
99
  }
100
100
 
101
- /** A poly-line path through the given points. */
101
+ /**
102
+ * A poly-line path through the given points. Points with a non-finite x or y
103
+ * (NaN, +/-Infinity) are skipped and split the line into separate segments.
104
+ */
102
105
  static vectorToCurve(
103
106
  points: Vector<Vector<number>>,
104
107
  thickness = 0,
@@ -112,13 +115,18 @@ export class GraphUtils {
112
115
  ): Path2D {
113
116
  const stroke: StrokeStyle = { thickness, color, alpha, pixelHinting, scaleMode, caps, joints, miterLimit };
114
117
  const commands: PathCommand[] = [];
115
- if (points.length > 0) {
116
- const first = point(points[0] as Vector<number>);
117
- commands.push({ op: "moveTo", x: first.x, y: first.y });
118
- for (let i = 1; i < points.length; i++) {
119
- const pt = point(points[i] as Vector<number>);
120
- commands.push({ op: "lineTo", x: pt.x, y: pt.y });
118
+ // A NaN or +/-Infinity coordinate (a pole, a domain error) breaks the path: the
119
+ // run before it ends, and the next finite point starts a new run with `moveTo`
120
+ // rather than a `lineTo` drawn through the gap.
121
+ let penDown = false;
122
+ for (let i = 0; i < points.length; i++) {
123
+ const pt = point(points[i] as Vector<number>);
124
+ if (!Number.isFinite(pt.x) || !Number.isFinite(pt.y)) {
125
+ penDown = false;
126
+ continue;
121
127
  }
128
+ commands.push({ op: penDown ? "lineTo" : "moveTo", x: pt.x, y: pt.y });
129
+ penDown = true;
122
130
  }
123
131
  return { stroke, commands };
124
132
  }
package/src/Structure.ts CHANGED
@@ -272,9 +272,52 @@ export class Structure<T = unknown> {
272
272
  return new RangeError(`${op}: element ${String(x)} has no multiplicative inverse in this structure`);
273
273
  }
274
274
 
275
+ /**
276
+ * Determinant of a square matrix using only addition, subtraction and
277
+ * multiplication (Berkowitz's algorithm, O(n^4)), so it is valid over any
278
+ * commutative ring, including Z/nZ with composite `n` where a pivot may have
279
+ * no multiplicative inverse.
280
+ */
281
+ private determinantDivisionFree(alpha: SMat<T>): T {
282
+ const n = VectorUtils.width(alpha);
283
+ const a: T[][] = [...alpha].map((row) => [...(row as SVec<T>)]);
284
+ // p holds the characteristic-polynomial coefficients of the leading r x r block.
285
+ let p: T[] = [this.one];
286
+ for (let r = 1; r <= n; r++) {
287
+ const m = r - 1; // size of the leading block A_{r-1}
288
+ // Toeplitz column: [1, -a_rr, -R C, -R A C, -R A^2 C, ...]
289
+ const col: T[] = [this.one, this.negative(a[m][m] as T)];
290
+ let v: T[] = Array.from({ length: m }, (_, i) => a[i][m] as T); // C
291
+ for (let k = 2; k <= r; k++) {
292
+ let dot = this.zero;
293
+ for (let i = 0; i < m; i++) dot = this.add(dot, this.multiply(a[m][i] as T, v[i]));
294
+ col.push(this.negative(dot));
295
+ if (k < r) {
296
+ v = Array.from({ length: m }, (_, i) => {
297
+ let acc = this.zero;
298
+ for (let j = 0; j < m; j++) acc = this.add(acc, this.multiply(a[i][j] as T, v[j]));
299
+ return acc;
300
+ });
301
+ }
302
+ }
303
+ const next: T[] = [];
304
+ for (let i = 0; i <= r; i++) {
305
+ let acc = this.zero;
306
+ for (let j = 0; j < r && j <= i; j++) acc = this.add(acc, this.multiply(col[i - j], p[j]));
307
+ next.push(acc);
308
+ }
309
+ p = next;
310
+ }
311
+ // p = coefficients of det(xI - A); det(A) = (-1)^n * constant term.
312
+ const c = p[n];
313
+ return n % 2 === 0 ? c : this.negative(c);
314
+ }
315
+
275
316
  /**
276
317
  * Determinant via Gaussian elimination with row-swap pivoting, O(n^3)
277
- * instead of the previous O(n!) cofactor (Laplace) expansion.
318
+ * instead of the previous O(n!) cofactor (Laplace) expansion. Over a ring where
319
+ * a needed pivot has no multiplicative inverse (e.g. Z/nZ, composite `n`) it
320
+ * falls back to a division-free method, so the result is always defined.
278
321
  */
279
322
  determinant(alpha: SMat<T>): T {
280
323
  if (VectorUtils.width(alpha) !== VectorUtils.height(alpha)) return this.zero;
@@ -297,7 +340,7 @@ export class Structure<T = unknown> {
297
340
  }
298
341
  if (swap === -1) {
299
342
  if (wasZero && mat.slice(col + 1).every((row) => this.equality(row[col] as T, this.zero))) return this.zero;
300
- throw this.noInverse("determinant", mat[col][col] as T);
343
+ return this.determinantDivisionFree(alpha);
301
344
  }
302
345
  [mat[col], mat[swap]] = [mat[swap], mat[col]];
303
346
  sign = this.negative(sign);
@@ -331,8 +374,12 @@ export class Structure<T = unknown> {
331
374
  * operations, with a zero-pivot row swap (bug fix — the AS3 version had no
332
375
  * pivoting and divided by a zero pivot).
333
376
  *
334
- * @throws RangeError if the matrix is not square, is singular, or (over a ring
335
- * such as Z/nZ with composite n) a pivot has no multiplicative inverse.
377
+ * Over a ring such as Z/nZ with composite `n`, when elimination hits a pivot
378
+ * with no inverse it falls back to `det⁻¹ · adj(A)`, which succeeds exactly
379
+ * when the determinant is a unit.
380
+ *
381
+ * @throws RangeError if the matrix is not square, is singular, or (over a ring)
382
+ * its determinant has no multiplicative inverse.
336
383
  */
337
384
  invertMatrix(alpha: SMat<T>, checkDeterminant = true): SMat<T> {
338
385
  const n = VectorUtils.height(alpha);
@@ -341,7 +388,32 @@ export class Structure<T = unknown> {
341
388
  if (checkDeterminant && this.equality(this.determinant(alpha), this.zero)) {
342
389
  throw new RangeError("invertMatrix: matrix is singular");
343
390
  }
391
+ return this.invertByElimination(alpha) ?? this.invertByAdjugate(alpha);
392
+ }
393
+
394
+ /** `det⁻¹ · adj(A)`; needs no pivot inverses, only that det(A) is a unit. */
395
+ private invertByAdjugate(alpha: SMat<T>): SMat<T> {
396
+ const n = VectorUtils.height(alpha);
397
+ const rows: T[][] = [...alpha].map((row) => [...(row as SVec<T>)]);
398
+ const det = this.determinant(alpha);
399
+ if (this.equality(det, this.zero)) throw new RangeError("invertMatrix: matrix is singular");
400
+ if (!this.hasInverse(det)) throw this.noInverse("invertMatrix", det);
401
+ const detInv = this.reciprocal(det);
402
+ const out: T[][] = Array.from({ length: n }, () => new Array<T>(n));
403
+ for (let i = 0; i < n; i++) {
404
+ for (let j = 0; j < n; j++) {
405
+ const sub = rows.filter((_, r) => r !== i).map((row) => Vector.fromArray(row.filter((_, c) => c !== j)));
406
+ const minor = this.determinant(Vector.fromArray(sub));
407
+ const cofactor = (i + j) % 2 === 0 ? minor : this.negative(minor);
408
+ out[j][i] = this.multiply(detInv, cofactor); // adjugate is the transposed cofactor matrix
409
+ }
410
+ }
411
+ return Vector.fromArray(out.map((row) => Vector.fromArray(row)));
412
+ }
344
413
 
414
+ /** Gauss-Jordan; returns `null` if a pivot has no inverse (caller falls back to the adjugate). */
415
+ private invertByElimination(alpha: SMat<T>): SMat<T> | null {
416
+ const n = VectorUtils.height(alpha);
345
417
  const mat: T[][] = [...alpha].map((row) => [...(row as SVec<T>)]);
346
418
  const inv: T[][] = [...this.generateIdentity(n, n)].map((row) => [...(row as SVec<T>)]);
347
419
 
@@ -359,7 +431,7 @@ export class Structure<T = unknown> {
359
431
  if (wasZero && mat.slice(col + 1).every((row) => this.equality(row[col] as T, this.zero))) {
360
432
  throw new RangeError("invertMatrix: matrix is singular");
361
433
  }
362
- throw this.noInverse("invertMatrix", mat[col][col] as T);
434
+ return null;
363
435
  }
364
436
  [mat[col], mat[swap]] = [mat[swap], mat[col]];
365
437
  [inv[col], inv[swap]] = [inv[swap], inv[col]];