真.浅析拉格朗日插值法

真.浅析拉格朗日插值法

拉格朗日插值法用来干什么

mmmm…,这个不好解释
形象的来说,就是给你一个函数 f ( x ) f(x) f(x)(不知道函数是什么的自己查),这个函数你不知道是长什么样子的,然后告诉你这个函数的最高次数是 n n n,再给你 n + 1 n+1 n+1数,以及这n+1个点每个的函数值也告诉你,让你求 f ( k ) f(k) f(k),k可以为任何数

从数学角度来看待:
有一个函数 f ( x ) , 最高次数项为 n 已知 n + 1 个数 x 0 , x 1 , x 2 . . . x n , 和 f ( x 0 ) , f ( x 1 ) . . . . f ( x n ) 求 f ( k ) 有一个函数f(x),最高次数项为n\\ 已知n+1个数x_0,x_1,x_2...x_n,和f(x_0),f(x_1)....f(x_n)\\ 求f(k) 有一个函数f(x),最高次数项为n已知n+1个数x0,x1,x2...xn,f(x0),f(x1)....f(xn)f(k)
说实话,我敢称拉格朗日插值为数学读心术

拉格朗日插值怎么做

首先,我们先抛开拉格朗日插值法不谈,就只看题目,你的想法是什么?

一阶同学:?,二阶同学:?,三阶同学:?,长郡oj学生(周禹坤/姜元程/…):高斯消元!!!

没错,确实可以用高斯消元来解,问题是怎么解?
我们知道这个函数的最高次数项为 n , 所以说这个函数可以写成如下形式 : f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + . . . + a n x n a i 是 i 次项的系数 因此可以写出高斯消元组 a 0 + a 1 x 0 + a 2 x 0 2 + a 3 x 0 3 + . . . + a n x 0 n = f ( x 0 ) a 0 + a 1 x 1 + a 2 x 1 2 + a 3 x 1 3 + . . . + a n x 1 n = f ( x 1 ) . . . a 0 + a 1 x n + a 2 x n 2 + a 3 x n 3 + . . . + a n x n n = f ( x n ) 把每个系数求出来之后,再将 k 带入进去,就可以得到 f ( k ) 了 我们知道这个函数的最高次数项为n,所以说这个函数可以写成如下形式:\\ f(x)=a_0+a_1x+a_2x^2+a_3x^3+...+a_nx^n\\ a_i是i次项的系数\\ 因此可以写出高斯消元组\\ a_0+a_1x_0+a_2x_0^2+a_3x_0^3+...+a_nx_0^n=f(x_0)\\ a_0+a_1x_1+a_2x_1^2+a_3x_1^3+...+a_nx_1^n=f(x_1)\\ .\\ .\\ .\\ a_0+a_1x_n+a_2x_n^2+a_3x_n^3+...+a_nx_n^n=f(x_n)\\ 把每个系数求出来之后,再将k带入进去,就可以得到f(k)了 我们知道这个函数的最高次数项为n,所以说这个函数可以写成如下形式:f(x)=a0+a1x+a2x2+a3x3+...+anxnaii次项的系数因此可以写出高斯消元组a0+a1x0+a2x02+a3x03+...+anx0n=f(x0)a0+a1x1+a2x12+a3x13+...+anx1n=f(x1)...a0+a1xn+a2xn2+a3xn3+...+anxnn=f(xn)把每个系数求出来之后,再将k带入进去,就可以得到f(k)

我们想想这种方法的时间复杂度是多少?

O ( n 3 + n ) = O ( n 3 ) O(n^3+n)=O(n^3) O(n3+n)=O(n3)

可以看到复杂度特别的高,对于 n ≤ 1 0 3 n\le10^3 n103的数据就过不了了

那么我们再来看拉格朗日插值

定理一: n + 1 n+1 n+1个点,确定一个 n n n次多项式

所以说我们只要自己构造一个n次函数 g ( x ) g(x) g(x),他可以穿过那 n + 1 n+1 n+1个点,那么他就是 f ( x ) f(x) f(x)

那我们考虑如何构造。我们可以构造 n + 1 n+1 n+1个函数 f 0 ( x ) , f 1 ( x ) , f 2 ( x ) . . . f n ( x ) f_0(x),f_1(x),f_2(x)...f_n(x) f0(x),f1(x),f2(x)...fn(x)

构造要求: f i ( x ) , 当 x 为 x i 时 , f i ( x ) 为 1 , 当 x 为 x j ( j 不等于 i ) 时 f i ( x ) 为 0 , 其他情况后面再说 f_i(x),当x为x_i时,f_i(x)为1,当x为x_j(j不等于i)时f_i(x)为0,其他情况后面再说 fi(x),xxi,fi(x)1,xxj(j不等于i)fi(x)0,其他情况后面再说

先看当 x 为 x j ( j 不等于 i ) 时 f i ( x ) 为 0 这一条,我们知道 , 0 乘任何数都等于 0 ,可以考虑 f i ( x ) = ∏ j = 0 , j 不等于 i n ( x − x j ) , 这样子就满足了这一条 先看当x为x_j(j不等于i)时f_i(x)为0这一条,我们知道,0乘任何数都等于0,可以考虑f_i(x)=\prod_{j=0,j不等于i}^{n}(x-x_j),这样子就满足了这一条 先看当xxj(j不等于i)fi(x)0这一条,我们知道,0乘任何数都等于0,可以考虑fi(x)=j=0,j不等于in(xxj),这样子就满足了这一条

那么 f i ( x ) , 当 x 为 x i 时 , f i ( x ) 为 1 , 这条怎么和上条结合呢,哦,我们只需要在除以一个 ∏ j = 0 , j 不等于 i n ( x i − x j ) 就可以了 那么f_i(x),当x为x_i时,f_i(x)为1,这条怎么和上条结合呢,哦,我们只需要在除以一个\prod_{j=0,j不等于i}^{n}(x_i-x_j)就可以了 那么fi(x),xxi,fi(x)1,这条怎么和上条结合呢,哦,我们只需要在除以一个j=0,j不等于in(xixj)就可以了

所以总结下来,公式就是 f i ( x ) = ∏ j = 0 , j 不等于 i n ( x − x j ) ∏ j = 0 , j 不等于 i n ( x i − x j ) 所以总结下来,公式就是f_i(x)=\frac{\prod_{j=0,j不等于i}^{n}(x-x_j)}{\prod_{j=0,j不等于i}^{n}(x_i-x_j)} 所以总结下来,公式就是fi(x)=j=0,j不等于in(xixj)j=0,j不等于in(xxj)

那么构造这些函数有什么用呢,我们看一下,如果将函数 f i ( x ) f_i(x) fi(x)去乘上一个 f ( x i ) f(x_i) f(xi),你就会发现这个函数 f ( x i ) f i ( x ) f(x_i)f_i(x) f(xi)fi(x) x = x i x=x_i x=xi时,函数值为 f ( x i ) f(x_i) f(xi), 当 x 为 x j ( j 不等于 i ) 时 f ( x i ) f i ( x ) 为 0 当x为x_j(j不等于i)时f(x_i)f_i(x)为0 xxj(j不等于i)f(xi)fi(x)0

将每个函数加起来,得到的最终结果就是原函数了

最终公式为 f ( x ) = ∑ i = 0 n f ( x i ) ∏ j = 0 , j 不等于 i n ( x − x j ) ∏ j = 0 , j 不等于 i n ( x i − x j ) 最终公式为f(x)=\sum_{i=0}^{n}f(x_i)\frac{\prod_{j=0,j不等于i}^{n}(x-x_j)}{\prod_{j=0,j不等于i}^{n}(x_i-x_j)} 最终公式为f(x)=i=0nf(xi)j=0,j不等于in(xixj)j=0,j不等于in(xxj)

注意:在题目中通常会说,过n+1个点 ( x i , y i ) (x_i,y_i) (xi,yi),这里的 y i 就是 f ( x i ) y_i就是f(x_i) yi就是f(xi)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值