拉格朗日插值法小结

本文介绍了如何利用拉格朗日插值法构造通过已知点的多项式。通过分解多个特定函数并求和的方式,可以得到所需多项式。文章还探讨了不同情况下插值的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插值就是找一个多项式过几个已知的点。

使用待定系数法+高斯消元可以做到O(n3)O(n3)。这显然不是最优解,不然标签就是高斯消元了= =

下面介绍拉格朗日插值法。
我们考虑一个多项式函数f(x)f(x),其中f(xi)=yif(xi)=yi。再考虑一个一个多项式g(x)g(x),其中g(xi)=zig(xi)=zi。他们的和函数h(x)h(x),即这两个多项式的和,可以表示成h(xi)=yi+zih(xi)=yi+zi

那么,举个例子,如果我们找到一个多项式y=k1x+b1y=k1x+b1(1,3)(2,0)(1,3)和(2,0),还有一个多项式y=k2x+b2y=k2x+b2(1,0)(2,1)(1,0)和(2,1),把这两个多项式加起来,就可以的到一个过(1,3)(2,1)(1,3)和(2,1)的多项式。

假如我们要为n个点做一个n-1次多项式,设这n个点为(xi,yi)(xi,yi),这个多项式可以看做n个下面的函数的和。其中,第ii个多项式函数fi除了在fi(xi)=yifi(xi)=yi外,其他的位置取值都为0,即fi(xj)=0(ij)fi(xj)=0(i≠j)

大家应该学过二次函数的零点式,即

f(x)=a(xx1)(xx2)f(x)=a(x−x1)(x−x2)

显然在f(x)=0f(x)=0时,必有x1,x2x1,x2两解。推而广之,一个有n个顶点的n次多项式可以写为,
f(x)=a(xx1)(xx2)(xxn)f(x)=a(x−x1)(x−x2)……(x−xn)

那么插值用的第i个多项式可写作为

fi(x)=aij(xxj)fi(x)=a∏i≠j(x−xj)

又有fi(xi)=yifi(xi)=yi,带入xixi,可得

a=yiij(xixj)a=yi∏i≠j(xi−xj)

所以

fi(x)=yiij(xxj)ij(xixj)fi(x)=yi∗∏i≠j(x−xj)∏i≠j(xi−xj)

所以,插值总式为,

f(x)=i=1nyiij(xxj)ij(xixj)f(x)=∑i=1nyi∗∏i≠j(x−xj)∏i≠j(xi−xj)

也可以写作,

f(x)=i=1naij(xxj)f(x)=∑i=1na∗∏i≠j(x−xj)

显然这时候预处理aaO(n2),求一次值也要O(n2)O(n2)

如果我们先预处理出D=ni=1(xxi)D=∏i=1n(x−xi)Dxxi=ij(xxj)Dx−xi=∏i≠j(x−xj),就可以O(n)O(n)求值。

假如xixi为等差数列,那么也可以通过预处理阶乘跑出 ij(xixj)∏i≠j(xi−xj),从而做到O(n)O(n)插值,O(n)O(n)求值。

也就是告诉我们,当xixi可以由我们定的时候,显然要按顺序算啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值