@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/DualNumber.d.ts +7 -0
- package/dist/DualNumber.d.ts.map +1 -1
- package/dist/DualNumber.js +12 -3
- package/dist/DualNumber.js.map +1 -1
- package/dist/Graph3DUtils.d.ts +2 -0
- package/dist/Graph3DUtils.d.ts.map +1 -1
- package/dist/Graph3DUtils.js +14 -10
- package/dist/Graph3DUtils.js.map +1 -1
- package/dist/GraphUtils.d.ts +4 -1
- package/dist/GraphUtils.d.ts.map +1 -1
- package/dist/GraphUtils.js +15 -7
- package/dist/GraphUtils.js.map +1 -1
- package/dist/Structure.d.ts +20 -3
- package/dist/Structure.d.ts.map +1 -1
- package/dist/Structure.js +80 -5
- package/dist/Structure.js.map +1 -1
- package/dist/Symbolic.d.ts +40 -4
- package/dist/Symbolic.d.ts.map +1 -1
- package/dist/Symbolic.js +624 -104
- package/dist/Symbolic.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/DualNumber.ts +13 -3
- package/src/Graph3DUtils.ts +20 -10
- package/src/GraphUtils.ts +15 -7
- package/src/Structure.ts +77 -5
- package/src/Symbolic.ts +652 -103
- package/src/index.ts +1 -0
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
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
|
|
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
|
|
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
|
|
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. */
|
package/src/Graph3DUtils.ts
CHANGED
|
@@ -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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
335
|
-
*
|
|
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
|
-
|
|
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]];
|