diff-grok 1.0.9 → 1.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/.claude/settings.local.json +11 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
- package/.github/workflows/deploy-docs.yml +15 -0
- package/CLAUDE.md +98 -0
- package/CONTRIBUTING.md +74 -0
- package/README.MD +272 -18
- package/images/E5.png +0 -0
- package/images/HIRES.png +0 -0
- package/images/OREGO.png +0 -0
- package/images/POLL-full.png +0 -0
- package/images/POLL.png +0 -0
- package/images/ROBER.png +0 -0
- package/images/VDP0L.png +0 -0
- package/images/VDPOL.png +0 -0
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/index.ts +7 -5
- package/jest.config.js +1 -0
- package/package.json +2 -1
- package/src/examples/bioreactor.js +125 -0
- package/src/examples/bioreactor.js.map +1 -0
- package/src/examples/bioreactor.ts +132 -0
- package/src/examples/check-methods.js +23 -9
- package/src/examples/check-methods.js.map +1 -1
- package/src/examples/check-methods.ts +28 -9
- package/src/examples/corr-probs.js +3 -1
- package/src/examples/corr-probs.js.map +1 -1
- package/src/examples/corr-probs.ts +7 -3
- package/src/examples/cyclic-model.js +3 -1
- package/src/examples/cyclic-model.js.map +1 -1
- package/src/examples/cyclic-model.ts +3 -1
- package/src/examples/e5.js +6 -0
- package/src/examples/e5.js.map +1 -1
- package/src/examples/e5.ts +7 -0
- package/src/examples/hires.js +10 -0
- package/src/examples/hires.js.map +1 -1
- package/src/examples/hires.ts +11 -0
- package/src/examples/index.js +21 -7
- package/src/examples/index.js.map +1 -1
- package/src/examples/index.ts +23 -7
- package/src/examples/orego.js +5 -0
- package/src/examples/orego.js.map +1 -1
- package/src/examples/orego.ts +6 -0
- package/src/examples/pollution.js +22 -0
- package/src/examples/pollution.js.map +1 -1
- package/src/examples/pollution.ts +23 -0
- package/src/examples/print-benchmark.js +581 -0
- package/src/examples/print-benchmark.js.map +1 -0
- package/src/examples/print-benchmark.ts +594 -0
- package/src/examples/robertson.js +6 -1
- package/src/examples/robertson.js.map +1 -1
- package/src/examples/robertson.ts +7 -1
- package/src/examples/scripting.js +1 -1
- package/src/examples/scripting.js.map +1 -1
- package/src/examples/scripting.ts +1 -1
- package/src/examples/vdpol.js +4 -0
- package/src/examples/vdpol.js.map +1 -1
- package/src/examples/vdpol.ts +5 -0
- package/src/pipeline/basic-pipeline-creator.js +96 -1
- package/src/pipeline/basic-pipeline-creator.js.map +1 -1
- package/src/pipeline/basic-pipeline-creator.ts +97 -1
- package/src/pipeline/loops-pipeline-creator.js +115 -2
- package/src/pipeline/loops-pipeline-creator.js.map +1 -1
- package/src/pipeline/loops-pipeline-creator.ts +116 -2
- package/src/pipeline/output.js +7 -2
- package/src/pipeline/output.js.map +1 -1
- package/src/pipeline/output.ts +7 -2
- package/src/pipeline/pipeline-creator.js.map +1 -1
- package/src/pipeline/pipeline-creator.ts +4 -0
- package/src/pipeline/pipeline.js +193 -2
- package/src/pipeline/pipeline.js.map +1 -1
- package/src/pipeline/pipeline.ts +206 -4
- package/src/pipeline/updates-pipeline-creator.js +130 -2
- package/src/pipeline/updates-pipeline-creator.js.map +1 -1
- package/src/pipeline/updates-pipeline-creator.ts +131 -2
- package/src/scripting-tools/constants.js +18 -4
- package/src/scripting-tools/constants.js.map +1 -1
- package/src/scripting-tools/constants.ts +22 -4
- package/src/scripting-tools/index.js.map +1 -1
- package/src/scripting-tools/index.ts +3 -2
- package/src/scripting-tools/model-error.js +3 -1
- package/src/scripting-tools/model-error.js.map +1 -1
- package/src/scripting-tools/model-error.ts +3 -1
- package/src/scripting-tools/scripting-tools.js +139 -9
- package/src/scripting-tools/scripting-tools.js.map +1 -1
- package/src/scripting-tools/scripting-tools.ts +228 -21
- package/src/solver-tools/ab4-method.js +332 -0
- package/src/solver-tools/ab4-method.js.map +1 -0
- package/src/solver-tools/ab4-method.ts +395 -0
- package/src/solver-tools/ab5-method.js +334 -0
- package/src/solver-tools/ab5-method.js.map +1 -0
- package/src/solver-tools/ab5-method.ts +397 -0
- package/src/solver-tools/callbacks/callback-base.js +2 -0
- package/src/solver-tools/callbacks/callback-base.js.map +1 -1
- package/src/solver-tools/callbacks/callback-base.ts +4 -0
- package/src/solver-tools/callbacks/callback-tools.js +3 -1
- package/src/solver-tools/callbacks/callback-tools.js.map +1 -1
- package/src/solver-tools/callbacks/callback-tools.ts +3 -1
- package/src/solver-tools/callbacks/iter-checker-callback.js +4 -0
- package/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -1
- package/src/solver-tools/callbacks/iter-checker-callback.ts +4 -0
- package/src/solver-tools/callbacks/time-checker-callback.js +4 -0
- package/src/solver-tools/callbacks/time-checker-callback.js.map +1 -1
- package/src/solver-tools/callbacks/time-checker-callback.ts +4 -0
- package/src/solver-tools/index.js +9 -0
- package/src/solver-tools/index.js.map +1 -1
- package/src/solver-tools/index.ts +9 -0
- package/src/solver-tools/lsoda/blas.js +246 -0
- package/src/solver-tools/lsoda/blas.js.map +1 -0
- package/src/solver-tools/lsoda/blas.ts +267 -0
- package/src/solver-tools/lsoda/cfode.js +73 -0
- package/src/solver-tools/lsoda/cfode.js.map +1 -0
- package/src/solver-tools/lsoda/cfode.ts +83 -0
- package/src/solver-tools/lsoda/common.js +94 -0
- package/src/solver-tools/lsoda/common.js.map +1 -0
- package/src/solver-tools/lsoda/common.ts +135 -0
- package/src/solver-tools/lsoda/corfailure.js +25 -0
- package/src/solver-tools/lsoda/corfailure.js.map +1 -0
- package/src/solver-tools/lsoda/corfailure.ts +30 -0
- package/src/solver-tools/lsoda/correction.js +101 -0
- package/src/solver-tools/lsoda/correction.js.map +1 -0
- package/src/solver-tools/lsoda/correction.ts +119 -0
- package/src/solver-tools/lsoda/dense.js +110 -0
- package/src/solver-tools/lsoda/dense.js.map +1 -0
- package/src/solver-tools/lsoda/dense.ts +129 -0
- package/src/solver-tools/lsoda/index.js +4 -0
- package/src/solver-tools/lsoda/index.js.map +1 -0
- package/src/solver-tools/lsoda/index.ts +5 -0
- package/src/solver-tools/lsoda/intdy.js +43 -0
- package/src/solver-tools/lsoda/intdy.js.map +1 -0
- package/src/solver-tools/lsoda/intdy.ts +50 -0
- package/src/solver-tools/lsoda/lsoda.js +567 -0
- package/src/solver-tools/lsoda/lsoda.js.map +1 -0
- package/src/solver-tools/lsoda/lsoda.ts +632 -0
- package/src/solver-tools/lsoda/methodswitch.js +97 -0
- package/src/solver-tools/lsoda/methodswitch.js.map +1 -0
- package/src/solver-tools/lsoda/methodswitch.ts +107 -0
- package/src/solver-tools/lsoda/orderswitch.js +86 -0
- package/src/solver-tools/lsoda/orderswitch.js.map +1 -0
- package/src/solver-tools/lsoda/orderswitch.ts +95 -0
- package/src/solver-tools/lsoda/prja.js +43 -0
- package/src/solver-tools/lsoda/prja.js.map +1 -0
- package/src/solver-tools/lsoda/prja.ts +49 -0
- package/src/solver-tools/lsoda/scaleh.js +30 -0
- package/src/solver-tools/lsoda/scaleh.js.map +1 -0
- package/src/solver-tools/lsoda/scaleh.ts +33 -0
- package/src/solver-tools/lsoda/solsy.js +14 -0
- package/src/solver-tools/lsoda/solsy.js.map +1 -0
- package/src/solver-tools/lsoda/solsy.ts +18 -0
- package/src/solver-tools/lsoda/stoda.js +259 -0
- package/src/solver-tools/lsoda/stoda.js.map +1 -0
- package/src/solver-tools/lsoda/stoda.ts +286 -0
- package/src/solver-tools/lsoda-method.js +120 -0
- package/src/solver-tools/lsoda-method.js.map +1 -0
- package/src/solver-tools/lsoda-method.ts +136 -0
- package/src/solver-tools/mrt-method.js +121 -19
- package/src/solver-tools/mrt-method.js.map +1 -1
- package/src/solver-tools/mrt-method.ts +151 -22
- package/src/solver-tools/rk3-method.js +210 -0
- package/src/solver-tools/rk3-method.js.map +1 -0
- package/src/solver-tools/rk3-method.ts +257 -0
- package/src/solver-tools/rk4-method.js +236 -0
- package/src/solver-tools/rk4-method.js.map +1 -0
- package/src/solver-tools/rk4-method.ts +286 -0
- package/src/solver-tools/rkdp-method.js +247 -0
- package/src/solver-tools/rkdp-method.js.map +1 -0
- package/src/solver-tools/rkdp-method.ts +300 -0
- package/src/solver-tools/ros34prw-method.js +40 -2
- package/src/solver-tools/ros34prw-method.js.map +1 -1
- package/src/solver-tools/ros34prw-method.ts +40 -2
- package/src/solver-tools/ros3prw-method.js +40 -2
- package/src/solver-tools/ros3prw-method.js.map +1 -1
- package/src/solver-tools/ros3prw-method.ts +40 -2
- package/src/solver-tools/solver-defs.js +15 -3
- package/src/solver-tools/solver-defs.js.map +1 -1
- package/src/solver-tools/solver-defs.ts +91 -7
- package/src/tests/correctness.test.js +6 -4
- package/src/tests/correctness.test.js.map +1 -1
- package/src/tests/correctness.test.ts +6 -4
- package/src/tests/lsoda-lib-correctness.test.js +223 -0
- package/src/tests/lsoda-lib-correctness.test.js.map +1 -0
- package/src/tests/lsoda-lib-correctness.test.ts +283 -0
- package/src/tests/lsoda-lib-performance.test.js +95 -0
- package/src/tests/lsoda-lib-performance.test.js.map +1 -0
- package/src/tests/lsoda-lib-performance.test.ts +126 -0
- package/src/tests/performance.test.js +10 -8
- package/src/tests/performance.test.js.map +1 -1
- package/src/tests/performance.test.ts +10 -8
- package/src/tests/test-defs.js +14 -1
- package/src/tests/test-defs.js.map +1 -1
- package/src/tests/test-defs.ts +15 -1
- package/src/worker-tools/scripting.js +95 -1
- package/src/worker-tools/scripting.js.map +1 -1
- package/src/worker-tools/scripting.ts +104 -2
- package/src/worker-tools/solving.js +18 -2
- package/src/worker-tools/solving.js.map +1 -1
- package/src/worker-tools/solving.ts +25 -2
- package/typedoc.json +8 -0
|
@@ -48,10 +48,48 @@ const R_3 = B_3 - B_HAT_3;
|
|
|
48
48
|
const R_4 = B_4 - B_HAT_4;
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
/** Solve initial value problem using the ROS34PRw method
|
|
51
|
+
/** Solve initial value problem using the ROS34PRw method
|
|
52
52
|
* @param odes initial value problem for ordinary differential equations
|
|
53
53
|
* @param callback computations control callback
|
|
54
54
|
* @returns solution of the problem
|
|
55
|
+
* @example
|
|
56
|
+
* // Example. Solve the following initial value problem using the ROS34PRw method:
|
|
57
|
+
* // dx/dt = x + y - t
|
|
58
|
+
* // dy/dt = x * y + t
|
|
59
|
+
* // x(0) = 1
|
|
60
|
+
* // y(0) = -1
|
|
61
|
+
* // on [0, 2] with the step 0.01.
|
|
62
|
+
* import { ODEs, ros34prw } from 'diff-grok';
|
|
63
|
+
*
|
|
64
|
+
* const task: ODEs = {
|
|
65
|
+
* name: 'Example', // name of your model
|
|
66
|
+
* arg: {
|
|
67
|
+
* name: 't', // name of the argument
|
|
68
|
+
* start: 0, // initial value of the argument
|
|
69
|
+
* finish: 2, // final value of the argument
|
|
70
|
+
* step: 0.01, // solution grid step
|
|
71
|
+
* },
|
|
72
|
+
* initial: [1, -1], // initial values
|
|
73
|
+
* func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
|
|
74
|
+
* output[0] = y[0] + y[1] - t; // 1-st equation
|
|
75
|
+
* output[1] = y[0] * y[1] + t; // 2-nd equation
|
|
76
|
+
* },
|
|
77
|
+
* tolerance: 1e-7, // tolerance
|
|
78
|
+
* solutionColNames: ['x', 'y'], // names of solution functions
|
|
79
|
+
* };
|
|
80
|
+
*
|
|
81
|
+
* try {
|
|
82
|
+
* // Solve the problem using the ROS34PRw method
|
|
83
|
+
* const solution = ros34prw(task);
|
|
84
|
+
*
|
|
85
|
+
* // Print a table with the results
|
|
86
|
+
* console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
|
|
87
|
+
* const length = solution[0].length;
|
|
88
|
+
* for (let i = 0; i < length; ++i)
|
|
89
|
+
* console.log(solution[0][i], solution[1][i], solution[2][i]);
|
|
90
|
+
* } catch (err) {
|
|
91
|
+
* console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
92
|
+
* }
|
|
55
93
|
*/
|
|
56
94
|
export function ros34prw(odes: ODEs, callback?: Callback): Float64Array[] {
|
|
57
95
|
/** right-hand side of the IVP solved */
|
|
@@ -321,7 +359,7 @@ export function ros34prw(odes: ODEs, callback?: Callback): Float64Array[] {
|
|
|
321
359
|
yArrs[i][rowCount - 1] = y[i];
|
|
322
360
|
|
|
323
361
|
// 4. prepare output
|
|
324
|
-
const solution = Array<Float64Array>(dim);
|
|
362
|
+
const solution = Array<Float64Array>(dim + 1);
|
|
325
363
|
|
|
326
364
|
// independent variable
|
|
327
365
|
solution[0] = tArr;
|
|
@@ -28,10 +28,48 @@ const B_HAT_3 = 0.610268197627858;
|
|
|
28
28
|
const R_1 = B_1 - B_HAT_1;
|
|
29
29
|
const R_2 = B_2 - B_HAT_2;
|
|
30
30
|
const R_3 = B_3 - B_HAT_3;
|
|
31
|
-
/** Solve initial value problem using the
|
|
31
|
+
/** Solve initial value problem using the ROS3PRw method
|
|
32
32
|
* @param odes initial value problem for ordinary differential equations
|
|
33
33
|
* @param callback computations control callback
|
|
34
34
|
* @returns solution of the problem
|
|
35
|
+
* @example
|
|
36
|
+
* // Example. Solve the following initial value problem using the ROS3PRw method:
|
|
37
|
+
* // dx/dt = x + y - t
|
|
38
|
+
* // dy/dt = x * y + t
|
|
39
|
+
* // x(0) = 1
|
|
40
|
+
* // y(0) = -1
|
|
41
|
+
* // on [0, 2] with the step 0.01.
|
|
42
|
+
* import { ODEs, ros3prw } from 'diff-grok';
|
|
43
|
+
*
|
|
44
|
+
* const task: ODEs = {
|
|
45
|
+
* name: 'Example', // name of your model
|
|
46
|
+
* arg: {
|
|
47
|
+
* name: 't', // name of the argument
|
|
48
|
+
* start: 0, // initial value of the argument
|
|
49
|
+
* finish: 2, // final value of the argument
|
|
50
|
+
* step: 0.01, // solution grid step
|
|
51
|
+
* },
|
|
52
|
+
* initial: [1, -1], // initial values
|
|
53
|
+
* func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
|
|
54
|
+
* output[0] = y[0] + y[1] - t; // 1-st equation
|
|
55
|
+
* output[1] = y[0] * y[1] + t; // 2-nd equation
|
|
56
|
+
* },
|
|
57
|
+
* tolerance: 1e-7, // tolerance
|
|
58
|
+
* solutionColNames: ['x', 'y'], // names of solution functions
|
|
59
|
+
* };
|
|
60
|
+
*
|
|
61
|
+
* try {
|
|
62
|
+
* // Solve the problem using the ROS3PRw method
|
|
63
|
+
* const solution = ros3prw(task);
|
|
64
|
+
*
|
|
65
|
+
* // Print a table with the results
|
|
66
|
+
* console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
|
|
67
|
+
* const length = solution[0].length;
|
|
68
|
+
* for (let i = 0; i < length; ++i)
|
|
69
|
+
* console.log(solution[0][i], solution[1][i], solution[2][i]);
|
|
70
|
+
* } catch (err) {
|
|
71
|
+
* console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
72
|
+
* }
|
|
35
73
|
*/
|
|
36
74
|
export function ros3prw(odes, callback) {
|
|
37
75
|
/** right-hand side of the IVP solved */
|
|
@@ -221,7 +259,7 @@ export function ros3prw(odes, callback) {
|
|
|
221
259
|
for (let i = 0; i < dim; ++i)
|
|
222
260
|
yArrs[i][rowCount - 1] = y[i];
|
|
223
261
|
// 4. prepare output
|
|
224
|
-
const solution = Array(dim);
|
|
262
|
+
const solution = Array(dim + 1);
|
|
225
263
|
// independent variable
|
|
226
264
|
solution[0] = tArr;
|
|
227
265
|
// functions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ros3prw-method.js","sourceRoot":"","sources":["ros3prw-method.ts"],"names":[],"mappings":"AAAA;;;qDAGqD;AAErD,OAAO,EAAO,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EACpE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE7D,kDAAkD;AAClD,MAAM,KAAK,GAAG,mBAAmB,CAAC;AAElC,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC;AACrC,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzC,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEjC,MAAM,QAAQ,GAAG,CAAC,mBAAmB,CAAC;AACtC,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzC,MAAM,QAAQ,GAAG,CAAC,mBAAmB,CAAC;AACtC,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzC,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE5C,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,OAAO,GAAG,QAAQ,CAAC;AACzB,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AACrC,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpC,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAChC,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC;AACjC,MAAM,GAAG,GAAG,iBAAiB,CAAC;AAE9B,MAAM,OAAO,GAAG,mBAAmB,CAAC;AACpC,MAAM,OAAO,GAAG,mBAAmB,CAAC;AACpC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAElC,MAAM,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC;AAC1B,MAAM,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC;AAC1B,MAAM,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC;AAG1B
|
|
1
|
+
{"version":3,"file":"ros3prw-method.js","sourceRoot":"","sources":["ros3prw-method.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,10 +40,48 @@ const R_2 = B_2 - B_HAT_2;
|
|
|
40
40
|
const R_3 = B_3 - B_HAT_3;
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
/** Solve initial value problem using the
|
|
43
|
+
/** Solve initial value problem using the ROS3PRw method
|
|
44
44
|
* @param odes initial value problem for ordinary differential equations
|
|
45
45
|
* @param callback computations control callback
|
|
46
46
|
* @returns solution of the problem
|
|
47
|
+
* @example
|
|
48
|
+
* // Example. Solve the following initial value problem using the ROS3PRw method:
|
|
49
|
+
* // dx/dt = x + y - t
|
|
50
|
+
* // dy/dt = x * y + t
|
|
51
|
+
* // x(0) = 1
|
|
52
|
+
* // y(0) = -1
|
|
53
|
+
* // on [0, 2] with the step 0.01.
|
|
54
|
+
* import { ODEs, ros3prw } from 'diff-grok';
|
|
55
|
+
*
|
|
56
|
+
* const task: ODEs = {
|
|
57
|
+
* name: 'Example', // name of your model
|
|
58
|
+
* arg: {
|
|
59
|
+
* name: 't', // name of the argument
|
|
60
|
+
* start: 0, // initial value of the argument
|
|
61
|
+
* finish: 2, // final value of the argument
|
|
62
|
+
* step: 0.01, // solution grid step
|
|
63
|
+
* },
|
|
64
|
+
* initial: [1, -1], // initial values
|
|
65
|
+
* func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
|
|
66
|
+
* output[0] = y[0] + y[1] - t; // 1-st equation
|
|
67
|
+
* output[1] = y[0] * y[1] + t; // 2-nd equation
|
|
68
|
+
* },
|
|
69
|
+
* tolerance: 1e-7, // tolerance
|
|
70
|
+
* solutionColNames: ['x', 'y'], // names of solution functions
|
|
71
|
+
* };
|
|
72
|
+
*
|
|
73
|
+
* try {
|
|
74
|
+
* // Solve the problem using the ROS3PRw method
|
|
75
|
+
* const solution = ros3prw(task);
|
|
76
|
+
*
|
|
77
|
+
* // Print a table with the results
|
|
78
|
+
* console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
|
|
79
|
+
* const length = solution[0].length;
|
|
80
|
+
* for (let i = 0; i < length; ++i)
|
|
81
|
+
* console.log(solution[0][i], solution[1][i], solution[2][i]);
|
|
82
|
+
* } catch (err) {
|
|
83
|
+
* console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
84
|
+
* }
|
|
47
85
|
*/
|
|
48
86
|
export function ros3prw(odes: ODEs, callback?: Callback): Float64Array[] {
|
|
49
87
|
/** right-hand side of the IVP solved */
|
|
@@ -290,7 +328,7 @@ export function ros3prw(odes: ODEs, callback?: Callback): Float64Array[] {
|
|
|
290
328
|
yArrs[i][rowCount - 1] = y[i];
|
|
291
329
|
|
|
292
330
|
// 4. prepare output
|
|
293
|
-
const solution = Array<Float64Array>(dim);
|
|
331
|
+
const solution = Array<Float64Array>(dim + 1);
|
|
294
332
|
|
|
295
333
|
// independent variable
|
|
296
334
|
solution[0] = tArr;
|
|
@@ -35,21 +35,33 @@ export function jacobian(t, y, f, eps, f0Buf, f1Buf, output) {
|
|
|
35
35
|
y[j] -= eps;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
/** Error messeges
|
|
38
|
+
/** Error messeges
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
39
41
|
export var ERROR_MSG;
|
|
40
42
|
(function (ERROR_MSG) {
|
|
41
43
|
ERROR_MSG["MRT_FAILS"] = "The modified Rosenbrock triple method fails";
|
|
42
44
|
ERROR_MSG["ROS3PRW_FAILS"] = "The ROS3PRw method fails";
|
|
43
45
|
ERROR_MSG["ROS34PRW_FAILS"] = "The ROS34PRw method fails";
|
|
46
|
+
ERROR_MSG["RK4_FAILS"] = "The Runge-Kutta-Fehlberg 4(5) method fails";
|
|
47
|
+
ERROR_MSG["AB5_FAILS"] = "The Adams-Bashforth-Moulton 5 method fails";
|
|
48
|
+
ERROR_MSG["AB4_FAILS"] = "The Adams-Bashforth-Moulton 4 method fails";
|
|
49
|
+
ERROR_MSG["RKDP_FAILS"] = "The Dormand-Prince 5(4) method fails";
|
|
50
|
+
ERROR_MSG["RK3_FAILS"] = "The Bogacki-Shampine 3(2) method fails";
|
|
51
|
+
ERROR_MSG["LSODA_FAILS"] = "The LSODA method fails";
|
|
44
52
|
})(ERROR_MSG || (ERROR_MSG = {}));
|
|
45
53
|
;
|
|
46
|
-
/** Callback action
|
|
54
|
+
/** Callback action
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
47
57
|
export class CallbackAction extends Error {
|
|
48
58
|
constructor(msg) {
|
|
49
59
|
super(msg);
|
|
50
60
|
}
|
|
51
61
|
}
|
|
52
|
-
/** Default options of the solver
|
|
62
|
+
/** Default options of the solver
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
53
65
|
export var DEFAULT_OPTIONS;
|
|
54
66
|
(function (DEFAULT_OPTIONS) {
|
|
55
67
|
DEFAULT_OPTIONS["SCRIPTING"] = "{maxIterations: 1}";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solver-defs.js","sourceRoot":"","sources":["solver-defs.ts"],"names":[],"mappings":"AAAA,qBAAqB;
|
|
1
|
+
{"version":3,"file":"solver-defs.js","sourceRoot":"","sources":["solver-defs.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,17 +2,87 @@
|
|
|
2
2
|
|
|
3
3
|
import {Callback} from './callbacks/callback-base';
|
|
4
4
|
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Represents the right-hand side function **F(t, y)** of an ODE system.
|
|
7
|
+
*
|
|
8
|
+
* @param t - The independent variable.
|
|
9
|
+
* @param y - The current values of the system's state variables.
|
|
10
|
+
* @param output - A preallocated array where the computed derivatives
|
|
11
|
+
* should be written. This approach avoids unnecessary memory allocations
|
|
12
|
+
* and improves performance.
|
|
13
|
+
*/
|
|
6
14
|
export type Func = (t: number, y: Float64Array, output: Float64Array) => void;
|
|
7
15
|
|
|
8
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Optional configuration settings of the numerical solver of an initial value problem (ODE).
|
|
18
|
+
*
|
|
19
|
+
* @property maxIterations - The maximum number of iterations allowed.
|
|
20
|
+
* @property maxTimeMs - The maximum time in milliseconds allowed for the solver.
|
|
21
|
+
* @property method - The name of the numerical method to use.
|
|
22
|
+
*/
|
|
9
23
|
export type SolverOptions = {
|
|
10
24
|
maxIterations: number,
|
|
11
25
|
maxTimeMs: number,
|
|
12
26
|
method: string,
|
|
13
27
|
};
|
|
14
28
|
|
|
15
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Specifies a single-stage ODE model.
|
|
31
|
+
*
|
|
32
|
+
* @property name - The name of the model.
|
|
33
|
+
* @property initial - The initial values of the state variables. Can be
|
|
34
|
+
* an array or typed array.
|
|
35
|
+
* @property solutionColNames - Names of the columns in the model's output.
|
|
36
|
+
* @property tolerance - Tolerance for the numerical solver.
|
|
37
|
+
* @property func - The function representing the right-hand side F(t, y)
|
|
38
|
+
* of the ODE system.
|
|
39
|
+
* @property arg - Specification of the independent variable:
|
|
40
|
+
* - name: the variable's name
|
|
41
|
+
* - start: starting value
|
|
42
|
+
* - finish: ending value
|
|
43
|
+
* - step: step size for the grid
|
|
44
|
+
* * Example: Solve a simple initial value problem (IVP)
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* // Example. Solve the following initial value problem:
|
|
48
|
+
* // dx/dt = x + y - t
|
|
49
|
+
* // dy/dt = x * y + t
|
|
50
|
+
* // x(0) = 1
|
|
51
|
+
* // y(0) = -1
|
|
52
|
+
* // on [0, 2] with the step 0.01.
|
|
53
|
+
* import { ODEs, mrt } from 'diff-grok';
|
|
54
|
+
*
|
|
55
|
+
* const task: ODEs = {
|
|
56
|
+
* name: 'Example', // name of your model
|
|
57
|
+
* arg: {
|
|
58
|
+
* name: 't', // name of the argument
|
|
59
|
+
* start: 0, // initial value of the argument
|
|
60
|
+
* finish: 2, // final value of the argument
|
|
61
|
+
* step: 0.01, // solution grid step
|
|
62
|
+
* },
|
|
63
|
+
* initial: [1, -1], // initial values
|
|
64
|
+
* func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
|
|
65
|
+
* output[0] = y[0] + y[1] - t; // 1-st equation
|
|
66
|
+
* output[1] = y[0] * y[1] + t; // 2-nd equation
|
|
67
|
+
* },
|
|
68
|
+
* tolerance: 1e-7, // tolerance
|
|
69
|
+
* solutionColNames: ['x', 'y'], // names of solution functions
|
|
70
|
+
* };
|
|
71
|
+
*
|
|
72
|
+
* try {
|
|
73
|
+
* // Solve the problem using the MRT method
|
|
74
|
+
* const solution = mrt(task);
|
|
75
|
+
*
|
|
76
|
+
* // Print a table with the results
|
|
77
|
+
* console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
|
|
78
|
+
* const length = solution[0].length;
|
|
79
|
+
* for (let i = 0; i < length; ++i)
|
|
80
|
+
* console.log(solution[0][i], solution[1][i], solution[2][i]);
|
|
81
|
+
* } catch (err) {
|
|
82
|
+
* console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
83
|
+
* }
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
16
86
|
export type ODEs = {
|
|
17
87
|
name: string,
|
|
18
88
|
arg: {
|
|
@@ -76,25 +146,39 @@ export function jacobian(t: number, y: Float64Array, f: Func, eps: number,
|
|
|
76
146
|
}
|
|
77
147
|
}
|
|
78
148
|
|
|
79
|
-
/** Error messeges
|
|
149
|
+
/** Error messeges
|
|
150
|
+
* @internal
|
|
151
|
+
*/
|
|
80
152
|
export enum ERROR_MSG {
|
|
81
153
|
MRT_FAILS = 'The modified Rosenbrock triple method fails',
|
|
82
154
|
ROS3PRW_FAILS = 'The ROS3PRw method fails',
|
|
83
155
|
ROS34PRW_FAILS = 'The ROS34PRw method fails',
|
|
156
|
+
RK4_FAILS = 'The Runge-Kutta-Fehlberg 4(5) method fails',
|
|
157
|
+
AB5_FAILS = 'The Adams-Bashforth-Moulton 5 method fails',
|
|
158
|
+
AB4_FAILS = 'The Adams-Bashforth-Moulton 4 method fails',
|
|
159
|
+
RKDP_FAILS = 'The Dormand-Prince 5(4) method fails',
|
|
160
|
+
RK3_FAILS = 'The Bogacki-Shampine 3(2) method fails',
|
|
161
|
+
LSODA_FAILS = 'The LSODA method fails',
|
|
84
162
|
};
|
|
85
163
|
|
|
86
|
-
/** Callback action
|
|
164
|
+
/** Callback action
|
|
165
|
+
* @internal
|
|
166
|
+
*/
|
|
87
167
|
export class CallbackAction extends Error {
|
|
88
168
|
constructor(msg: string) {
|
|
89
169
|
super(msg);
|
|
90
170
|
}
|
|
91
171
|
}
|
|
92
172
|
|
|
93
|
-
/** Default options of the solver
|
|
173
|
+
/** Default options of the solver
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
94
176
|
export enum DEFAULT_OPTIONS {
|
|
95
177
|
SCRIPTING = '{maxIterations: 1}',
|
|
96
178
|
NO_CHECKS = '{ }',
|
|
97
179
|
}
|
|
98
180
|
|
|
99
|
-
/** IVP solving method
|
|
181
|
+
/** IVP solving method
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
100
184
|
export type SolverMethod = (odes: ODEs, callback?: Callback) => Float64Array[];
|
|
@@ -3,10 +3,12 @@ import { corrProbs } from '../../index';
|
|
|
3
3
|
import { getError } from './test-utils';
|
|
4
4
|
import { methods, MAX_MAD } from './test-defs';
|
|
5
5
|
methods.forEach((method, name) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
describe(`${name}`, () => {
|
|
7
|
+
corrProbs.forEach((problem) => {
|
|
8
|
+
test(`${problem.odes.name}`, () => {
|
|
9
|
+
const error = getError(method, problem);
|
|
10
|
+
expect(error).toBeLessThan(MAX_MAD);
|
|
11
|
+
});
|
|
10
12
|
});
|
|
11
13
|
});
|
|
12
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"correctness.test.js","sourceRoot":"","sources":["correctness.test.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IAC/B,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"correctness.test.js","sourceRoot":"","sources":["correctness.test.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IAC/B,QAAQ,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE;QACvB,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;gBAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -5,10 +5,12 @@ import {getError} from './test-utils';
|
|
|
5
5
|
import {methods, MAX_MAD} from './test-defs';
|
|
6
6
|
|
|
7
7
|
methods.forEach((method, name) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
describe(`${name}`, () => {
|
|
9
|
+
corrProbs.forEach((problem) => {
|
|
10
|
+
test(`${problem.odes.name}`, () => {
|
|
11
|
+
const error = getError(method, problem);
|
|
12
|
+
expect(error).toBeLessThan(MAX_MAD);
|
|
13
|
+
});
|
|
12
14
|
});
|
|
13
15
|
});
|
|
14
16
|
});
|