问题描述
给出 n+1 个二维平面上的点对 (x0,y0),(x1,y1),(x2,y2),⋯,(xn,yn) ,求一个经过这些点的不超过 n 次的多项式 P(x)=pn⋅xn+pn−1⋅xn−1+pn−2⋅xn−2+⋯+p1⋅x+p0 ,也就是 P(xi)=yi 。这个多项式是唯一的。
这个过程叫做插值,也是从多项式的点值表达转换成系数表达的问题。
注:这里使用从0开始的下标是为了让点的下标和多项式系数的下标还有 x 的幂次显得整齐,下面的代码中的下标不一定是从0开始的。
解决思路
拉格朗日插值
由这 n+1 个点,可以构造对应的 n+1 个多项式,其中第 i 的多项式的形式为:
li(x)=n∏j=0,j≠i(x−xj)(xi−xj)
把下标为 i 的点 xi 代入,可以得到:
li(xi)=n∏j=0,j≠i(xi−xj)(xi−xj)=n∏j=0,j≠i1=1
把给定的点中,下标不为 i 的某个点 xj0 代入,可以得到:
li(xj0)=n∏j=0,j≠i(xj0−xj)(xi−xj)=0
因为分子部分总存在 (xj0−xj0)=0 所以上式为 0 。
把不在给定的点中的任意点 x 代入,显然有 n 项,所以,这是一个 n 次的多项式。
于是,把上面的 n+1 个不同的 li(x) 和 yi 相乘,再相加,即可构造下面的多项式:
L(x)=n∑i=0yi⋅li(x)
由上面的推理可知, L(xi)=yi ,并且 L(xi) 是一个不超过 n 次的多项式(由于最高次的系数可能会被抵消,导致次数降低)。
由唯一性定理可知,这个 L(x) 就是我们要找的 P(x) ,即
P(x)=L(x)
模板:【数学】多项式插值 - 拉格朗日插值
牛顿插值
多项式快速插值
高斯消元
求解未知数为 pi,i=0,1,2,⋯,n 的方程组
⎡⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎢⎣xn0xn−10xn−20⋯x0xn1xn−11xn−21⋯x1xn2xn−12xn−22⋯x2⋮⋮⋮⋱⋮xnnxn−1nxn−2n⋯xn⎤⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥⎦=⎡⎢
⎢
⎢
⎢
⎢
⎢
⎢⎣y0y1y2⋮yn⎤⎥
⎥
⎥
⎥
⎥
⎥
⎥⎦
利用高斯消元在 O(n3) 时间内求出这个方程组的解。
引申阅读
重心拉格朗日插值法、差分法、龙格现象
https://www.luogu.com.cn/problem/solution/P4781
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-04-10 【算法 - 数据结构】主席树