@johnhenry/math-sample 0.0.0-stage → 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/README.md +244 -2
- package/dist/budget.d.ts +47 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +44 -0
- package/dist/budget.js.map +1 -0
- package/dist/complex.d.ts +79 -0
- package/dist/complex.d.ts.map +1 -0
- package/dist/complex.js +236 -0
- package/dist/complex.js.map +1 -0
- package/dist/expr.d.ts +38 -0
- package/dist/expr.d.ts.map +1 -0
- package/dist/expr.js +264 -0
- package/dist/expr.js.map +1 -0
- package/dist/field2d.d.ts +58 -0
- package/dist/field2d.d.ts.map +1 -0
- package/dist/field2d.js +199 -0
- package/dist/field2d.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mesh.d.ts +90 -0
- package/dist/mesh.d.ts.map +1 -0
- package/dist/mesh.js +294 -0
- package/dist/mesh.js.map +1 -0
- package/dist/ode.d.ts +147 -0
- package/dist/ode.d.ts.map +1 -0
- package/dist/ode.js +466 -0
- package/dist/ode.js.map +1 -0
- package/dist/sample.d.ts +114 -0
- package/dist/sample.d.ts.map +1 -0
- package/dist/sample.js +308 -0
- package/dist/sample.js.map +1 -0
- package/dist/series.d.ts +53 -0
- package/dist/series.d.ts.map +1 -0
- package/dist/series.js +158 -0
- package/dist/series.js.map +1 -0
- package/dist/svg.d.ts +37 -0
- package/dist/svg.d.ts.map +1 -0
- package/dist/svg.js +82 -0
- package/dist/svg.js.map +1 -0
- package/dist/ticks.d.ts +17 -0
- package/dist/ticks.d.ts.map +1 -0
- package/dist/ticks.js +47 -0
- package/dist/ticks.js.map +1 -0
- package/dist/viewport.d.ts +59 -0
- package/dist/viewport.d.ts.map +1 -0
- package/dist/viewport.js +111 -0
- package/dist/viewport.js.map +1 -0
- package/package.json +70 -4
- package/src/budget.ts +72 -0
- package/src/complex.ts +327 -0
- package/src/expr.ts +283 -0
- package/src/field2d.ts +259 -0
- package/src/index.ts +112 -0
- package/src/mesh.ts +376 -0
- package/src/ode.ts +633 -0
- package/src/sample.ts +391 -0
- package/src/series.ts +209 -0
- package/src/svg.ts +124 -0
- package/src/ticks.ts +46 -0
- package/src/viewport.ts +150 -0
package/dist/complex.js
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { assertCount, assertRange, Meter, progress } from "./budget.js";
|
|
2
|
+
/** Sample `f` at the centre of each cell of a `width` x `height` grid over the rectangle. */
|
|
3
|
+
export function sampleComplexRaster(f, reDomain, imDomain, options = {}) {
|
|
4
|
+
const width = options.width ?? 128;
|
|
5
|
+
const height = options.height ?? 128;
|
|
6
|
+
assertCount("width", width, 1);
|
|
7
|
+
assertCount("height", height, 1);
|
|
8
|
+
assertRange("re domain", reDomain);
|
|
9
|
+
assertRange("im domain", imDomain);
|
|
10
|
+
const meter = new Meter(options, options);
|
|
11
|
+
const re = new Float32Array(width * height).fill(Number.NaN);
|
|
12
|
+
const im = new Float32Array(width * height).fill(Number.NaN);
|
|
13
|
+
const abs = new Float32Array(width * height).fill(Number.NaN);
|
|
14
|
+
const arg = new Float32Array(width * height).fill(Number.NaN);
|
|
15
|
+
let rows = 0;
|
|
16
|
+
let reason;
|
|
17
|
+
for (let j = 0; j < height; j++) {
|
|
18
|
+
reason = meter.check(width);
|
|
19
|
+
if (reason)
|
|
20
|
+
break;
|
|
21
|
+
const y = imDomain.min + ((imDomain.max - imDomain.min) * (j + 0.5)) / height;
|
|
22
|
+
for (let i = 0; i < width; i++) {
|
|
23
|
+
const x = reDomain.min + ((reDomain.max - reDomain.min) * (i + 0.5)) / width;
|
|
24
|
+
const w = f(x, y);
|
|
25
|
+
const k = j * width + i;
|
|
26
|
+
if (Number.isFinite(w[0]) && Number.isFinite(w[1])) {
|
|
27
|
+
re[k] = w[0];
|
|
28
|
+
im[k] = w[1];
|
|
29
|
+
abs[k] = Math.hypot(w[0], w[1]);
|
|
30
|
+
arg[k] = Math.atan2(w[1], w[0]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
meter.spend(width);
|
|
34
|
+
rows++;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
width,
|
|
38
|
+
height: rows,
|
|
39
|
+
re: re.slice(0, width * rows),
|
|
40
|
+
im: im.slice(0, width * rows),
|
|
41
|
+
abs: abs.slice(0, width * rows),
|
|
42
|
+
arg: arg.slice(0, width * rows),
|
|
43
|
+
progress: progress(rows, height, reason),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** The image under `f` of a rectangular grid of lines: where the grid lines go, drawn as the conformal-map picture. */
|
|
47
|
+
export function conformalGrid(f, reDomain, imDomain, options = {}) {
|
|
48
|
+
const nRe = options.reLines ?? 11;
|
|
49
|
+
const nIm = options.imLines ?? 11;
|
|
50
|
+
const n = options.samplesPerLine ?? 200;
|
|
51
|
+
const bound = options.bound ?? 1e6;
|
|
52
|
+
assertCount("reLines", nRe, 1);
|
|
53
|
+
assertCount("imLines", nIm, 1);
|
|
54
|
+
assertCount("samplesPerLine", n);
|
|
55
|
+
assertRange("re domain", reDomain);
|
|
56
|
+
assertRange("im domain", imDomain);
|
|
57
|
+
const lines = [];
|
|
58
|
+
const trace = (kind, value, d) => {
|
|
59
|
+
const xs = [];
|
|
60
|
+
const ys = [];
|
|
61
|
+
let pending = false;
|
|
62
|
+
let px = Number.NaN;
|
|
63
|
+
let py = Number.NaN;
|
|
64
|
+
for (let k = 0; k < n; k++) {
|
|
65
|
+
const s = k === n - 1 ? d.max : d.min + ((d.max - d.min) * k) / (n - 1);
|
|
66
|
+
const w = kind === "re" ? f(value, s) : f(s, value);
|
|
67
|
+
const good = Number.isFinite(w[0]) && Number.isFinite(w[1]) && Math.hypot(w[0], w[1]) <= bound;
|
|
68
|
+
if (!good) {
|
|
69
|
+
pending = xs.length > 0;
|
|
70
|
+
px = Number.NaN;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const cut = options.maxStep !== undefined && !Number.isNaN(px) && Math.hypot(w[0] - px, w[1] - py) > options.maxStep;
|
|
74
|
+
if ((pending || cut) && xs.length > 0) {
|
|
75
|
+
xs.push(Number.NaN);
|
|
76
|
+
ys.push(Number.NaN);
|
|
77
|
+
}
|
|
78
|
+
xs.push(w[0]);
|
|
79
|
+
ys.push(w[1]);
|
|
80
|
+
px = w[0];
|
|
81
|
+
py = w[1];
|
|
82
|
+
pending = false;
|
|
83
|
+
}
|
|
84
|
+
return { kind, value, x: Float64Array.from(xs), y: Float64Array.from(ys) };
|
|
85
|
+
};
|
|
86
|
+
for (let i = 0; i < nRe; i++)
|
|
87
|
+
lines.push(trace("re", nRe === 1 ? reDomain.min : reDomain.min + ((reDomain.max - reDomain.min) * i) / (nRe - 1), imDomain));
|
|
88
|
+
for (let j = 0; j < nIm; j++)
|
|
89
|
+
lines.push(trace("im", nIm === 1 ? imDomain.min : imDomain.min + ((imDomain.max - imDomain.min) * j) / (nIm - 1), reDomain));
|
|
90
|
+
return lines;
|
|
91
|
+
}
|
|
92
|
+
const wrap = (d) => {
|
|
93
|
+
while (d > Math.PI)
|
|
94
|
+
d -= 2 * Math.PI;
|
|
95
|
+
while (d < -Math.PI)
|
|
96
|
+
d += 2 * Math.PI;
|
|
97
|
+
return d;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Zeros and poles of `f` inside a rectangle, by the argument principle: the winding number of `f` around each
|
|
101
|
+
* grid cell is (zeros - poles) inside it; non-zero cells are refined with Newton's method (on `f` for a
|
|
102
|
+
* zero, on `1/f` for a pole, scaled by the multiplicity). A zero and a pole inside one cell cancel and are missed:
|
|
103
|
+
* raise `grid`. The search grid is offset by an irrational fraction of a cell and extended past the
|
|
104
|
+
* rectangle, so round-number domains do not put roots on cell edges; results inside the rectangle (or on its edge) are
|
|
105
|
+
* kept and results within the tolerance are merged. `progress.rows` counts grid rows searched.
|
|
106
|
+
*/
|
|
107
|
+
export function findZerosAndPoles(f, reDomain, imDomain, options = {}) {
|
|
108
|
+
const grid = options.grid ?? 24;
|
|
109
|
+
assertCount("grid", grid, 1);
|
|
110
|
+
assertRange("re domain", reDomain);
|
|
111
|
+
assertRange("im domain", imDomain);
|
|
112
|
+
const size = Math.max(reDomain.max - reDomain.min, imDomain.max - imDomain.min);
|
|
113
|
+
const tol = (options.tolerance ?? 1e-10) * size;
|
|
114
|
+
const meter = new Meter(options, options);
|
|
115
|
+
const dx = (reDomain.max - reDomain.min) / grid;
|
|
116
|
+
const dy = (imDomain.max - imDomain.min) / grid;
|
|
117
|
+
const found = [];
|
|
118
|
+
const argAt = (x, y) => {
|
|
119
|
+
const w = f(x, y);
|
|
120
|
+
if (w[0] === 0 && w[1] === 0)
|
|
121
|
+
return Number.NaN; // an exact zero has no argument
|
|
122
|
+
return Math.atan2(w[1], w[0]);
|
|
123
|
+
};
|
|
124
|
+
// winding of f along segment p->q, subdividing until the phase moves < 1 rad per piece
|
|
125
|
+
const segment = (x0, y0, a0, x1, y1, a1, depth) => {
|
|
126
|
+
const d = wrap(a1 - a0);
|
|
127
|
+
// a minimum depth keeps a high-order root from aliasing a whole turn (3 theta moving 2 pi in one piece)
|
|
128
|
+
if ((depth >= 4 && Math.abs(d) < 1) || depth >= 14)
|
|
129
|
+
return d;
|
|
130
|
+
const xm = (x0 + x1) / 2;
|
|
131
|
+
const ym = (y0 + y1) / 2;
|
|
132
|
+
const am = argAt(xm, ym);
|
|
133
|
+
return segment(x0, y0, a0, xm, ym, am, depth + 1) + segment(xm, ym, am, x1, y1, a1, depth + 1);
|
|
134
|
+
};
|
|
135
|
+
const winding = (x0, y0, x1, y1) => {
|
|
136
|
+
const pts = [
|
|
137
|
+
[x0, y0],
|
|
138
|
+
[x1, y0],
|
|
139
|
+
[x1, y1],
|
|
140
|
+
[x0, y1],
|
|
141
|
+
[x0, y0],
|
|
142
|
+
];
|
|
143
|
+
const args = pts.map(([x, y]) => argAt(x, y));
|
|
144
|
+
if (args.some((a) => !Number.isFinite(a)))
|
|
145
|
+
return Number.NaN;
|
|
146
|
+
let total = 0;
|
|
147
|
+
for (let k = 0; k < 4; k++) {
|
|
148
|
+
const p = pts[k];
|
|
149
|
+
const q = pts[k + 1];
|
|
150
|
+
total += segment(p[0], p[1], args[k], q[0], q[1], args[k + 1], 0);
|
|
151
|
+
}
|
|
152
|
+
return Math.round(total / (2 * Math.PI));
|
|
153
|
+
};
|
|
154
|
+
const newton = (x, y, kind, order, box) => {
|
|
155
|
+
const g = (a, b) => {
|
|
156
|
+
const w = f(a, b);
|
|
157
|
+
if (kind === "zero")
|
|
158
|
+
return [w[0], w[1]];
|
|
159
|
+
const m = w[0] * w[0] + w[1] * w[1];
|
|
160
|
+
return [w[0] / m, -w[1] / m]; // 1/f
|
|
161
|
+
};
|
|
162
|
+
let zx = x;
|
|
163
|
+
let zy = y;
|
|
164
|
+
for (let it = 0; it < 60; it++) {
|
|
165
|
+
const [gr, gi] = g(zx, zy);
|
|
166
|
+
if (!Number.isFinite(gr) || !Number.isFinite(gi))
|
|
167
|
+
return undefined;
|
|
168
|
+
const h = 1e-7 * Math.max(1, Math.abs(zx), Math.abs(zy));
|
|
169
|
+
const [ar, ai] = g(zx + h, zy);
|
|
170
|
+
const dr = (ar - gr) / h; // derivative of an analytic function = d/dx
|
|
171
|
+
const di = (ai - gi) / h;
|
|
172
|
+
const den = dr * dr + di * di;
|
|
173
|
+
if (!(den > 0) || !Number.isFinite(den))
|
|
174
|
+
return undefined;
|
|
175
|
+
// step = order * g / g'
|
|
176
|
+
const sr = (order * (gr * dr + gi * di)) / den;
|
|
177
|
+
const si = (order * (gi * dr - gr * di)) / den;
|
|
178
|
+
zx -= sr;
|
|
179
|
+
zy -= si;
|
|
180
|
+
if (Math.hypot(sr, si) < tol) {
|
|
181
|
+
const pad = 0.5 * Math.max(dx, dy);
|
|
182
|
+
if (zx < box[0] - pad || zx > box[1] + pad || zy < box[2] - pad || zy > box[3] + pad)
|
|
183
|
+
return undefined;
|
|
184
|
+
return [zx, zy];
|
|
185
|
+
}
|
|
186
|
+
if (!Number.isFinite(zx) || !Number.isFinite(zy))
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
return undefined;
|
|
190
|
+
};
|
|
191
|
+
// The search grid is shifted by an irrational fraction of a cell and extended by one cell on each side, so
|
|
192
|
+
// roots and poles on a round-number domain (z^3 - z on [-2, 2]) sit inside cells, not on their edges or
|
|
193
|
+
// corners. Candidates outside the requested rectangle are discarded at the end.
|
|
194
|
+
const OFFSET = 0.3819660112501051;
|
|
195
|
+
const gx0 = reDomain.min - (1 - OFFSET) * dx;
|
|
196
|
+
const gy0 = imDomain.min - (1 - OFFSET) * dy;
|
|
197
|
+
const cells = grid + 1;
|
|
198
|
+
const slack = 1e-9 * size;
|
|
199
|
+
const insideRect = (x, y) => x >= reDomain.min - slack && x <= reDomain.max + slack && y >= imDomain.min - slack && y <= imDomain.max + slack;
|
|
200
|
+
let rows = 0;
|
|
201
|
+
let reason;
|
|
202
|
+
for (let j = 0; j < cells; j++) {
|
|
203
|
+
reason = meter.check(cells * 4);
|
|
204
|
+
if (reason)
|
|
205
|
+
break;
|
|
206
|
+
for (let i = 0; i < cells; i++) {
|
|
207
|
+
const x0 = gx0 + i * dx;
|
|
208
|
+
const y0 = gy0 + j * dy;
|
|
209
|
+
let w = winding(x0, y0, x0 + dx, y0 + dy);
|
|
210
|
+
let ex = 0;
|
|
211
|
+
if (Number.isNaN(w)) {
|
|
212
|
+
// f is zero or non-finite on this cell's boundary (an exact root/pole on an edge): retry slightly inflated
|
|
213
|
+
ex = 0.0123 * dx;
|
|
214
|
+
w = winding(x0 - ex, y0 - 0.0123 * dy, x0 + dx + ex, y0 + dy + 0.0123 * dy);
|
|
215
|
+
}
|
|
216
|
+
if (!Number.isFinite(w) || w === 0)
|
|
217
|
+
continue;
|
|
218
|
+
const kind = w > 0 ? "zero" : "pole";
|
|
219
|
+
const order = Math.abs(w);
|
|
220
|
+
const cx = x0 + dx / 2;
|
|
221
|
+
const cy = y0 + dy / 2;
|
|
222
|
+
const refined = newton(cx, cy, kind, order, [x0, x0 + dx, y0, y0 + dy]);
|
|
223
|
+
const [rx, ry] = refined ?? [cx, cy];
|
|
224
|
+
if (!insideRect(rx, ry))
|
|
225
|
+
continue;
|
|
226
|
+
if (found.some((p) => p.kind === kind && Math.hypot(p.re - rx, p.im - ry) < Math.max(tol * 1e3, 1e-7 * size)))
|
|
227
|
+
continue;
|
|
228
|
+
found.push({ re: rx, im: ry, kind, order, refined: refined !== undefined });
|
|
229
|
+
}
|
|
230
|
+
meter.spend(cells * 4);
|
|
231
|
+
rows++;
|
|
232
|
+
}
|
|
233
|
+
found.sort((a, b) => a.re - b.re || a.im - b.im);
|
|
234
|
+
return { items: found, progress: progress(rows, cells, reason) };
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=complex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complex.js","sourceRoot":"","sources":["../src/complex.ts"],"names":[],"mappings":"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"}
|
package/dist/expr.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Expr } from "@johnhenry/math";
|
|
2
|
+
import type { Fn1 } from "./sample.ts";
|
|
3
|
+
export interface CompileOptions {
|
|
4
|
+
/** The free variable that becomes the argument. Default `"x"`. */
|
|
5
|
+
variable?: string;
|
|
6
|
+
/** Fixed values for every other free variable (slider values, say). */
|
|
7
|
+
params?: Record<string, number>;
|
|
8
|
+
/**
|
|
9
|
+
* Read juxtaposition as multiplication in source text (`2x`, `3sin(x)`, `(x+1)(x-1)`), the way people
|
|
10
|
+
* type maths. Default `false`. Needs `@johnhenry/math` 0.1.0 or later; multi-letter variable names are
|
|
11
|
+
* unavailable when it is on (see `ParseOptions` in `@johnhenry/math`). Ignored when `expr` is already a parsed `Expr`.
|
|
12
|
+
*/
|
|
13
|
+
implicitMultiplication?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Compile an `@johnhenry/math` expression (source text or a parsed `Expr`)
|
|
17
|
+
* into a plain `(x) => number` the samplers take. The AST is walked once; the
|
|
18
|
+
* closure is cheap to call thousands of times. This is the only module that
|
|
19
|
+
* needs `@johnhenry/math` (an optional peer dependency), so a Worker can
|
|
20
|
+
* receive an expression string plus params, compile it here, and sample.
|
|
21
|
+
*
|
|
22
|
+
* Source text uses `@johnhenry/math`'s grammar: write `2*x`, or pass
|
|
23
|
+
* `implicitMultiplication: true` to accept `2x`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function compileExpression(expr: Expr | string, options?: CompileOptions): Fn1;
|
|
26
|
+
/**
|
|
27
|
+
* Taylor coefficients `a_k = f^(k)(x0) / k!` for `k = 0..order` of an expression. They are computed by truncated
|
|
28
|
+
* power-series ("jet") arithmetic, O(order^2) per node, so order 12 of `sin(x)*exp(x)/(1+x^2)` takes well under a
|
|
29
|
+
* millisecond. Supported: `+ - * /`, powers (integer or real exponent, or a variable exponent), and `exp ln sqrt cbrt sin
|
|
30
|
+
* cos tan sinh cosh tanh atan asin acos`. Any other node falls back to repeated symbolic differentiation with
|
|
31
|
+
* simplification after every derivative, which grows quickly: keep `order` at or below 8 there. A coefficient that is
|
|
32
|
+
* not finite at `x0` (a pole, `ln(0)`) is `NaN` or `Infinity`, and the partial sums built on it are gaps.
|
|
33
|
+
*/
|
|
34
|
+
export declare function taylorCoefficients(expr: Expr | string, x0: number, order: number, options?: {
|
|
35
|
+
variable?: string;
|
|
36
|
+
params?: Record<string, number>;
|
|
37
|
+
}): Float64Array;
|
|
38
|
+
//# sourceMappingURL=expr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.d.ts","sourceRoot":"","sources":["../src/expr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAY,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,GAAG,CAYxF;AAqND;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GACnE,YAAY,CAkBd"}
|
package/dist/expr.js
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { Symbolic } from "@johnhenry/math";
|
|
2
|
+
/**
|
|
3
|
+
* Compile an `@johnhenry/math` expression (source text or a parsed `Expr`)
|
|
4
|
+
* into a plain `(x) => number` the samplers take. The AST is walked once; the
|
|
5
|
+
* closure is cheap to call thousands of times. This is the only module that
|
|
6
|
+
* needs `@johnhenry/math` (an optional peer dependency), so a Worker can
|
|
7
|
+
* receive an expression string plus params, compile it here, and sample.
|
|
8
|
+
*
|
|
9
|
+
* Source text uses `@johnhenry/math`'s grammar: write `2*x`, or pass
|
|
10
|
+
* `implicitMultiplication: true` to accept `2x`.
|
|
11
|
+
*/
|
|
12
|
+
export function compileExpression(expr, options = {}) {
|
|
13
|
+
const variable = options.variable ?? "x";
|
|
14
|
+
const tree = typeof expr === "string"
|
|
15
|
+
? Symbolic.parse(expr, { implicitMultiplication: options.implicitMultiplication === true })
|
|
16
|
+
: expr;
|
|
17
|
+
const compiled = Symbolic.compile(tree);
|
|
18
|
+
const env = { ...options.params, [variable]: 0 };
|
|
19
|
+
return (x) => {
|
|
20
|
+
env[variable] = x;
|
|
21
|
+
return compiled(env);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
class JetUnsupported extends Error {
|
|
25
|
+
}
|
|
26
|
+
function jmul(a, b) {
|
|
27
|
+
const n = a.length;
|
|
28
|
+
const c = new Float64Array(n);
|
|
29
|
+
for (let i = 0; i < n; i++) {
|
|
30
|
+
const ai = a[i];
|
|
31
|
+
if (ai === 0)
|
|
32
|
+
continue;
|
|
33
|
+
for (let j = 0; i + j < n; j++)
|
|
34
|
+
c[i + j] = c[i + j] + ai * b[j];
|
|
35
|
+
}
|
|
36
|
+
return c;
|
|
37
|
+
}
|
|
38
|
+
function jdiv(a, b) {
|
|
39
|
+
const n = a.length;
|
|
40
|
+
const c = new Float64Array(n);
|
|
41
|
+
for (let k = 0; k < n; k++) {
|
|
42
|
+
let acc = a[k];
|
|
43
|
+
for (let j = 1; j <= k; j++)
|
|
44
|
+
acc -= b[j] * c[k - j];
|
|
45
|
+
c[k] = acc / b[0];
|
|
46
|
+
}
|
|
47
|
+
return c;
|
|
48
|
+
}
|
|
49
|
+
const jconst = (v, n) => {
|
|
50
|
+
const j = new Float64Array(n);
|
|
51
|
+
j[0] = v;
|
|
52
|
+
return j;
|
|
53
|
+
};
|
|
54
|
+
function jexp(a) {
|
|
55
|
+
const n = a.length;
|
|
56
|
+
const e = new Float64Array(n);
|
|
57
|
+
e[0] = Math.exp(a[0]);
|
|
58
|
+
for (let k = 1; k < n; k++) {
|
|
59
|
+
let acc = 0;
|
|
60
|
+
for (let j = 1; j <= k; j++)
|
|
61
|
+
acc += j * a[j] * e[k - j];
|
|
62
|
+
e[k] = acc / k;
|
|
63
|
+
}
|
|
64
|
+
return e;
|
|
65
|
+
}
|
|
66
|
+
function jln(a) {
|
|
67
|
+
const n = a.length;
|
|
68
|
+
const l = new Float64Array(n);
|
|
69
|
+
l[0] = Math.log(a[0]);
|
|
70
|
+
for (let k = 1; k < n; k++) {
|
|
71
|
+
let acc = 0;
|
|
72
|
+
for (let j = 1; j < k; j++)
|
|
73
|
+
acc += j * l[j] * a[k - j];
|
|
74
|
+
l[k] = (a[k] - acc / k) / a[0];
|
|
75
|
+
}
|
|
76
|
+
return l;
|
|
77
|
+
}
|
|
78
|
+
/** sin/cos (hyperbolic = true for sinh/cosh) of a jet, together. */
|
|
79
|
+
function jsincos(a, hyperbolic) {
|
|
80
|
+
const n = a.length;
|
|
81
|
+
const s = new Float64Array(n);
|
|
82
|
+
const c = new Float64Array(n);
|
|
83
|
+
s[0] = hyperbolic ? Math.sinh(a[0]) : Math.sin(a[0]);
|
|
84
|
+
c[0] = hyperbolic ? Math.cosh(a[0]) : Math.cos(a[0]);
|
|
85
|
+
for (let k = 1; k < n; k++) {
|
|
86
|
+
let ss = 0;
|
|
87
|
+
let cc = 0;
|
|
88
|
+
for (let j = 1; j <= k; j++) {
|
|
89
|
+
ss += j * a[j] * c[k - j];
|
|
90
|
+
cc += j * a[j] * s[k - j];
|
|
91
|
+
}
|
|
92
|
+
s[k] = ss / k;
|
|
93
|
+
c[k] = (hyperbolic ? cc : -cc) / k;
|
|
94
|
+
}
|
|
95
|
+
return [s, c];
|
|
96
|
+
}
|
|
97
|
+
function jpowReal(a, p) {
|
|
98
|
+
const n = a.length;
|
|
99
|
+
const f = new Float64Array(n);
|
|
100
|
+
const a0 = a[0];
|
|
101
|
+
f[0] = a0 ** p;
|
|
102
|
+
for (let k = 1; k < n; k++) {
|
|
103
|
+
let acc = 0;
|
|
104
|
+
for (let j = 1; j <= k; j++)
|
|
105
|
+
acc += (p * j - (k - j)) * a[j] * f[k - j];
|
|
106
|
+
f[k] = acc / (k * a0);
|
|
107
|
+
}
|
|
108
|
+
return f;
|
|
109
|
+
}
|
|
110
|
+
function jpowInt(a, m) {
|
|
111
|
+
let r = jconst(1, a.length);
|
|
112
|
+
let base = a;
|
|
113
|
+
let e = Math.abs(m);
|
|
114
|
+
while (e > 0) {
|
|
115
|
+
if (e & 1)
|
|
116
|
+
r = jmul(r, base);
|
|
117
|
+
base = jmul(base, base);
|
|
118
|
+
e = Math.floor(e / 2);
|
|
119
|
+
}
|
|
120
|
+
return m < 0 ? jdiv(jconst(1, a.length), r) : r;
|
|
121
|
+
}
|
|
122
|
+
/** Integrate a jet's derivative: given g = f', return f with f(0) = f0. */
|
|
123
|
+
function jantiderivative(g, f0) {
|
|
124
|
+
const n = g.length;
|
|
125
|
+
const f = new Float64Array(n);
|
|
126
|
+
f[0] = f0;
|
|
127
|
+
for (let k = 1; k < n; k++)
|
|
128
|
+
f[k] = g[k - 1] / k;
|
|
129
|
+
return f;
|
|
130
|
+
}
|
|
131
|
+
function jderivative(a) {
|
|
132
|
+
const n = a.length;
|
|
133
|
+
const d = new Float64Array(n);
|
|
134
|
+
for (let k = 0; k + 1 < n; k++)
|
|
135
|
+
d[k] = (k + 1) * a[k + 1];
|
|
136
|
+
return d;
|
|
137
|
+
}
|
|
138
|
+
function jfunc(name, a) {
|
|
139
|
+
const n = a.length;
|
|
140
|
+
const one = jconst(1, n);
|
|
141
|
+
switch (name) {
|
|
142
|
+
case "exp":
|
|
143
|
+
return jexp(a);
|
|
144
|
+
case "ln":
|
|
145
|
+
return jln(a);
|
|
146
|
+
case "sqrt":
|
|
147
|
+
return jpowReal(a, 0.5);
|
|
148
|
+
case "cbrt":
|
|
149
|
+
return jpowReal(a, 1 / 3);
|
|
150
|
+
case "sin":
|
|
151
|
+
return jsincos(a, false)[0];
|
|
152
|
+
case "cos":
|
|
153
|
+
return jsincos(a, false)[1];
|
|
154
|
+
case "tan": {
|
|
155
|
+
const [s, c] = jsincos(a, false);
|
|
156
|
+
return jdiv(s, c);
|
|
157
|
+
}
|
|
158
|
+
case "sinh":
|
|
159
|
+
return jsincos(a, true)[0];
|
|
160
|
+
case "cosh":
|
|
161
|
+
return jsincos(a, true)[1];
|
|
162
|
+
case "tanh": {
|
|
163
|
+
const [s, c] = jsincos(a, true);
|
|
164
|
+
return jdiv(s, c);
|
|
165
|
+
}
|
|
166
|
+
case "atan": {
|
|
167
|
+
const d = jdiv(jderivative(a), jplus(one, jmul(a, a), 1));
|
|
168
|
+
return jantiderivative(d, Math.atan(a[0]));
|
|
169
|
+
}
|
|
170
|
+
case "asin":
|
|
171
|
+
case "acos": {
|
|
172
|
+
const inv = jpowReal(jplus(one, jmul(a, a), -1), -0.5);
|
|
173
|
+
const d = jmul(jderivative(a), inv);
|
|
174
|
+
return name === "asin"
|
|
175
|
+
? jantiderivative(d, Math.asin(a[0]))
|
|
176
|
+
: jantiderivative(d.map((v) => -v), Math.acos(a[0]));
|
|
177
|
+
}
|
|
178
|
+
default:
|
|
179
|
+
throw new JetUnsupported(name);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function jplus(a, b, sign) {
|
|
183
|
+
const c = new Float64Array(a.length);
|
|
184
|
+
for (let k = 0; k < a.length; k++)
|
|
185
|
+
c[k] = a[k] + sign * b[k];
|
|
186
|
+
return c;
|
|
187
|
+
}
|
|
188
|
+
function evalJet(e, variable, x0, params, n) {
|
|
189
|
+
const go = (t) => {
|
|
190
|
+
switch (t.type) {
|
|
191
|
+
case "const":
|
|
192
|
+
return jconst(t.value, n);
|
|
193
|
+
case "var": {
|
|
194
|
+
if (t.name === variable) {
|
|
195
|
+
const j = jconst(x0, n);
|
|
196
|
+
if (n > 1)
|
|
197
|
+
j[1] = 1;
|
|
198
|
+
return j;
|
|
199
|
+
}
|
|
200
|
+
return jconst(params[t.name] ?? Number.NaN, n);
|
|
201
|
+
}
|
|
202
|
+
case "neg":
|
|
203
|
+
return go(t.arg).map((v) => -v);
|
|
204
|
+
case "add":
|
|
205
|
+
return jplus(go(t.left), go(t.right), 1);
|
|
206
|
+
case "sub":
|
|
207
|
+
return jplus(go(t.left), go(t.right), -1);
|
|
208
|
+
case "mul":
|
|
209
|
+
return jmul(go(t.left), go(t.right));
|
|
210
|
+
case "div":
|
|
211
|
+
return jdiv(go(t.left), go(t.right));
|
|
212
|
+
case "func":
|
|
213
|
+
return jfunc(t.name, go(t.arg));
|
|
214
|
+
case "pow": {
|
|
215
|
+
const b = go(t.base);
|
|
216
|
+
const ex = go(t.exp);
|
|
217
|
+
const constExp = ex.every((v, k) => k === 0 || v === 0);
|
|
218
|
+
if (constExp) {
|
|
219
|
+
const p = ex[0];
|
|
220
|
+
if (Number.isInteger(p) && Math.abs(p) <= 256)
|
|
221
|
+
return jpowInt(b, p);
|
|
222
|
+
return jpowReal(b, p);
|
|
223
|
+
}
|
|
224
|
+
return jexp(jmul(ex, jln(b)));
|
|
225
|
+
}
|
|
226
|
+
default:
|
|
227
|
+
throw new JetUnsupported(t.type);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
return go(e);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Taylor coefficients `a_k = f^(k)(x0) / k!` for `k = 0..order` of an expression. They are computed by truncated
|
|
234
|
+
* power-series ("jet") arithmetic, O(order^2) per node, so order 12 of `sin(x)*exp(x)/(1+x^2)` takes well under a
|
|
235
|
+
* millisecond. Supported: `+ - * /`, powers (integer or real exponent, or a variable exponent), and `exp ln sqrt cbrt sin
|
|
236
|
+
* cos tan sinh cosh tanh atan asin acos`. Any other node falls back to repeated symbolic differentiation with
|
|
237
|
+
* simplification after every derivative, which grows quickly: keep `order` at or below 8 there. A coefficient that is
|
|
238
|
+
* not finite at `x0` (a pole, `ln(0)`) is `NaN` or `Infinity`, and the partial sums built on it are gaps.
|
|
239
|
+
*/
|
|
240
|
+
export function taylorCoefficients(expr, x0, order, options = {}) {
|
|
241
|
+
if (!Number.isInteger(order) || order < 0)
|
|
242
|
+
throw new RangeError("order must be a non-negative integer");
|
|
243
|
+
const variable = options.variable ?? "x";
|
|
244
|
+
const tree = typeof expr === "string" ? Symbolic.parse(expr) : expr;
|
|
245
|
+
try {
|
|
246
|
+
return evalJet(tree, variable, x0, options.params ?? {}, order + 1);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
if (!(err instanceof JetUnsupported))
|
|
250
|
+
throw err;
|
|
251
|
+
}
|
|
252
|
+
let term = tree;
|
|
253
|
+
const out = new Float64Array(order + 1);
|
|
254
|
+
let factorial = 1;
|
|
255
|
+
for (let k = 0; k <= order; k++) {
|
|
256
|
+
if (k > 0)
|
|
257
|
+
factorial *= k;
|
|
258
|
+
out[k] = Symbolic.evaluate(term, { ...options.params, [variable]: x0 }) / factorial;
|
|
259
|
+
if (k < order)
|
|
260
|
+
term = Symbolic.simplify(Symbolic.differentiate(term, variable));
|
|
261
|
+
}
|
|
262
|
+
return out;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=expr.js.map
|
package/dist/expr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.js","sourceRoot":"","sources":["../src/expr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type Budget, type Cancellable, type Progress } from "./budget.ts";
|
|
2
|
+
import type { Domain, Samples } from "./sample.ts";
|
|
3
|
+
export type Fn2 = (x: number, y: number) => number;
|
|
4
|
+
export interface Grid2Options extends Budget, Cancellable {
|
|
5
|
+
/** Cells per side of the sampling grid (`grid + 1` nodes per side). Default 128. */
|
|
6
|
+
grid?: number | [number, number];
|
|
7
|
+
}
|
|
8
|
+
export interface ImplicitCurve {
|
|
9
|
+
/**
|
|
10
|
+
* Segments as rows: each segment is two rows (its endpoints) followed by one `NaN` separator row, so
|
|
11
|
+
* `Samples` gap rules hold and `runsOf` yields one run per segment (join them if you wish).
|
|
12
|
+
*/
|
|
13
|
+
segments: Samples;
|
|
14
|
+
segmentCount: number;
|
|
15
|
+
progress: Progress;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The curve `f(x, y) = level` (default 0) by marching squares on a regular grid. A saddle cell is joined by its
|
|
19
|
+
* centre value. Cells with a non-finite corner are skipped (a hole, not a spike). With a budget,
|
|
20
|
+
* `progress.rows` counts grid rows finished.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sampleImplicit(f: Fn2, xDomain: Domain, yDomain: Domain, options?: Grid2Options & {
|
|
23
|
+
level?: number;
|
|
24
|
+
}): ImplicitCurve;
|
|
25
|
+
export interface Contours {
|
|
26
|
+
levels: number[];
|
|
27
|
+
/** One entry per level, in `levels` order. */
|
|
28
|
+
curves: Array<{
|
|
29
|
+
level: number;
|
|
30
|
+
segments: Samples;
|
|
31
|
+
segmentCount: number;
|
|
32
|
+
}>;
|
|
33
|
+
progress: Progress;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Contour lines of `f` at the given `levels`, or `count` (default 9) levels evenly spread strictly between the
|
|
37
|
+
* grid's least and greatest values. One pass over the grid for all levels.
|
|
38
|
+
*/
|
|
39
|
+
export declare function sampleContours(f: Fn2, xDomain: Domain, yDomain: Domain, options?: Grid2Options & {
|
|
40
|
+
levels?: number[];
|
|
41
|
+
count?: number;
|
|
42
|
+
}): Contours;
|
|
43
|
+
export interface GradientField {
|
|
44
|
+
columns: number;
|
|
45
|
+
rows: number;
|
|
46
|
+
/** Arrow tails. */
|
|
47
|
+
x: Float64Array;
|
|
48
|
+
y: Float64Array;
|
|
49
|
+
/** Components; `NaN` where either component is non-finite. */
|
|
50
|
+
u: Float64Array;
|
|
51
|
+
v: Float64Array;
|
|
52
|
+
magnitude: Float64Array;
|
|
53
|
+
maxMagnitude: number;
|
|
54
|
+
progress: Progress;
|
|
55
|
+
}
|
|
56
|
+
/** Sample the vector field `(fx, fy)` (e.g. the two partial derivatives of a scalar field) on a grid including the edges. */
|
|
57
|
+
export declare function sampleGradient(fx: Fn2, fy: Fn2, xDomain: Domain, yDomain: Domain, options?: Grid2Options): GradientField;
|
|
58
|
+
//# sourceMappingURL=field2d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field2d.d.ts","sourceRoot":"","sources":["../src/field2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,MAAM,EAAE,KAAK,WAAW,EAAS,KAAK,QAAQ,EAAY,MAAM,aAAa,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,MAAM,EAAE,WAAW;IACvD,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AA0GD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,GAAG,EACN,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,aAAa,CAIf;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,GAAG,EACN,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACjE,QAAQ,CA8BV;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,CAAC,EAAE,YAAY,CAAC;IAChB,CAAC,EAAE,YAAY,CAAC;IAChB,8DAA8D;IAC9D,CAAC,EAAE,YAAY,CAAC;IAChB,CAAC,EAAE,YAAY,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,6HAA6H;AAC7H,wBAAgB,cAAc,CAC5B,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,GAAG,EACP,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,aAAa,CAiDf"}
|