| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | import defined from "./defined.js";/** * An {@link InterpolationAlgorithm} for performing Lagrange interpolation. * * @namespace LagrangePolynomialApproximation */const LagrangePolynomialApproximation = {  type: "Lagrange",};/** * Given the desired degree, returns the number of data points required for interpolation. * * @param {Number} degree The desired degree of interpolation. * @returns {Number} The number of required data points needed for the desired degree of interpolation. */LagrangePolynomialApproximation.getRequiredDataPoints = function (degree) {  return Math.max(degree + 1.0, 2);};/** * Interpolates values using Lagrange Polynomial Approximation. * * @param {Number} x The independent variable for which the dependent variables will be interpolated. * @param {Number[]} xTable The array of independent variables to use to interpolate.  The values * in this array must be in increasing order and the same value must not occur twice in the array. * @param {Number[]} yTable The array of dependent variables to use to interpolate.  For a set of three * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}. * @param {Number} yStride The number of dependent variable values in yTable corresponding to * each independent variable value in xTable. * @param {Number[]} [result] An existing array into which to store the result. * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided. */LagrangePolynomialApproximation.interpolateOrderZero = function (  x,  xTable,  yTable,  yStride,  result) {  if (!defined(result)) {    result = new Array(yStride);  }  let i;  let j;  const length = xTable.length;  for (i = 0; i < yStride; i++) {    result[i] = 0;  }  for (i = 0; i < length; i++) {    let coefficient = 1;    for (j = 0; j < length; j++) {      if (j !== i) {        const diffX = xTable[i] - xTable[j];        coefficient *= (x - xTable[j]) / diffX;      }    }    for (j = 0; j < yStride; j++) {      result[j] += coefficient * yTable[i * yStride + j];    }  }  return result;};export default LagrangePolynomialApproximation;
 |