一、题目:

任选点集,用拉格朗日插值法,牛顿插值和分段线性插值计算近似值。

二、思路:

(1)点集

(2)拉格朗日插值法

根据拉格朗日插值公式,利用嵌套循环设计算法。此方法比较简单方便,但当插值点较多时,拉格朗日多项式的次数也会增多,这时候会与实际值产生较大偏差,并且拉格朗日插值法在计算中遇到增减插值点时操作较为繁琐。算法复杂度O(n^2)

(3)牛顿插值法

牛顿插值法实际上和拉格朗日插值法是同一种方法的两种变形,先利用循环算出插值公式中每一项对应的商差,然后再用循环添上系数。它适用于变化的数据,可以复用原先的结果。算法复杂度为O(n^4)

(4)分段线性插值法

先将已知数据进行从小到大排序,根据排序分为不同区间,然后判断所求点在哪个区间内,然后利用线性插值法,将区间的两端所对应的已知点代入计算。误差大小取决于取样点的密度,取样点越密集,精度越高。算法复杂度为:O(n^2)

三、结果展示

四、完整代码

double Lagrange(int N, vector<double>& x, vector<double>& y, double X)//拉格朗日插值法
{double result = 0;for (int k = 0;k < N;k++){double t = y[k];for (int i = 0;i < N;i++){if (i != k) {t *=(X - x[i]);//yk*(x-xi)t /= (x[k] - x[i]);//yk*(x-xi)/(xk-xi)}}result+= t;}return result;
}double Quotient(int N, vector<double>& x, vector<double>& y)//差商
{double f = 0;double t=0;for (int i = 0;i <= N;i++)//i<=N为了当N=0时得到f=y[0]{t = y[i];for (int j = 0;j <= N;j++){if (i != j) t/= (x[i] - x[j]);}f += t;}return f;
}
double Newton(int N, vector<double>& x, vector<double>& y,double X)//牛顿插值法
{double result = 0;for (int i = 0;i < N;i++){double t = 1;double f = Quotient(i, x, y);for (int j = 0;j < i;j++){t = t * (X - x[j]);}result += f * t;//N(x)=f(x0)+(x-x0)f(x,x0)+(x-X0)(x-x1)f(x,x0,x1)+......} return result;
}double lineLag(int N, vector<double>& x, vector<double>& y, double X)//分段线性插值法
{double m1, m2, t1, t2;vector<double>temp(N);int n = 0;m1 = X;for (int i = 0;i < N - 1;i++)//冒泡排序法{for (int j = 0;j < N - 1 - i;j++){if (x[j] > x[j + 1]) {t1 = x[j];//x进行升序排序x[j] = x[j + 1];x[j + 1] = t1;t2 = y[j];//对应的y值跟着变位置y[j] = y[j + 1];y[j + 1] = t2;}}}//找最近点for (int i = 0;i < N;i++){if (x[i] < X)//先找到区间左值{m1 = x[i];n = i + 1;}}if (X == m1 + 1) m2 = m1 + 2;//右值else m2 = m1 + 1;double result = y[n - 1] * ((X - m2) / (m1 - m2)) + y[n] * ((X - m1) / (m2 - m1));return result;
}int main(void)
{ifstream infile;//输入流infile.open("数据.txt", iostream::in);if (!infile.is_open())//文件不存在cout << "Open file failure!" << endl;int N;double x;double result;infile >> N ;//先读取第一行vector<double>X(N);vector<double>Y(N);for (int i = 0;i < N;i++){infile >>X[i]>>Y[i];}cout << "输入需要计算的x值:" << endl;cin >> x;cout << "拉格朗日插值法计算结果为:" << Lagrange(N, X, Y, x) << endl;cout<<"牛顿插值法计算结果为:"<< Newton(N, X, Y, x) << endl;cout << "分段线性插值法计算结果为:" << lineLag(N, X, Y, x) << endl;infile.close();
}

留个记忆,不能忘了怎么算的。

程序借鉴了一篇大神的博文,可惜没有保存下来,等找到了吧链接补上嘿嘿。

用拉格朗日插值法,牛顿插值和分段线性插值计算近似值相关推荐

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

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

  2. 数学建模准备 插值(拉格朗日多项式插值,牛顿多项式插值,分段线性插值,分段三次样条插值,分段三次Hermite插值)

    文章目录 摘要(必看) 0 基础概念 什么是插值 插值用途 什么是拟合 插值和拟合的相同点 插值和拟合的不同点 1 常用的基本插值方法 1.1 多项式插值法 1.1.1 拉格朗日多项式插值法 多项式插 ...

  3. 插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值

    插值:求过已知有限个数据点的近似函数. 拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小. 插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似 ...

  4. 拉格朗日插值、分段线性插值、三次样条插值

    本篇主要介绍在三种插值方法:拉格朗日插值.分段线性插值.三次样条插值,以及这三种方法在matlab中如何实现. 1.拉格朗日插值: 1.1基本原理:先构造一组基函数:               是次 ...

  5. 数值分析1_拉格朗日插值法牛顿插值法

    实验名称 拉格朗日插值法以及牛顿插值法的实现 实验要求 实现拉格朗日插值        验证随着插值结点的增多插值曲线的变化情况        实现牛顿插值,显示差商结果         比较拉格朗日 ...

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

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

  7. hermit插值 matlab,分段线性插值和分段Hermit插值课程设计

    一.前言 本文建立在数值分析的理论基础上,能够在Matlab 环境中运行,给出了理论分析.具体实例.程序清单以及程序运行结果,对设计任务中的函数进行了分段线性插值和分段三次Hermit 插值,分别画出 ...

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

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

  9. 2021-01-07 matlab数值分析  插值法 拉格朗日插值法 牛顿插值法

    matlab数值分析  插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...

  10. 求f(x)=根号x的三次样条插值和分段线性插值c语言代码,【数值分析|三次样条插值法《数值分析》上机实验作业】...

    『易坊知识库摘要_数值分析|三次样条插值法<数值分析>上机实验作业』2.要求(1)满足自然边界条件s?(0.2)?s?(1.0)?0:(2)满足第一类边界条件s?(0.2)?0.20271 ...

最新文章

  1. vue input文本框中文字整体添加整体删除_揭秘神奇的PPT文本框,高手都喜欢这样的招数...
  2. 平衡二叉树及其操作实现_平衡二叉树(AVL树)及C语言实现
  3. html屏幕垂直居中显示,HTML+CSS,让div在屏幕中居中(水平居中+垂直居中)方法总结...
  4. HDU - 2896 病毒侵袭(AC自动机)
  5. service mesh 数据平面nginmesh
  6. lucene 源码分析_Lucene分析过程指南
  7. 外媒:Airbnb为2020年直接上市作准备
  8. 将CSV和SQL数据加载到Pandas中
  9. The last time...
  10. 第27章 正则表达式
  11. 天翼校园客户端linux,GitHub - YianAndCode/f-surfing: 佛大广东天翼校园客户端在 Linux 下的解决方案...
  12. 深入浅出数据分析 - 直方图
  13. Hive collect、explode函数详解(包括concat、Lateral View)
  14. php去掉省市区,PHP简单实现正则匹配省市区的方法
  15. CHKRecovery(文件删除还原工具)v3.3.0绿色版
  16. zkdemo可以直接调用html,中控指纹机ZKBIOOnline BS开发包 含示例DEMO
  17. 拷机测试需要多久_如何科学理解麒麟9000的拷机功耗?
  18. c语言第九章课后作业答案,c语言第九章习题带答案
  19. 【Matlab】如何规范地编写一个MATLAB函数文件
  20. 计算机职称考试科目及内容,计算机职称考试科目有哪些?

热门文章

  1. android模拟器录制视频教程,畅玩安卓模拟器怎么录制视频?畅玩模拟器录制游戏视频图文教程...
  2. 如何回答「你的优势和劣势是什么」?【面试核心问题6】
  3. Laravel文档阅读笔记-mews/captcha的使用(验证码功能)
  4. 浅谈JavaScript设计模式
  5. 纯前端实现—用户注册登录界面
  6. mysql中角色权限表的设计_用户、角色、权限数据库设计
  7. Python中格式化操作漂亮打印文件的读取和写入
  8. Windows系统下VMware 虚拟机中文件提取到主机的方法
  9. termux自动启动ssh
  10. 生命在于答疑——git推送本地到库鉴权失败