UNPKG

4.16 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13var __spreadArrays = (this && this.__spreadArrays) || function () {
14 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
15 for (var r = Array(s), k = 0, i = 0; i < il; i++)
16 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
17 r[k] = a[j];
18 return r;
19};
20Object.defineProperty(exports, "__esModule", { value: true });
21exports._scalarMult = function (scalar, vector) { return vector.map(function (x) { return scalar * x; }); };
22exports._vectorAdd = function (a, b) { return a.map(function (x, i) { return x + b[i]; }); };
23exports.UndependentVariableError = new Error('The destination of the undependent variable has to be greater than its start');
24exports.StepSizeDivisibilityError = new Error('The range has to be an divisible by the step size');
25function default_1(ODE, initialCondition, range, stepSize) {
26 if (stepSize === void 0) { stepSize = 1; }
27 var t0 = range[0], tn = range[1];
28 var _return;
29 if (tn > t0) {
30 var steps = (tn - t0) / stepSize;
31 var args = {
32 equation: ODE,
33 start: t0,
34 stepSize: stepSize,
35 steps: steps,
36 };
37 if (Number.isInteger(steps)) {
38 if (typeof initialCondition === 'object' && initialCondition.length > 1) {
39 _return = rungeKuttaMulti(__assign(__assign({}, args), { initialCondition: initialCondition }));
40 }
41 else {
42 var _initialCondition = void 0;
43 if (typeof initialCondition === 'object') {
44 _initialCondition = initialCondition[0];
45 }
46 else {
47 _initialCondition = initialCondition;
48 }
49 _return = rungeKutta1d(__assign(__assign({}, args), { initialCondition: _initialCondition }));
50 }
51 return _return;
52 }
53 throw exports.StepSizeDivisibilityError;
54 }
55 throw exports.UndependentVariableError;
56}
57exports.default = default_1;
58var rungeKutta1d = function (args) {
59 var equation = args.equation, initialCondition = args.initialCondition, start = args.start, stepSize = args.stepSize, steps = args.steps;
60 var f = equation;
61 var n = steps;
62 var h = stepSize;
63 var y = __spreadArrays([initialCondition], new Array(n).fill(0));
64 var t = start;
65 var i = 0;
66 var k1, k2, k3, k4;
67 while (i < n) {
68 k1 = f(t, y[i]);
69 k2 = f(t + (.5 * h), y[i] + (.5 * h * k1));
70 k3 = f(t + (.5 * h), y[i] + (.5 * h * k2));
71 k4 = f(t + h, y[i] + (h * k3));
72 y[i + 1] = y[i] + (h * (k1 + (2 * k2) + (2 * k3) + k4) / 6);
73 t += h;
74 i++;
75 }
76 return y;
77};
78var rungeKuttaMulti = function (args) {
79 var equation = args.equation, initialCondition = args.initialCondition, start = args.start, stepSize = args.stepSize, steps = args.steps;
80 var f = equation;
81 var n = steps;
82 var h = stepSize;
83 var y = [initialCondition];
84 var m = initialCondition.length;
85 var t = start;
86 var i = 0;
87 var k1, k2, k3, k4;
88 while (i < n) {
89 var yNext = [];
90 k1 = f(t, y[i]);
91 k2 = f(t + (.5 * h), exports._vectorAdd(y[i], exports._scalarMult(.5 * h, k1)));
92 k3 = f(t + (.5 * h), exports._vectorAdd(y[i], exports._scalarMult(.5 * h, k2)));
93 k4 = f(t + h, exports._vectorAdd(y[i], exports._scalarMult(h, k3)));
94 for (var k = 0; k < m; k++) {
95 yNext.push(y[i][k] + (h * (k1[k] + (2 * k2[k]) + (2 * k3[k]) + k4[k]) / 6));
96 }
97 y.push(yNext);
98 t += h;
99 i++;
100 }
101 return y;
102};
103//# sourceMappingURL=index.js.map
\No newline at end of file