38 lines
748 B
JavaScript
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));
|