Featured image of post 实现拉格朗日插值算法

实现拉格朗日插值算法

实现拉格朗日插值算法

之前做图片曲线调节的时候使用到了拉格朗日插值算法,主要参考了维基百科,这里简单记录一下

什么是拉格朗日插值算法

如何通过给定的有限点得到拉格朗日插值函数

示例

维基百科上交代的算是比较明白了,然后我们要做的就是用代码去实现这个算法了,下面给出我的实现

const points = [
  [4, 10],
  [5, 5.25],
  [6, 1],
];

const getLa = (points) => {
  return (i) => {
    function la(points, index = 0) {
      if (index === points.length) return 0;

      const [x, y] = points[index];

      const up = points.reduce(
        (pre, [xn], upIndex) => (upIndex === index ? pre : pre * (i - xn)),
        1
      );

      const down = points.reduce(
        (pre, [xn], downIndex) => (downIndex === index ? pre : pre * (x - xn)),
        1
      );

      return y * (up / down) + la(points, index + 1);
    }

    return la(points);
  };
};

const laFn = getLa(points);

console.log(laFn(18)); // -11

我写这个的时候感觉难点倒是不在算法上,而是如何把算法转换为我们在程序中可用的函数

Licensed under CC BY-NC-SA 4.0