拉格朗日插值 学习笔记

我们知道,对于一个 k 次多项式,我们只需知道它在 k+1 个点上的取值,就能求出这个多项式。我们可以列方程求出每一个的系数,但是这样的时间复杂度是 n3 的,所以我们使用一些别的方法来求出对于某个点的值。

拉格朗日插值:

设已知平面内的 n 个点,要求这 n 个点的 n1 次的函数。我们将每个点 ix轴 上的投影设为 i ,我们将每个点 i 与其余点的投影设一个函数 fi(x)=aj=1,j!=in(xxj) ,其中 a 是常数,使用交点式来表达一个函数。将点 (xi,yi) 代入后,可以求出 a=yij=1,j!=in(xixj) ,于是函数 fi(x) 的表达式为:

fi(x)=yij=1,j!=inxxjxixj

然后最终这 n 个点的函数 f(x)=i=1nfi(x) ,即:

f(x)=i=1nyij=1,j!=inxxjxixj

这个就是拉格朗日插值的式子了,时间复杂度为 O(n2)

我们可以使用多项式将其优化至 O(nlog2 n)

横坐标连续的拉格朗日插值:

在一些题目中,如果给定的点有上面的这种性质 或 题目并没有限制点的横坐标的话,那么我们可以将时间复杂度优化至 O(n)

我们假设这些点的横坐标为 1...n ,然后原来的式子就可以化成:

f(x)=i=1nyij=1,j!=inxjij

将分子分母分开来处理

j=1,j!=inxj=j=1n(xj)xi

这里可以预处理上面的积,然后除掉 (xi) 或 处理出以 i 为分界点的 (xj) 的前后缀的积。

分母:

j=1,j!=inij=(i1)!(1)ni(ni)!

然后总的式子就变成了:

f(x)=i=1nyij=1,j!=inxjij=i=1n(1)niyij=1n(xj)(xi)(i1)!(ni)!

预处理阶乘的倒数就好了。

posted @   Cyan_wind  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示