@danielsimonjr/mathts-functions 0.50.0 → 0.51.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.js
CHANGED
|
@@ -12199,6 +12199,446 @@ function rodasSolve(f, tspan, y0raw, options = {}) {
|
|
|
12199
12199
|
}
|
|
12200
12200
|
return { t: tOut, y: yOut };
|
|
12201
12201
|
}
|
|
12202
|
+
var _EPS = Number.EPSILON;
|
|
12203
|
+
function _rms(v) {
|
|
12204
|
+
let s = 0;
|
|
12205
|
+
for (let i = 0; i < v.length; i++) s += v[i] * v[i];
|
|
12206
|
+
return Math.sqrt(s / v.length);
|
|
12207
|
+
}
|
|
12208
|
+
function _selectInitialStep(f, t0, y0, tf, maxStep, f0, dir, order, rtol, atol) {
|
|
12209
|
+
const interval2 = Math.abs(tf - t0);
|
|
12210
|
+
if (interval2 === 0) return 0;
|
|
12211
|
+
const scale4 = y0.map((yi) => atol + Math.abs(yi) * rtol);
|
|
12212
|
+
const d0 = _rms(y0.map((yi, i) => yi / scale4[i]));
|
|
12213
|
+
const d1 = _rms(f0.map((fi, i) => fi / scale4[i]));
|
|
12214
|
+
let h0 = d0 < 1e-5 || d1 < 1e-5 ? 1e-6 : 0.01 * (d0 / d1);
|
|
12215
|
+
h0 = Math.min(h0, interval2);
|
|
12216
|
+
const y1 = y0.map((yi, i) => yi + h0 * dir * f0[i]);
|
|
12217
|
+
const f1 = _fArr(f, t0 + h0 * dir, y1);
|
|
12218
|
+
const d2 = _rms(f1.map((v, i) => (v - f0[i]) / scale4[i])) / h0;
|
|
12219
|
+
const h1 = d1 <= 1e-15 && d2 <= 1e-15 ? Math.max(1e-6, h0 * 1e-3) : Math.pow(0.01 / Math.max(d1, d2), 1 / (order + 1));
|
|
12220
|
+
return Math.min(100 * h0, h1, interval2, maxStep);
|
|
12221
|
+
}
|
|
12222
|
+
function _newtonTol(rtol) {
|
|
12223
|
+
return Math.max(10 * _EPS / rtol, Math.min(0.03, Math.sqrt(rtol)));
|
|
12224
|
+
}
|
|
12225
|
+
function _minStep(t) {
|
|
12226
|
+
return 10 * _EPS * Math.max(1, Math.abs(t));
|
|
12227
|
+
}
|
|
12228
|
+
function _matMul(A, B) {
|
|
12229
|
+
const m = A.length;
|
|
12230
|
+
const p = B[0].length;
|
|
12231
|
+
const q = B.length;
|
|
12232
|
+
const out = Array.from({ length: m }, () => new Array(p).fill(0));
|
|
12233
|
+
for (let i = 0; i < m; i++) {
|
|
12234
|
+
for (let k = 0; k < q; k++) {
|
|
12235
|
+
const aik = A[i][k];
|
|
12236
|
+
if (aik === 0) continue;
|
|
12237
|
+
for (let j = 0; j < p; j++) out[i][j] += aik * B[k][j];
|
|
12238
|
+
}
|
|
12239
|
+
}
|
|
12240
|
+
return out;
|
|
12241
|
+
}
|
|
12242
|
+
var BDF_MAX_ORDER = 5;
|
|
12243
|
+
var BDF_NEWTON_MAXITER = 4;
|
|
12244
|
+
var BDF_MIN_FACTOR = 0.2;
|
|
12245
|
+
var BDF_MAX_FACTOR = 10;
|
|
12246
|
+
var BDF_KAPPA = [0, -0.185, -1 / 9, -0.0823, -0.0415, 0];
|
|
12247
|
+
var BDF_GAMMA = (() => {
|
|
12248
|
+
const g = [0];
|
|
12249
|
+
let acc = 0;
|
|
12250
|
+
for (let i = 1; i <= BDF_MAX_ORDER; i++) {
|
|
12251
|
+
acc += 1 / i;
|
|
12252
|
+
g.push(acc);
|
|
12253
|
+
}
|
|
12254
|
+
return g;
|
|
12255
|
+
})();
|
|
12256
|
+
var BDF_ALPHA = BDF_KAPPA.map((k, i) => (1 - k) * BDF_GAMMA[i]);
|
|
12257
|
+
var BDF_ERROR_CONST = BDF_KAPPA.map((k, i) => k * BDF_GAMMA[i] + 1 / (i + 1));
|
|
12258
|
+
function _bdfComputeR(order, factor2) {
|
|
12259
|
+
const M = Array.from(
|
|
12260
|
+
{ length: order + 1 },
|
|
12261
|
+
() => new Array(order + 1).fill(0)
|
|
12262
|
+
);
|
|
12263
|
+
for (let j = 0; j <= order; j++) M[0][j] = 1;
|
|
12264
|
+
for (let i = 1; i <= order; i++) {
|
|
12265
|
+
for (let j = 1; j <= order; j++) M[i][j] = (i - 1 - factor2 * j) / i;
|
|
12266
|
+
}
|
|
12267
|
+
for (let j = 0; j <= order; j++) {
|
|
12268
|
+
for (let i = 1; i <= order; i++) M[i][j] *= M[i - 1][j];
|
|
12269
|
+
}
|
|
12270
|
+
return M;
|
|
12271
|
+
}
|
|
12272
|
+
function _bdfChangeD(D, order, factor2) {
|
|
12273
|
+
const R = _bdfComputeR(order, factor2);
|
|
12274
|
+
const U = _bdfComputeR(order, 1);
|
|
12275
|
+
const RU = _matMul(R, U);
|
|
12276
|
+
const n = D[0].length;
|
|
12277
|
+
const newTop = Array.from({ length: order + 1 }, () => new Array(n).fill(0));
|
|
12278
|
+
for (let i = 0; i <= order; i++) {
|
|
12279
|
+
for (let j = 0; j <= order; j++) {
|
|
12280
|
+
const c = RU[j][i];
|
|
12281
|
+
if (c === 0) continue;
|
|
12282
|
+
const Dj = D[j];
|
|
12283
|
+
const row2 = newTop[i];
|
|
12284
|
+
for (let k = 0; k < n; k++) row2[k] += c * Dj[k];
|
|
12285
|
+
}
|
|
12286
|
+
}
|
|
12287
|
+
for (let i = 0; i <= order; i++) D[i] = newTop[i];
|
|
12288
|
+
}
|
|
12289
|
+
function _bdfNewton(f, tNew, yPredict, c, psi, solveW, scale4, tol) {
|
|
12290
|
+
const n = yPredict.length;
|
|
12291
|
+
const d = new Array(n).fill(0);
|
|
12292
|
+
const y = yPredict.slice();
|
|
12293
|
+
let dyNormOld = null;
|
|
12294
|
+
let converged = false;
|
|
12295
|
+
let k = 0;
|
|
12296
|
+
for (; k < BDF_NEWTON_MAXITER; k++) {
|
|
12297
|
+
const fv = _fArr(f, tNew, y);
|
|
12298
|
+
if (!fv.every((v) => Number.isFinite(v))) break;
|
|
12299
|
+
const rhs = fv.map((v, i) => c * v - psi[i] - d[i]);
|
|
12300
|
+
const dy = solveW(rhs);
|
|
12301
|
+
const dyNorm = _rms(dy.map((v, i) => v / scale4[i]));
|
|
12302
|
+
const rate = dyNormOld === null ? null : dyNorm / dyNormOld;
|
|
12303
|
+
if (rate !== null && (rate >= 1 || Math.pow(rate, BDF_NEWTON_MAXITER - k) / (1 - rate) * dyNorm > tol)) {
|
|
12304
|
+
break;
|
|
12305
|
+
}
|
|
12306
|
+
for (let i = 0; i < n; i++) {
|
|
12307
|
+
y[i] += dy[i];
|
|
12308
|
+
d[i] += dy[i];
|
|
12309
|
+
}
|
|
12310
|
+
if (dyNorm === 0 || rate !== null && rate / (1 - rate) * dyNorm < tol) {
|
|
12311
|
+
converged = true;
|
|
12312
|
+
k++;
|
|
12313
|
+
break;
|
|
12314
|
+
}
|
|
12315
|
+
dyNormOld = dyNorm;
|
|
12316
|
+
}
|
|
12317
|
+
return { converged, nIter: k, y, d };
|
|
12318
|
+
}
|
|
12319
|
+
function bdfSolve(f, tspan, y0raw, options = {}) {
|
|
12320
|
+
const t0 = tspan[0];
|
|
12321
|
+
const tf = tspan[1];
|
|
12322
|
+
if (!(typeof t0 === "number" && typeof tf === "number")) {
|
|
12323
|
+
throw new Error('The "BDF" stiff method requires numeric tspan');
|
|
12324
|
+
}
|
|
12325
|
+
if (!y0raw.every((v) => typeof v === "number")) {
|
|
12326
|
+
throw new Error('The "BDF" stiff method requires plain-number state (y0)');
|
|
12327
|
+
}
|
|
12328
|
+
const y0 = y0raw;
|
|
12329
|
+
const n = y0.length;
|
|
12330
|
+
const dir = tf >= t0 ? 1 : -1;
|
|
12331
|
+
const rtol = options.tol ? options.tol : 1e-4;
|
|
12332
|
+
const atol = rtol * 1e-3;
|
|
12333
|
+
const maxIter = options.maxIter ? options.maxIter : 1e5;
|
|
12334
|
+
const maxStep = options.maxStep ?? Infinity;
|
|
12335
|
+
const newtonTol = _newtonTol(rtol);
|
|
12336
|
+
let t = t0;
|
|
12337
|
+
let y = y0.slice();
|
|
12338
|
+
const f0 = _fArr(f, t, y);
|
|
12339
|
+
let hAbs = options.firstStep ? Math.abs(options.firstStep) : _selectInitialStep(f, t0, y0, tf, maxStep, f0, dir, 1, rtol, atol);
|
|
12340
|
+
const D = Array.from(
|
|
12341
|
+
{ length: BDF_MAX_ORDER + 3 },
|
|
12342
|
+
() => new Array(n).fill(0)
|
|
12343
|
+
);
|
|
12344
|
+
D[0] = y.slice();
|
|
12345
|
+
D[1] = f0.map((v) => v * hAbs * dir);
|
|
12346
|
+
let order = 1;
|
|
12347
|
+
let nEqualSteps = 0;
|
|
12348
|
+
const tOut = [t];
|
|
12349
|
+
const yOut = [y.slice()];
|
|
12350
|
+
let iter = 0;
|
|
12351
|
+
while ((dir > 0 ? t < tf : t > tf) && iter < maxIter) {
|
|
12352
|
+
iter++;
|
|
12353
|
+
const minStep = _minStep(t);
|
|
12354
|
+
if (hAbs > maxStep) {
|
|
12355
|
+
_bdfChangeD(D, order, maxStep / hAbs);
|
|
12356
|
+
hAbs = maxStep;
|
|
12357
|
+
nEqualSteps = 0;
|
|
12358
|
+
} else if (hAbs < minStep) {
|
|
12359
|
+
_bdfChangeD(D, order, minStep / hAbs);
|
|
12360
|
+
hAbs = minStep;
|
|
12361
|
+
nEqualSteps = 0;
|
|
12362
|
+
}
|
|
12363
|
+
const F0 = _fArr(f, t, y);
|
|
12364
|
+
const J = _jacobianAt(f, t, y, F0, options);
|
|
12365
|
+
let stepAccepted = false;
|
|
12366
|
+
let yNew = y;
|
|
12367
|
+
let dVec = new Array(n).fill(0);
|
|
12368
|
+
let errorNorm = 0;
|
|
12369
|
+
let nIter = 1;
|
|
12370
|
+
let scale4 = new Array(n).fill(1);
|
|
12371
|
+
while (!stepAccepted) {
|
|
12372
|
+
if (hAbs < minStep) {
|
|
12373
|
+
throw new Error("Required step size is less than spacing between numbers (BDF)");
|
|
12374
|
+
}
|
|
12375
|
+
let h = hAbs * dir;
|
|
12376
|
+
let tNew = t + h;
|
|
12377
|
+
if (dir * (tNew - tf) > 0) {
|
|
12378
|
+
tNew = tf;
|
|
12379
|
+
_bdfChangeD(D, order, Math.abs(tNew - t) / hAbs);
|
|
12380
|
+
nEqualSteps = 0;
|
|
12381
|
+
}
|
|
12382
|
+
h = tNew - t;
|
|
12383
|
+
hAbs = Math.abs(h);
|
|
12384
|
+
const yPredict = new Array(n).fill(0);
|
|
12385
|
+
for (let j = 0; j <= order; j++) for (let k = 0; k < n; k++) yPredict[k] += D[j][k];
|
|
12386
|
+
scale4 = yPredict.map((v) => atol + rtol * Math.abs(v));
|
|
12387
|
+
const psi = new Array(n).fill(0);
|
|
12388
|
+
for (let k = 0; k < n; k++) {
|
|
12389
|
+
let s = 0;
|
|
12390
|
+
for (let j = 1; j <= order; j++) s += D[j][k] * BDF_GAMMA[j];
|
|
12391
|
+
psi[k] = s / BDF_ALPHA[order];
|
|
12392
|
+
}
|
|
12393
|
+
const c = h / BDF_ALPHA[order];
|
|
12394
|
+
const W = J.map((rowv, i) => rowv.map((v, j) => (i === j ? 1 : 0) - c * v));
|
|
12395
|
+
const solveW = _factorSolver(W, n);
|
|
12396
|
+
const res = _bdfNewton(f, tNew, yPredict, c, psi, solveW, scale4, newtonTol);
|
|
12397
|
+
if (!res.converged) {
|
|
12398
|
+
hAbs *= 0.5;
|
|
12399
|
+
_bdfChangeD(D, order, 0.5);
|
|
12400
|
+
nEqualSteps = 0;
|
|
12401
|
+
continue;
|
|
12402
|
+
}
|
|
12403
|
+
nIter = res.nIter;
|
|
12404
|
+
yNew = res.y;
|
|
12405
|
+
dVec = res.d;
|
|
12406
|
+
const safety2 = 0.9 * (2 * BDF_NEWTON_MAXITER + 1) / (2 * BDF_NEWTON_MAXITER + nIter);
|
|
12407
|
+
scale4 = yNew.map((v) => atol + rtol * Math.abs(v));
|
|
12408
|
+
errorNorm = _rms(dVec.map((v, i) => BDF_ERROR_CONST[order] * v / scale4[i]));
|
|
12409
|
+
if (errorNorm > 1) {
|
|
12410
|
+
const factor3 = Math.max(BDF_MIN_FACTOR, safety2 * Math.pow(errorNorm, -1 / (order + 1)));
|
|
12411
|
+
hAbs *= factor3;
|
|
12412
|
+
_bdfChangeD(D, order, factor3);
|
|
12413
|
+
nEqualSteps = 0;
|
|
12414
|
+
} else {
|
|
12415
|
+
stepAccepted = true;
|
|
12416
|
+
}
|
|
12417
|
+
if (stepAccepted) {
|
|
12418
|
+
t = tNew;
|
|
12419
|
+
y = yNew;
|
|
12420
|
+
tOut.push(t);
|
|
12421
|
+
yOut.push(y.slice());
|
|
12422
|
+
}
|
|
12423
|
+
}
|
|
12424
|
+
nEqualSteps++;
|
|
12425
|
+
const safety = 0.9 * (2 * BDF_NEWTON_MAXITER + 1) / (2 * BDF_NEWTON_MAXITER + nIter);
|
|
12426
|
+
for (let k = 0; k < n; k++) {
|
|
12427
|
+
D[order + 2][k] = dVec[k] - D[order + 1][k];
|
|
12428
|
+
D[order + 1][k] = dVec[k];
|
|
12429
|
+
}
|
|
12430
|
+
for (let i = order; i >= 0; i--) for (let k = 0; k < n; k++) D[i][k] += D[i + 1][k];
|
|
12431
|
+
if (nEqualSteps < order + 1) continue;
|
|
12432
|
+
const errM = order > 1 ? _rms(D[order].map((v, i) => BDF_ERROR_CONST[order - 1] * v / scale4[i])) : Infinity;
|
|
12433
|
+
const errP = order < BDF_MAX_ORDER ? _rms(D[order + 2].map((v, i) => BDF_ERROR_CONST[order + 1] * v / scale4[i])) : Infinity;
|
|
12434
|
+
const errNorms = [errM, errorNorm, errP];
|
|
12435
|
+
const factors = errNorms.map((e, i) => Math.pow(e, -1 / (order + i)));
|
|
12436
|
+
let best = 0;
|
|
12437
|
+
for (let i = 1; i < 3; i++) if (factors[i] > factors[best]) best = i;
|
|
12438
|
+
order += best - 1;
|
|
12439
|
+
const factor2 = Math.min(BDF_MAX_FACTOR, safety * factors[best]);
|
|
12440
|
+
hAbs *= factor2;
|
|
12441
|
+
_bdfChangeD(D, order, factor2);
|
|
12442
|
+
nEqualSteps = 0;
|
|
12443
|
+
}
|
|
12444
|
+
if (iter >= maxIter) {
|
|
12445
|
+
throw new Error("Maximum number of iterations reached, try changing options");
|
|
12446
|
+
}
|
|
12447
|
+
return { t: tOut, y: yOut };
|
|
12448
|
+
}
|
|
12449
|
+
var RADAU_NEWTON_MAXITER = 6;
|
|
12450
|
+
var RADAU_MIN_FACTOR = 0.2;
|
|
12451
|
+
var RADAU_MAX_FACTOR = 10;
|
|
12452
|
+
var _S6 = Math.sqrt(6);
|
|
12453
|
+
var RADAU_A = [
|
|
12454
|
+
[(88 - 7 * _S6) / 360, (296 - 169 * _S6) / 1800, (-2 + 3 * _S6) / 225],
|
|
12455
|
+
[(296 + 169 * _S6) / 1800, (88 + 7 * _S6) / 360, (-2 - 3 * _S6) / 225],
|
|
12456
|
+
[(16 - _S6) / 36, (16 + _S6) / 36, 1 / 9]
|
|
12457
|
+
];
|
|
12458
|
+
var RADAU_C = [(4 - _S6) / 10, (4 + _S6) / 10, 1];
|
|
12459
|
+
var RADAU_E = [(-13 - 7 * _S6) / 3, (-13 + 7 * _S6) / 3, -1 / 3];
|
|
12460
|
+
var RADAU_MU_REAL = 3 + Math.pow(3, 2 / 3) - Math.pow(3, 1 / 3);
|
|
12461
|
+
function _radauPredictFactor(hAbs, hAbsOld, errNorm, errNormOld) {
|
|
12462
|
+
const mult = errNormOld === null || hAbsOld === null || errNorm === 0 ? 1 : hAbs / hAbsOld * Math.pow(errNormOld / errNorm, 0.25);
|
|
12463
|
+
return Math.min(1, mult) * Math.pow(errNorm, -0.25);
|
|
12464
|
+
}
|
|
12465
|
+
function _radauNewton(f, t, y, h, J, scale4, tol) {
|
|
12466
|
+
const n = y.length;
|
|
12467
|
+
const Z = [
|
|
12468
|
+
new Array(n).fill(0),
|
|
12469
|
+
new Array(n).fill(0),
|
|
12470
|
+
new Array(n).fill(0)
|
|
12471
|
+
];
|
|
12472
|
+
const big = Array.from({ length: 3 * n }, () => new Array(3 * n).fill(0));
|
|
12473
|
+
for (let i = 0; i < 3; i++) {
|
|
12474
|
+
for (let k2 = 0; k2 < 3; k2++) {
|
|
12475
|
+
const a = h * RADAU_A[i][k2];
|
|
12476
|
+
for (let r = 0; r < n; r++) {
|
|
12477
|
+
for (let col = 0; col < n; col++) {
|
|
12478
|
+
big[i * n + r][k2 * n + col] = (i === k2 && r === col ? 1 : 0) - a * J[r][col];
|
|
12479
|
+
}
|
|
12480
|
+
}
|
|
12481
|
+
}
|
|
12482
|
+
}
|
|
12483
|
+
const solveBig = _factorSolver(big, 3 * n);
|
|
12484
|
+
let dWNormOld = null;
|
|
12485
|
+
let rate = 0;
|
|
12486
|
+
let converged = false;
|
|
12487
|
+
let k = 0;
|
|
12488
|
+
for (; k < RADAU_NEWTON_MAXITER; k++) {
|
|
12489
|
+
const F = [
|
|
12490
|
+
_fArr(
|
|
12491
|
+
f,
|
|
12492
|
+
t + RADAU_C[0] * h,
|
|
12493
|
+
y.map((yi, r) => yi + Z[0][r])
|
|
12494
|
+
),
|
|
12495
|
+
_fArr(
|
|
12496
|
+
f,
|
|
12497
|
+
t + RADAU_C[1] * h,
|
|
12498
|
+
y.map((yi, r) => yi + Z[1][r])
|
|
12499
|
+
),
|
|
12500
|
+
_fArr(
|
|
12501
|
+
f,
|
|
12502
|
+
t + RADAU_C[2] * h,
|
|
12503
|
+
y.map((yi, r) => yi + Z[2][r])
|
|
12504
|
+
)
|
|
12505
|
+
];
|
|
12506
|
+
if (!F.every((row2) => row2.every((v) => Number.isFinite(v)))) break;
|
|
12507
|
+
const rhs = new Array(3 * n).fill(0);
|
|
12508
|
+
for (let i = 0; i < 3; i++) {
|
|
12509
|
+
for (let r = 0; r < n; r++) {
|
|
12510
|
+
let acc = Z[i][r];
|
|
12511
|
+
for (let j = 0; j < 3; j++) acc -= h * RADAU_A[i][j] * F[j][r];
|
|
12512
|
+
rhs[i * n + r] = -acc;
|
|
12513
|
+
}
|
|
12514
|
+
}
|
|
12515
|
+
const dZ = solveBig(rhs);
|
|
12516
|
+
let sq = 0;
|
|
12517
|
+
for (let i = 0; i < 3; i++) for (let r = 0; r < n; r++) sq += (dZ[i * n + r] / scale4[r]) ** 2;
|
|
12518
|
+
const dWNorm = Math.sqrt(sq / (3 * n));
|
|
12519
|
+
if (dWNormOld !== null) rate = dWNorm / dWNormOld;
|
|
12520
|
+
if (dWNormOld !== null && (rate >= 1 || Math.pow(rate, RADAU_NEWTON_MAXITER - k) / (1 - rate) * dWNorm > tol)) {
|
|
12521
|
+
break;
|
|
12522
|
+
}
|
|
12523
|
+
for (let i = 0; i < 3; i++) for (let r = 0; r < n; r++) Z[i][r] += dZ[i * n + r];
|
|
12524
|
+
if (dWNorm === 0 || dWNormOld !== null && rate / (1 - rate) * dWNorm < tol) {
|
|
12525
|
+
converged = true;
|
|
12526
|
+
k++;
|
|
12527
|
+
break;
|
|
12528
|
+
}
|
|
12529
|
+
dWNormOld = dWNorm;
|
|
12530
|
+
}
|
|
12531
|
+
return { converged, nIter: k, Z, rate };
|
|
12532
|
+
}
|
|
12533
|
+
function radauSolve(f, tspan, y0raw, options = {}) {
|
|
12534
|
+
const t0 = tspan[0];
|
|
12535
|
+
const tf = tspan[1];
|
|
12536
|
+
if (!(typeof t0 === "number" && typeof tf === "number")) {
|
|
12537
|
+
throw new Error('The "Radau" stiff method requires numeric tspan');
|
|
12538
|
+
}
|
|
12539
|
+
if (!y0raw.every((v) => typeof v === "number")) {
|
|
12540
|
+
throw new Error('The "Radau" stiff method requires plain-number state (y0)');
|
|
12541
|
+
}
|
|
12542
|
+
const y0 = y0raw;
|
|
12543
|
+
const n = y0.length;
|
|
12544
|
+
const dir = tf >= t0 ? 1 : -1;
|
|
12545
|
+
const rtol = options.tol ? options.tol : 1e-4;
|
|
12546
|
+
const atol = rtol * 1e-3;
|
|
12547
|
+
const maxIter = options.maxIter ? options.maxIter : 1e5;
|
|
12548
|
+
const maxStep = options.maxStep ?? Infinity;
|
|
12549
|
+
const newtonTol = _newtonTol(rtol);
|
|
12550
|
+
let t = t0;
|
|
12551
|
+
let y = y0.slice();
|
|
12552
|
+
let hAbs = options.firstStep ? Math.abs(options.firstStep) : _selectInitialStep(f, t0, y0, tf, maxStep, _fArr(f, t, y), dir, 3, rtol, atol);
|
|
12553
|
+
let hAbsOld = null;
|
|
12554
|
+
let errNormOld = null;
|
|
12555
|
+
const tOut = [t];
|
|
12556
|
+
const yOut = [y.slice()];
|
|
12557
|
+
let iter = 0;
|
|
12558
|
+
while ((dir > 0 ? t < tf : t > tf) && iter < maxIter) {
|
|
12559
|
+
iter++;
|
|
12560
|
+
const minStep = _minStep(t);
|
|
12561
|
+
let hEntry;
|
|
12562
|
+
if (hAbs > maxStep) {
|
|
12563
|
+
hEntry = maxStep;
|
|
12564
|
+
hAbs = maxStep;
|
|
12565
|
+
hAbsOld = null;
|
|
12566
|
+
errNormOld = null;
|
|
12567
|
+
} else if (hAbs < minStep) {
|
|
12568
|
+
hEntry = minStep;
|
|
12569
|
+
hAbs = minStep;
|
|
12570
|
+
hAbsOld = null;
|
|
12571
|
+
errNormOld = null;
|
|
12572
|
+
} else {
|
|
12573
|
+
hEntry = hAbs;
|
|
12574
|
+
}
|
|
12575
|
+
const f0 = _fArr(f, t, y);
|
|
12576
|
+
const J = _jacobianAt(f, t, y, f0, options);
|
|
12577
|
+
let stepAccepted = false;
|
|
12578
|
+
let rejected = false;
|
|
12579
|
+
let yNew = y;
|
|
12580
|
+
let errNorm = 0;
|
|
12581
|
+
let nIter = 1;
|
|
12582
|
+
let tNew = t;
|
|
12583
|
+
while (!stepAccepted) {
|
|
12584
|
+
if (hAbs < minStep) {
|
|
12585
|
+
throw new Error("Required step size is less than spacing between numbers (Radau)");
|
|
12586
|
+
}
|
|
12587
|
+
let h = hAbs * dir;
|
|
12588
|
+
tNew = t + h;
|
|
12589
|
+
if (dir * (tNew - tf) > 0) tNew = tf;
|
|
12590
|
+
h = tNew - t;
|
|
12591
|
+
hAbs = Math.abs(h);
|
|
12592
|
+
const scale4 = y.map((yi) => atol + Math.abs(yi) * rtol);
|
|
12593
|
+
const res = _radauNewton(f, t, y, h, J, scale4, newtonTol);
|
|
12594
|
+
if (!res.converged) {
|
|
12595
|
+
hAbs *= 0.5;
|
|
12596
|
+
continue;
|
|
12597
|
+
}
|
|
12598
|
+
nIter = res.nIter;
|
|
12599
|
+
const Z = res.Z;
|
|
12600
|
+
yNew = y.map((yi, r) => yi + Z[2][r]);
|
|
12601
|
+
const ze = new Array(n).fill(0);
|
|
12602
|
+
for (let r = 0; r < n; r++) {
|
|
12603
|
+
ze[r] = f0[r] + (RADAU_E[0] * Z[0][r] + RADAU_E[1] * Z[1][r] + RADAU_E[2] * Z[2][r]) / h;
|
|
12604
|
+
}
|
|
12605
|
+
const Merr = J.map((rowv, i) => rowv.map((v, j) => (i === j ? RADAU_MU_REAL / h : 0) - v));
|
|
12606
|
+
const solveErr = _factorSolver(Merr, n);
|
|
12607
|
+
let error = solveErr(ze);
|
|
12608
|
+
const escale = y.map((yi, r) => atol + Math.max(Math.abs(yi), Math.abs(yNew[r])) * rtol);
|
|
12609
|
+
errNorm = _rms(error.map((v, r) => v / escale[r]));
|
|
12610
|
+
const safety2 = 0.9 * (2 * RADAU_NEWTON_MAXITER + 1) / (2 * RADAU_NEWTON_MAXITER + nIter);
|
|
12611
|
+
if (rejected && errNorm > 1) {
|
|
12612
|
+
const yErr = y.map((yi, r) => yi + error[r]);
|
|
12613
|
+
const fErr = _fArr(f, t, yErr);
|
|
12614
|
+
error = solveErr(fErr.map((v, r) => v + ze[r] - f0[r]));
|
|
12615
|
+
errNorm = _rms(error.map((v, r) => v / escale[r]));
|
|
12616
|
+
}
|
|
12617
|
+
if (errNorm > 1) {
|
|
12618
|
+
const factor3 = _radauPredictFactor(hAbs, hAbsOld, errNorm, errNormOld);
|
|
12619
|
+
hAbs *= Math.max(RADAU_MIN_FACTOR, safety2 * factor3);
|
|
12620
|
+
rejected = true;
|
|
12621
|
+
} else {
|
|
12622
|
+
stepAccepted = true;
|
|
12623
|
+
}
|
|
12624
|
+
}
|
|
12625
|
+
const safety = 0.9 * (2 * RADAU_NEWTON_MAXITER + 1) / (2 * RADAU_NEWTON_MAXITER + nIter);
|
|
12626
|
+
let factor2 = _radauPredictFactor(hAbs, hAbsOld, errNorm, errNormOld);
|
|
12627
|
+
factor2 = Math.min(RADAU_MAX_FACTOR, safety * factor2);
|
|
12628
|
+
if (factor2 < 1.2) factor2 = 1;
|
|
12629
|
+
hAbsOld = hEntry;
|
|
12630
|
+
errNormOld = errNorm;
|
|
12631
|
+
t = tNew;
|
|
12632
|
+
y = yNew;
|
|
12633
|
+
tOut.push(t);
|
|
12634
|
+
yOut.push(y.slice());
|
|
12635
|
+
hAbs *= factor2;
|
|
12636
|
+
}
|
|
12637
|
+
if (iter >= maxIter) {
|
|
12638
|
+
throw new Error("Maximum number of iterations reached, try changing options");
|
|
12639
|
+
}
|
|
12640
|
+
return { t: tOut, y: yOut };
|
|
12641
|
+
}
|
|
12202
12642
|
var createSolveODE = /* @__PURE__ */ factory(
|
|
12203
12643
|
name,
|
|
12204
12644
|
dependencies,
|
|
@@ -12505,7 +12945,9 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
12505
12945
|
RK23: _rk23,
|
|
12506
12946
|
RK45: _rk45,
|
|
12507
12947
|
ROSENBROCK: rosenbrockSolve,
|
|
12508
|
-
RODAS: rodasSolve
|
|
12948
|
+
RODAS: rodasSolve,
|
|
12949
|
+
BDF: bdfSolve,
|
|
12950
|
+
RADAU: radauSolve
|
|
12509
12951
|
};
|
|
12510
12952
|
if (method.toUpperCase() in methods) {
|
|
12511
12953
|
const methodOptions = { ...opt };
|
|
@@ -13415,9 +13857,84 @@ function powerfit(xs, ys) {
|
|
|
13415
13857
|
const lna = (sy - b * sx) / n;
|
|
13416
13858
|
return [Math.exp(lna), b];
|
|
13417
13859
|
}
|
|
13860
|
+
var _DP_C = [0, 1 / 5, 3 / 10, 4 / 5, 8 / 9, 1, 1];
|
|
13861
|
+
var _DP_A = [
|
|
13862
|
+
[],
|
|
13863
|
+
[1 / 5],
|
|
13864
|
+
[3 / 40, 9 / 40],
|
|
13865
|
+
[44 / 45, -56 / 15, 32 / 9],
|
|
13866
|
+
[19372 / 6561, -25360 / 2187, 64448 / 6561, -212 / 729],
|
|
13867
|
+
[9017 / 3168, -355 / 33, 46732 / 5247, 49 / 176, -5103 / 18656],
|
|
13868
|
+
[35 / 384, 0, 500 / 1113, 125 / 192, -2187 / 6784, 11 / 84]
|
|
13869
|
+
];
|
|
13870
|
+
var _DP_B = [35 / 384, 0, 500 / 1113, 125 / 192, -2187 / 6784, 11 / 84, 0];
|
|
13871
|
+
var _DP_BHAT = [5179 / 57600, 0, 7571 / 16695, 393 / 640, -92097 / 339200, 187 / 2100, 1 / 40];
|
|
13872
|
+
function _adaptiveRK45System(f, y0, tspan, tol, maxSteps) {
|
|
13873
|
+
const n = y0.length;
|
|
13874
|
+
const [t0, tf] = tspan;
|
|
13875
|
+
const dir = tf >= t0 ? 1 : -1;
|
|
13876
|
+
const rtol = tol;
|
|
13877
|
+
const atol = tol * 1e-3;
|
|
13878
|
+
const ts = [t0];
|
|
13879
|
+
const ys = [y0.slice()];
|
|
13880
|
+
let t = t0;
|
|
13881
|
+
let y = y0.slice();
|
|
13882
|
+
const f0 = f(t, y);
|
|
13883
|
+
const rms = (v) => {
|
|
13884
|
+
let s = 0;
|
|
13885
|
+
for (let i = 0; i < v.length; i++) s += v[i] * v[i];
|
|
13886
|
+
return Math.sqrt(s / v.length);
|
|
13887
|
+
};
|
|
13888
|
+
const d0 = rms(y);
|
|
13889
|
+
const d1 = rms(f0);
|
|
13890
|
+
let h = dir * Math.min(d0 < 1e-5 || d1 < 1e-5 ? 1e-6 : 0.01 * (d0 / d1), Math.abs(tf - t0));
|
|
13891
|
+
let steps = 0;
|
|
13892
|
+
while ((dir > 0 ? t < tf : t > tf) && steps < maxSteps) {
|
|
13893
|
+
steps++;
|
|
13894
|
+
if (Math.abs(h) > Math.abs(tf - t)) h = tf - t;
|
|
13895
|
+
const k = [f(t, y)];
|
|
13896
|
+
for (let s = 1; s < 7; s++) {
|
|
13897
|
+
const ys_ = y.slice();
|
|
13898
|
+
for (let j = 0; j < s; j++) {
|
|
13899
|
+
const aij = _DP_A[s][j];
|
|
13900
|
+
if (aij === 0) continue;
|
|
13901
|
+
for (let i = 0; i < n; i++) ys_[i] += h * aij * k[j][i];
|
|
13902
|
+
}
|
|
13903
|
+
k.push(f(t + _DP_C[s] * h, ys_));
|
|
13904
|
+
}
|
|
13905
|
+
const yNew = y.slice();
|
|
13906
|
+
let errNorm = 0;
|
|
13907
|
+
for (let i = 0; i < n; i++) {
|
|
13908
|
+
let sum5 = 0;
|
|
13909
|
+
let errI = 0;
|
|
13910
|
+
for (let s = 0; s < 7; s++) {
|
|
13911
|
+
sum5 += _DP_B[s] * k[s][i];
|
|
13912
|
+
errI += (_DP_B[s] - _DP_BHAT[s]) * k[s][i];
|
|
13913
|
+
}
|
|
13914
|
+
yNew[i] = y[i] + h * sum5;
|
|
13915
|
+
const sc = atol + rtol * Math.max(Math.abs(y[i]), Math.abs(yNew[i]));
|
|
13916
|
+
errNorm += (h * errI / sc) ** 2;
|
|
13917
|
+
}
|
|
13918
|
+
errNorm = Math.sqrt(errNorm / n);
|
|
13919
|
+
if (errNorm <= 1 || Math.abs(h) <= 1e-14 * Math.abs(t)) {
|
|
13920
|
+
t += h;
|
|
13921
|
+
y = yNew;
|
|
13922
|
+
ts.push(t);
|
|
13923
|
+
ys.push(y.slice());
|
|
13924
|
+
}
|
|
13925
|
+
h *= Math.min(5, Math.max(0.2, 0.9 * Math.pow(errNorm || 1e-10, -1 / 5)));
|
|
13926
|
+
}
|
|
13927
|
+
if (steps >= maxSteps) {
|
|
13928
|
+
throw new Error("Maximum number of steps reached in solveODESystem, try changing options");
|
|
13929
|
+
}
|
|
13930
|
+
return { t: ts, y: ys };
|
|
13931
|
+
}
|
|
13418
13932
|
function solveODESystem(f, y0, tspan, opts) {
|
|
13933
|
+
if (opts?.dt === void 0) {
|
|
13934
|
+
return _adaptiveRK45System(f, y0, tspan, opts?.tol ?? 1e-6, opts?.maxSteps ?? 1e5);
|
|
13935
|
+
}
|
|
13419
13936
|
const n = y0.length;
|
|
13420
|
-
const dt = opts
|
|
13937
|
+
const dt = opts.dt;
|
|
13421
13938
|
const nSteps = Math.ceil((tspan[1] - tspan[0]) / dt);
|
|
13422
13939
|
const h = (tspan[1] - tspan[0]) / nSteps;
|
|
13423
13940
|
const ts = [tspan[0]];
|
|
@@ -28,7 +28,7 @@ type ODEEvents = EventFunction | EventSpec | Array<EventFunction | EventSpec>;
|
|
|
28
28
|
* Options for ODE solver
|
|
29
29
|
*/
|
|
30
30
|
interface ODEOptions {
|
|
31
|
-
method?: 'RK23' | 'RK45' | 'Rosenbrock' | 'RODAS';
|
|
31
|
+
method?: 'RK23' | 'RK45' | 'Rosenbrock' | 'RODAS' | 'BDF' | 'Radau';
|
|
32
32
|
tol?: number;
|
|
33
33
|
firstStep?: number | Unit;
|
|
34
34
|
minStep?: number | Unit;
|
|
@@ -90,6 +90,31 @@ export declare function rodasSolve(f: ForcingFunction, tspan: unknown[], y0raw:
|
|
|
90
90
|
t: number[];
|
|
91
91
|
y: number[][];
|
|
92
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* BDF variable-order (1–5) variable-step stiff solver — scipy's default `method='BDF'`. Adaptive
|
|
95
|
+
* local-error control drives step size and order (1–5) automatically; Newton iteration on the
|
|
96
|
+
* implicit BDF formula reuses the shared Jacobian machinery and the `(I − c·J)` dense LU solve
|
|
97
|
+
* (`_factorSolver`) the Rosenbrock/RODAS paths use. Plain-number state only.
|
|
98
|
+
*
|
|
99
|
+
* Module-level for the same reason as `rosenbrockSolve`/`rodasSolve`: a pure-numeric engine with no
|
|
100
|
+
* factory-scope dependency, routed from `createSolveODE`'s `BDF` method branch.
|
|
101
|
+
*/
|
|
102
|
+
export declare function bdfSolve(f: ForcingFunction, tspan: unknown[], y0raw: unknown[], options?: ODEOptions): {
|
|
103
|
+
t: number[];
|
|
104
|
+
y: number[][];
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Radau IIA (order-5, L-stable) stiff solver — scipy's `method='Radau'`. Simplified-Newton on the
|
|
108
|
+
* real 3n×3n collocation system per step (Jacobian analytic via `options.jac` or finite-differenced,
|
|
109
|
+
* reused across the step's Newton iterations), third-order embedded error estimate for adaptive
|
|
110
|
+
* stepping. Plain-number state only.
|
|
111
|
+
*
|
|
112
|
+
* Module-level for the same reason as `rosenbrockSolve`/`rodasSolve`/`bdfSolve`.
|
|
113
|
+
*/
|
|
114
|
+
export declare function radauSolve(f: ForcingFunction, tspan: unknown[], y0raw: unknown[], options?: ODEOptions): {
|
|
115
|
+
t: number[];
|
|
116
|
+
y: number[][];
|
|
117
|
+
};
|
|
93
118
|
export declare const createSolveODE: import("../utils/factory.js").FactoryFunction<any, any>;
|
|
94
119
|
export {};
|
|
95
120
|
//# sourceMappingURL=solveODE.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solveODE.d.ts","sourceRoot":"","sources":["../../src/numeric/solveODE.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAU,IAAI,EAAa,MAAM,aAAa,CAAC;AAkCvF;;;;;;;;;;;GAWG;AACH,UAAU,aAAa;IACrB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4FAA4F;AAC5F,UAAU,SAAS;IACjB,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yEAAyE;AACzE,KAAK,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;AAS9E;;GAEG;AACH,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"solveODE.d.ts","sourceRoot":"","sources":["../../src/numeric/solveODE.ts"],"names":[],"mappings":"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"}
|
package/dist/typed/numeric.d.ts
CHANGED
|
@@ -233,12 +233,18 @@ export interface ODESolution {
|
|
|
233
233
|
y: number[][];
|
|
234
234
|
}
|
|
235
235
|
/**
|
|
236
|
-
* Solve a system of ODEs dy/dt = f(t, y)
|
|
236
|
+
* Solve a system of ODEs dy/dt = f(t, y).
|
|
237
|
+
*
|
|
238
|
+
* By default (no `dt`) it uses **adaptive** embedded RK45 (Dormand-Prince) with local-error control
|
|
239
|
+
* — the step size is chosen automatically to keep the scaled RMS error under `tol`. Passing an
|
|
240
|
+
* explicit `dt` selects the legacy **fixed-step** RK4 integrator instead (unchanged, for callers
|
|
241
|
+
* that want a prescribed step, e.g. the BVP shooting driver).
|
|
237
242
|
*
|
|
238
243
|
* @param f - System function (t, y) => dy/dt
|
|
239
244
|
* @param y0 - Initial state vector
|
|
240
245
|
* @param tspan - [t0, tf] time span
|
|
241
|
-
* @param opts - Options (
|
|
246
|
+
* @param opts - Options: `tol` (adaptive local-error tolerance, default 1e-6), `maxSteps` (step
|
|
247
|
+
* cap), `dt` (fixed step — selects the legacy fixed-step RK4 path)
|
|
242
248
|
* @returns Solution { t, y }
|
|
243
249
|
*/
|
|
244
250
|
export declare function solveODESystem(f: (t: f64, y: number[]) => number[], y0: number[], tspan: [f64, f64], opts?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numeric.d.ts","sourceRoot":"","sources":["../../src/typed/numeric.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"numeric.d.ts","sourceRoot":"","sources":["../../src/typed/numeric.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED