拉格朗日插值法

(*以下定义选自维基百科)

算法流程图

算法代码

[cpp] view plaincopy
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. using namespace std;
  5. double Lagrange(int N,vector<double>&X,vector<double>&Y,double x);
  6. int main(){
  7. char a='n';
  8. do{
  9. cout<<"请输入差值次数n的值:"<<endl;
  10. int N;
  11. cin>>N;
  12. vector<double>X(N,0);
  13. vector<double>Y(N,0);
  14. cout<<"请输入插值点对应的值及函数值(Xi,Yi):"<<endl;
  15. for(int a=0;a<N;a++){
  16. cin>>X[a]>>Y[a];
  17. }
  18. cout<<"请输入要求值x的值:"<<endl;
  19. double x;
  20. cin>>x;
  21. double result=Lagrange(N,X,Y,x);
  22. cout<<"由拉格朗日插值法得出结果: "<<result<<endl;
  23. cout<<"是否要继续?(y/n):";
  24. cin>>a;
  25. }while(a=='y');
  26. return 0;
  27. }
  28. double Lagrange(int N,vector<double>&X,vector<double>&Y,double x){
  29. double result=0;
  30. for(int i=0;i<N;i++){
  31. double temp=Y[i];
  32. for(int j=0;j<N;j++){
  33. if(i!=j){
  34. temp = temp*(x-X[j]);
  35. temp = temp/(X[i]-X[j]);
  36. }
  37. }
  38. result += temp;
  39. }
  40. return result;
  41. };

牛顿插值法

牛顿插值法公式如下,具体参见(百度文档)

算法流程

算法代码

[cpp] view plaincopy
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. using namespace std;
  5. double ChaShang(int n,vector<double>&X,vector<double>&Y);
  6. double Newton(double x,vector<double>&X,vector<double>&Y);
  7. int main(){
  8. int n;
  9. cin>>n;
  10. vector<double>X(n,0);
  11. vector<double>Y(n,0);
  12. for(int i=0;i<n;i++){
  13. cin>>X[i]>>Y[i];
  14. }
  15. double x;
  16. cin>>x;
  17. cout<<Newton(x,X,Y);
  18. }
  19. double ChaShang(int n,vector<double>&X,vector<double>&Y){
  20. double f=0;
  21. double temp=0;
  22. for(int i=0;i<n+1;i++){
  23. temp=Y[i];
  24. for(int j=0;j<n+1;j++)
  25. if(i!=j) temp /= (X[i]-X[j]);
  26. f += temp;
  27. }
  28. return f;
  29. }
  30. double Newton(double x,vector<double>&X,vector<double> &Y){
  31. double result=0;
  32. for(int i=0;i<X.size();i++){
  33. double temp=1;
  34. double f=ChaShang(i,X,Y);
  35. for(int j=0;j<i;j++){
  36. temp = temp*(x-X[j]);
  37. }
  38. result += f*temp;
  39. }
  40. return result;
  41. }

实验过程原始记录

给定函数四个点的数据如下:

试用拉格朗日插值确定函数在x=2.101,4.234处的函数值。
运行得到结果:

已知用牛顿插值公式求的近似值。
运行程序得到结果:   2.26667

实验分析

1、Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数f(x)的近似函数P(x),从而可以计算未知点出的函数值,是插值法的基本思路。
2、实际上Lagrange插值法和Newton插值法是同一种方法的两种变形,其构造拟合函数的思路是相同的,而实验中两个实际问题用两种算法计算出结果是相同的。
3、实验所得结果精确度并不高,一方面是因为所给数据较少,另一方面也是主要方面在Win32中C++中数据类型double精度只有7位,计算机在进行浮点运算时截断运算会导致误差。实际问题中,测量数据也可能导致误差。
4、在解决实际问题中,更多是利用精确且高效的计算机求解。所以解决问题时不仅要构造可求解的算法,更重要是构造合理的可以编写成程序由计算机求解的算法,而算法的优化不仅可以节省时间空间,更能得到更为精确有价值的结果。

插值法:拉格朗日插值、牛顿插值相关推荐

  1. 函数插值的python实现——拉格朗日、牛顿插值

    函数插值的python实现--拉格朗日.牛顿插值 1. 拉格朗日(Larange)插值 实现代码 2. 牛顿(Larange)插值 2.1 牛顿插值多项式的基本形式 2.2 牛顿均差插值多项式 (1) ...

  2. 数值分析拉格朗日实验题MATLAB程序,数值分析实验报告(拉格朗日插值牛顿插值最小二乘法)...

    实验1 拉格朗日插值法 一.方法原理 n次拉格朗日插值多项式为:Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+-+ynln(x) n=1时,称为线性插值,L1(x)=y0(x-x1)/( ...

  3. 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 一. 背景 在工程和科学研究中出现的函数是多种多样的.常常会遇到这样的情况:在某个实际 问题中,虽然可以断定所考虑的函数 ) ( x f 在区 ...

  4. C#实现拉格朗日、牛顿、Hermite插值

    拉格朗日.牛顿插值法 初始时需要至少两个参考坐标点,在参考点的基础之上构造插值函数y=f(x),然后由插值函数确定需要求解的x坐标的函数值.相较于拉格朗日插值,牛顿插值公式更加复杂,但是在增加一个参考 ...

  5. 数值分析之 拉格朗日插值、牛顿插值、分段线性插值实现

    1.拉格朗日插值法 考虑全局信息的比较经典的插值方法,编程简单,计算量大. #coding=utf-8 from matplotlib import pyplot as pltdef Lg(data, ...

  6. 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明

    拉格朗日中值定理 https://www.bilibili.com/video/BV117411E7kx?from=search&seid=17921778669593975548 拉格朗日中 ...

  7. matlab全域基函数,多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]...

    全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见"计算基本理论". 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值 ...

  8. 拉格朗日插值和牛顿插值的龙格现象

    文章目录 一.实验目的 二.实验设备信息 三.实验内容 (一)拉格朗日插值多项式 (二)牛顿插值多项式 四.实验步骤 (一)拉格朗日插值函数实现 (二)牛顿插值函数实现 (三)观察拉格朗日插值和牛顿插 ...

  9. Matlab实现线性插值、抛物插值、牛顿插值、拉格朗日插值、分段抛物插值、分段线性插值

    目录 线性插值 原理 流程图 代码 抛物插值 原理 流程图 代码 拉格朗日插值 代码 牛顿插值 原理 代码 分段线性插值 代码 线性插值 原理 流程图 单个点的线性插值代码 X=[0.2 0.4]; ...

  10. 【插值】牛顿插值、拉格朗日插值、三次样条插值的Python代码实现

    插值简介 插值即根据有限的离散点绘制出穿过所有样本点的曲线,从直观上想象似乎画一条穿过n个特定点的曲线有无数种画法,但从数学意义上来说我们希望画出的曲线能够尽量平滑,震荡幅度尽量小能够在非样本点上符合 ...

最新文章

  1. Struts 为什么使用插件
  2. CVPR 2019审稿满分论文:中国博士提出融合CV与NLP的视觉语言导航新方法
  3. 构建之法读书笔记之五
  4. windows 远程访问别人的linux下的ftp服务器,linux与windows之间使用ftp相互访问(CentOS提示ftp:command not found)...
  5. minio扩展现有的分布式集群:扩大集群规模,增加磁盘数量
  6. 五天面试 Google、Facebook、Airbnb 等硅谷五家顶级公司,我是如何都拿到 Offer 的
  7. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)
  8. Vxworks增加system call
  9. 网络协议,各层功能,各层协议
  10. 史海峰:构建产业互联网金融系统的正确姿势
  11. 2017总结、2018展望
  12. 苹果CEO库克薪酬达员工1500倍;曝英特尔将开放x86内核授权;TensorFlow技术主管皮特・沃登离职|极客头条
  13. golang actor模型探索
  14. 实验吧-web-天下武功唯快不破
  15. OSG 之学习二:OSG 模型简单控制
  16. 第三方支付专业术语集锦
  17. 微信小程序开发分析总结
  18. Java 集合中汉字按自然顺序排序
  19. 第十二届蓝桥杯 Java 省赛 B 组部分真题解析
  20. java swing开发窗体程序开发(四)MVC结构

热门文章

  1. 手把手教你用 TensorFlow 实现文本分类(下)
  2. MyBatis-12MyBatis动态SQL之【choose when otherwise】
  3. 干货二:微信SDK-分享初探-更新中
  4. gnome mysql client_解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享
  5. pemicro识别不了驱动_usb驱动无法识别如何解决,手把手教你如何解决usb驱动问题...
  6. 关于synchronize与lock的区别
  7. 基于netty实现mq
  8. 机器学习:论相关(一)
  9. 2021-04-17 安装Ubuntu18.0.4 的深度学习训练服务器
  10. 发起一个ajax请求,发送ajax请求