拉格朗日插值
2018-06-17 21:24:26来源:未知 阅读 ()
存在性和唯一性的证明以后再补。。。。
拉格朗日插值
拉格朗日插值,emmmm,名字挺高端的:joy:
它有什么应用呢?
我们在FFT中讲到过
设$n-1$次多项式为
$y=\sum_{i=0}^{n-1}a_i x^i$
有一个显然的结论:如果给定$n$个互不相同的点$(x,y)$,则该$n-1$次多项式被唯一确定
那么如果给定了这互不相同的$n$个点,
利用拉格朗日插值,可以在$O(n)$的时间内计算出某项的值,还可以在$O(n^2)$的时间复杂度内计算出给定的$x$所对应的$y$
那么如何计算呢?
公式
不啰嗦了,直接给公式吧,至于这个公式怎么来的以后再补充
若对于$n-1$次多项式,给定了$n$个互不相同的$(x,y)$
那么对于给定的$x$,第$i$项的值为
$l(i)=y_i\prod_{j=1,j\neq i}^{n} \dfrac{x-x_j}{x_i-x_j}$
所对应的$y$为
$y=\sum_{i=1}^{n} l(i)$
$=\sum_{i=1}^{n}y_i\prod_{j=1,j\neq i}^{n}\dfrac{x-x_j}{x_i-x_j}$
利用这个公式,就可以进行计算啦
代码
#include<cstdio> int x[1001],y[1001]; int N,ans=0; int main() { scanf("%d",&N); for(int i=1;i<=N;i++) scanf("%d%d",&x[i],&y[i]); int X;//待求的x scanf("%d",&X); for(int i=1;i<=N;i++) { int tmp=y[i]; for(int j=1;j<=N;j++) { if(i==j) continue; tmp=tmp*(X-x[j])/(x[i]-x[j]); } ans+=tmp; } printf("%d",ans); return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- c++中如何判断sqlite表是否存在 2019-10-25
- 树-二叉树的基本概念 2019-10-08
- C++中的析构顺序和cosnt对象 2019-05-23
- 判断无向图两点间是否存在长度为K的路径 2018-07-03
- static关键字 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash