实现拉格朗日插值算法
之前做图片曲线调节的时候使用到了拉格朗日插值算法,主要参考了维基百科,这里简单记录一下
什么是拉格朗日插值算法
如何通过给定的有限点得到拉格朗日插值函数
示例
维基百科上交代的算是比较明白了,然后我们要做的就是用代码去实现这个算法了,下面给出我的实现
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
我写这个的时候感觉难点倒是不在算法上,而是如何把算法转换为我们在程序中可用的函数