拉格朗日插值法相关

插值法

已知函数 y = f ( k ) y=f(k) y=f(k),它很难求
但如果已知 y = f ( k ) y=f(k) y=f(k) ( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . , ( x n , y n ) (x_0,y_0),(x_1,y_1),...,(x_n,y_n) (x0,y0),(x1,y1),...,(xn,yn) n + 1 n+1 n+1个点,我们就可以构造一个多项式 y = g ( k ) y=g(k) y=g(k)使
g ( x i ) = y i ( i ∈ [ 0 , n ] ) g(x_i)=y_i(i\in[0,n]) g(xi)=yi(i[0,n])
也可以说是构造一个函数 y = g ( k ) y=g(k) y=g(k)使 y y y经过平面上所有 n + 1 n+1 n+1个点
那么对于一个数 i ( i ≠ x 0 , x 1 , . . . , x n ) i(i≠x_0,x_1,...,x_n) i(i̸=x0,x1,...,xn),可以用 g ( i ) g(i) g(i)的值作为准确值 f ( i ) f(i) f(i)近似值
这就是插值法


拉格朗日插值法

原理

如果 y = f ( k ) = ∑ i = 0 n a i k i y=f(k)=\sum^n_{i=0}a_ik^i y=f(k)=i=0naiki,我们可以把 n + 1 n+1 n+1 x , y x,y x,y代入,得到 n + 1 n+1 n+1条方程
解方程组,高斯消元 O ( n 3 ) O(n^3) O(n3)求出每一项的系数
但其实不一定非得这么做

假设现在有三个点 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) , x 0 ≠ x 1 ≠ x 2 (x_0,y_0),(x_1,y_1),(x_2,y_2),x_0≠x_1≠x_2 (x0,y0),(x1,y1),(x2,y2),x0̸=x1̸=x2
不解方程组,求一条同时经过三点的函数 y = f ( k ) y=f(k) y=f(k) (可能是一条抛物线或一条直线)
不考虑三点共线,我们就把它看做一条抛物线来解
拉格朗日(Lagrange) 认为 f ( n ) f(n) f(n)可以通过三条抛物线相加得到

  • 函数 y = f 0 ( k ) y=f_0(k) y=f0(k),过 ( x 0 , 1 ) , ( x 1 , 0 ) , ( x 2 , 0 ) (x_0,1),(x_1,0),(x_2,0) (x0,1),(x1,0),(x2,0)三点

  • 函数 y = f 1 ( k ) y=f_1(k) y=f1(k),过 ( x 0 , 0 ) , ( x 1 , 1 ) , ( x 2 , 0 ) (x_0,0),(x_1,1),(x_2,0) (x0,0),(x1,1),(x2,0)三点

  • 函数 y = f 2 ( k ) y=f_2(k) y=f2(k),过 ( x 0 , 0 ) , ( x 1 , 0 ) , ( x 2 , 1 ) (x_0,0),(x_1,0),(x_2,1) (x0,0),(x1,0),(x2,1)三点

为什么非得是这样的三个函数呢?
因为把三条函数各乘上 y 0 , y 1 , y 2 y_0,y_1,y_2 y0,y1,y2,会有美妙的性质

  • 函数 y = y 0 f 0 ( k ) y=y_0f_0(k) y=y0f0(k),过 ( x 0 , y 0 ) , ( x 1 , 0 ) , ( x 2 , 0 ) (x_0,y_0),(x_1,0),(x_2,0) (x0,y0),(x1,0),(x2,0)三点

  • 函数 y = y 1 f 1 ( k ) y=y_1f_1(k) y=y1f1(k),过 ( x 0 , 0 ) , ( x 1 , y 1 ) , ( x 2 , 0 ) (x_0,0),(x_1,y_1),(x_2,0) (x0,0),(x1,y1),(x2,0)三点

  • 函数 y = y 2 f 2 ( k ) y=y_2f_2(k) y=y2f2(k),过 ( x 0 , 0 ) , ( x 1 , 0 ) , ( x 2 , y 2 ) (x_0,0),(x_1,0),(x_2,y_2) (x0,0),(x1,0),(x2,y2)三点

那么把 y 0 f 0 ( k ) , y 1 f 1 ( k ) y_0f_0(k),y_1f_1(k) y0f0(k),y1f1(k) y 2 f 2 ( k ) y_2f_2(k) y2f2(k)加起来,最终的函数不就同时过三点了
所以 f ( k ) = y 0 f 0 ( k ) + y 1 f 1 ( k ) + y 2 f 2 ( k ) f(k)=y_0f_0(k)+y_1f_1(k)+y_2f_2(k) f(k)=y0f0(k)+y1f1(k)+y2f2(k)
对于为什么可以这么构造这东西,有一篇知乎说得还好,可以去看一下

构造

构造哪一个先都是一样的,所以我们只考虑构造 f 0 ( k ) f_0(k) f0(k)
明显,我们可以这样来构造 f 0 ( k ) = ( k − x 1 ) ( k − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) f_0(k)={{(k-x_1)(k-x_2)}\over{(x_0-x_1)(x_0-x_2)}} f0(k)=(x0x1)(x0x2)(kx1)(kx2)

k = x 0 k=x_0 k=x0代入,值为 1 1 1;把 k = x 1 k=x_1 k=x1 k = x 2 k=x_2 k=x2代入,值都为 0 0 0
加上剩下的两个函数放在一起也可以这么写 f i ( k ) = ∏ i ≠ j 0 ≤ j ≤ n k − x j x i − x j = ∏ i ≠ j 0 ≤ j ≤ n ( k − x j ) ∏ i ≠ j 0 ≤ j ≤ n ( x i − x j ) f_i(k)=\prod^{0≤j≤n}_{i≠j}{{k-x_j}\over{x_i-x_j}}={\prod^{0≤j≤n}_{i≠j}{(k-x_j)}\over\prod^{0≤j≤n}_{i≠j}{(x_i-x_j)}} fi(k)=i̸=j0jnxixjkxj=i̸=j0jn(xixj)i̸=j0jn(kxj)

最终的 f ( k ) f(k) f(k),就变成了
f ( k ) = ∑ i = 0 n y i ∗ ∏ i ≠ j 0 ≤ j ≤ n ( k − x j ) ∏ i ≠ j 0 ≤ j ≤ n ( x i − x j ) f(k)=\sum^{n}_{i=0}y_i*{\prod^{0≤j≤n}_{i≠j}{(k-x_j)}\over\prod^{0≤j≤n}_{i≠j}{(x_i-x_j)}} f(k)=i=0nyii̸=j0jn(xixj)i̸=j0jn(kxj)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值