2024-06-04 13:41:33 +02:00

38 lines
748 B
JavaScript

import {
interpolatorSplineBasisClosed,
interpolatorSplineBasis
} from './splineBasis.js';
const solve = v => {
let i;
let n = v.length - 1;
let c = new Array(n);
let _v = new Array(n);
let sol = new Array(n);
c[1] = 1 / 4;
_v[1] = (6 * v[1] - v[0]) / 4;
for (i = 2; i < n; ++i) {
c[i] = 1 / (4 - c[i - 1]);
_v[i] = (6 * v[i] - (i == n - 1 ? v[n] : 0) - _v[i - 1]) * c[i];
}
sol[0] = v[0];
sol[n] = v[n];
if (n - 1 > 0) {
sol[n - 1] = _v[n - 1];
}
for (i = n - 2; i > 0; --i) {
sol[i] = _v[i] - c[i] * sol[i + 1];
}
return sol;
};
export const interpolatorSplineNatural = arr =>
interpolatorSplineBasis(solve(arr));
export const interpolatorSplineNaturalClosed = arr =>
interpolatorSplineBasisClosed(solve(arr));