lagrange拉格朗日插值【学习笔记】

问题描述

  • lagrange插值解决一种问题:给定 n + 1 n+1 n+1个点和值(可以看作 ( x , y ) (x,y) (x,y)),用以描述一个 n n n次多项式,需要求出其他 x x x对应的多项式的值。

  • 设前 n + 1 n+1 n+1个点为 ( x i , y i ) (x_{i},y_{i}) (xi,yi),对于当前 的点 k k k,有
    f ( k ) = ∑ i = 0 n   y i ∏ j ≠ i   ( k − x [ j ] ) ( x [ i ] − x [ j ] ) f(k)=\sum_{i=0}^n \ y_{i} \prod_{j \neq i} \ {(k-x[j])\over (x[i]-x[j])} f(k)=i=0n yij=i (x[i]x[j])(kx[j])

  • 证明:首先n+1个点可以确定一个n次多项式。
    对于给出的点 ( x i , y i ) (x_{i},y_{i}) (xi,yi),带入 x i x_{i} xi可得结果为 y i y_{i} yi,所以这 n + 1 n+1 n+1个点在此 n n n次多项式上,即可确定有且仅有这一多项式。

  • 应用:多点查值:
    已有 n + 1 n+1 n+1个点,要对于询问的 m m m个点 k k k查出多项式的值,要求做到 O ( n m + n 2 ) O(nm+n^2) O(nm+n2)
    思路:我们把式子变形,分成与 给定点相关的项, O ( n 2 ) O(n^2) O(n2)预处理,再每次 O ( n ) O(n) O(n)计算与 k k k相关的项即可。

  • 实现:
    f ( k ) = ∑ i = 0 n   y i ∏ j ≠ i   ( k − x [ j ] ) ( x [ i ] − x [ j ] ) f(k)=\sum_{i=0}^n \ y_{i} \prod_{j \neq i} \ {(k-x[j])\over (x[i]-x[j])} f(k)=i=0n yij=i (x[i]x[j])(kx[j])

t [ i ] = y i ∏ j = 0 n ( x [ i ] − x [ j ] ) t[i]={y_{i}\over {\prod_{j=0}^n(x[i]-x[j])}} t[i]=j=0n(x[i]x[j])yi

f ( k ) = ∑ i = 0 n   t [ i ] ∏ i ≠ j ( k − x [ j ] ) f(k)=\sum_{i=0}^n \ {t[i]\prod_{i\neq j} (k-x[j])} f(k)=i=0n t[i]i=j(kx[j])
g = ∏ i = 0 n ( k − x [ i ] ) g=\prod_{i=0}^n(k-x[i]) g=i=0n(kx[i])
f ( k ) = g ∑ i = 0 n   t [ i ] ( k − x [ i ] ) f(k)=g \sum_{i=0}^n \ {t[i]\over(k-x[i])} f(k)=gi=0n (kx[i])t[i]

预处理出 t [ i ] t[i] t[i], O ( n ) O(n) O(n)查出 f ( k ) f(k) f(k)


  • 模板:洛谷P4781
    注意 ( x [ i ] − x [ j ] ) (x[i]-x[j]) (x[i]x[j])不要改变其正负性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值