[学习笔记]拉格朗日插值法求多项式系数

本文介绍了拉格朗日插值法,通过nn个互不相同的点(xi,yi),求解n-1次多项式函数f(x),确保每个点满足f(xi)=yi。文章详细阐述了该方法的结论、证明过程及其在实际问题中的应用。" 108260290,10012180,XGBoost多分类实战与理论解析,"['机器学习', '算法', 'Python', 'Java', '人工智能']
Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一、引入

我们会遇到这样的问题:
给定 nn 个点 (xi,yi) ,求一个 n1n−1 次多项式函数 f(x)f(x)
使对于每个 ii ,都有 f(xi)=yi
其中 xixi 互不相同。
利用线性代数的知识可以得出有且仅有一个 f(x)f(x) 满足条件。

二、结论

下面直接给出结论:

f(x)=i=0n1yij=0,jin1xxjxixjf(x)=∑i=0n−1yi∏j=0,j≠in−1x−xjxi−xj

复杂度 O(n2)O(n2)

三、证明

对于任意 0k<n0≤k<n ,将 xkxk 代入公式:
对于 i=ki=k ,有 xi=xkxi=xk

ykj=0,jkn1xkxjxkxj=ykyk∏j=0,j≠kn−1xk−xjxk−xj=yk

而对于 iki≠k ,在满足 0j<n,ji0≤j<n,j≠ijj 中一定有一个 j=k
于是就必定有一个 xkxkxk−xk 的项。
所以对于 iki≠k
yij=0,jin1xkxjxixj=0yi∏j=0,j≠in−1xk−xjxi−xj=0

得证。

四、应用

如果知道了两个变量之间的联系是多项式并知道了多项式的次数 n1n−1 ,那么可以取 nn 个值(要取合适的值)代入多项式并求解。
如:
给定 n,k ,求:

i=1nik∑i=1nik

n1018,k106n≤1018,k≤106
我们知道:
i=1ni0=n∑i=1ni0=n

i=1ni1=n(n+1)2∑i=1ni1=n(n+1)2

i=1ni2=n(n+1)(2n+1)6∑i=1ni2=n(n+1)(2n+1)6

i=1ni3=(n(n+1)2)2∑i=1ni3=(n(n+1)2)2

得出结论: f(n,k)=ni=1ikf(n,k)=∑i=1nik 是一个 k+1k+1 次多项式。
可以取 k+2k+2 个值 1,2,...,k+21,2,...,k+2 并计算出 f(1,k),f(2,k),...,f(k+2,k)f(1,k),f(2,k),...,f(k+2,k) 代入:
f(n,k)=i=1k+2f(i,k)j=1,jik+2njijf(n,k)=∑i=1k+2f(i,k)∏j=1,j≠ik+2n−ji−j

可以 O(k)O(k) 预处理出 g(i)=k+2j=1,ji{nj}g(i)=∏j=1,j≠ik+2{n−j} 。对 j<ij<ij>ij>i 分别处理即可。
而对 k+2j=1,ji{ij}∏j=1,j≠ik+2{i−j} ,也可以分 j<ij<ij>ij>i 分别处理:
j=1,jik+2{ij}=(1)k+2i(i1)!(k+2i)!∏j=1,j≠ik+2{i−j}=(−1)k+2−i(i−1)!(k+2−i)!

预处理阶乘后,复杂度就是 O(k)O(k) 的。然而由于求 f(i,k)f(i,k) 时要求幂,复杂度 O(klogk)O(klog⁡k)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值