牛顿插值法及其C++实现
牛顿插值法
一、背景引入
相信朋友们,开了拉格朗日插值法后会被数学家的思维所折服,但是我想说有了拉格朗日插值法还不够,因为我们每次增加一个点都得重算所有插值基底函数,这样会增加计算量,下面我们引入牛顿插值法,这种插值法,添加一个插值结点我们只要做很小的变动便可以得到新的插值多项式。
二、理论推导
-均差的定义:
(一阶均差)
二阶均差为一阶均差再求均差。(显然是递推的)
一般地,函数f 的k阶均差定义为:
由均差的性质可以推导出:
k+1阶均差:
(具体性质看:《数值分析:第5版》 page:30)
由均差的递推性,我们可以用以下表来求:
求表的公式:
table[i][j] = (table[i - 1][j] - table[i - 1][j - 1]) / (x[j] - x[j - i]);
其中P(x) 为插值多项式,而R(x) 为插值余项。
所以p(x):
(由于图片问题此处P(x) 同N(x))
三、代码实现
由以上推导可知,求牛顿插值多项式子主要就是求均差。
均差可由上表递推求得:
求表的公式:
table[i][j] = (table[i - 1][j] - table[i - 1][j - 1]) / (x[j] - x[j - i]);
#include <iostream> using namespace std; #include <vector> inline double newton_solution(double x[], double y[], int n, double num, int newton_time) {vector<vector<double> > table(n + 1);for (int i = 0; i <= n; i++) {table[i].resize(n + 1);}for (int i = 0; i <= n; i++) table[0][i] = y[i];for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j++) {table[i][j] = (table[i - 1][j] - table[i - 1][j - 1]) / (x[j] - x[j - i]);}}double res = 0.0;for (int i = 0; i <= newton_time; i++) {double temp = table[i][i];for (int j = 0; j < i; j++) {temp *= num - x[j];}res += temp;}return res;} int main(int argc, char const *argv[]) {int n = 0;cout << "插值节点个数-1:";cin >> n;double x[n + 1], y[n + 1];cout << "\n请输入x[i]:";for (int i = 0; i <= n; i++) {cin >> x[i];}cout << "\n请输入y[i]:";for (int i = 0; i <= n; i++) {cin >> y[i];}double num = 0;cout << "\n请输入要求的点的x:";cin >> num;cout << "\n请输入所求的插值多项式次数:";double newton_time = 0;cin >> newton_time;cout << newton_solution(x, y, n, num, newton_time) << endl;return 0;
转载于:https://www.cnblogs.com/jake9402/p/7593694.html
牛顿插值法及其C++实现相关推荐
- java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合
2020年10月4日研究了一下牛顿插值法,其用途是使用x.y两组数值,根据新的x值返回对应的y值,与TREND.FORECAST函数不同,这种方法可应对非线性数据.其作用类似于图表中的曲线拟合或LIN ...
- 2021-01-07 matlab数值分析 插值法 拉格朗日插值法 牛顿插值法
matlab数值分析 插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...
- 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 一. 背景 在工程和科学研究中出现的函数是多种多样的.常常会遇到这样的情况:在某个实际 问题中,虽然可以断定所考虑的函数 ) ( x f 在区 ...
- 利用均差的牛顿插值法(Newton)
函数f的零阶均差定义为 ,一阶定义均差为: 一般地,函数f 的k阶均差定义为: 或者上面这个式子求的k+1阶均差 利用均差的牛顿插值法多项式为: 简单计算的时候可以观看下面的差商(均差)表: 怎么利用 ...
- Python03 拉格朗日插值法 牛顿插值法(附代码)
1.实验结果 (1)在定义的类中设置已知的函数值列表为: (2)在 test.py 中选择 Lagrange 插值法求解: 输入:需求的 y 值对应的 x 值: 输出:所求函数值: (3)选择 New ...
- 【Python篇】拟牛顿法面面俱到(一)--牛顿插值法
感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习, ...
- 理解插值法(拉格朗日、牛顿插值法)
引言 我们首先理解下插值法主要用来做什么事:插值法就是利用已知的点建立合适的插值函数 f ( x ) f(x) f(x) ,未知点 x i x_i xi 由插值函数 f ( x ) f(x) f(x ...
- 导数,差商,牛顿插值法
1 差商的定义 设有函数f (x)以及自变量的一系列互不相等的的值 f(xi),称 为f (x)在点处的一阶差商,并记作.又称 为f (x)在点处的二阶差商:称: 为f (x)在点处的n阶差商. 2 ...
- 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较
第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...
最新文章
- unix实际用户ID和有效用户ID解析
- Java RESTful Web Service实战
- 【在还原SQL Server数据库时发生对于服务器“XXX”操作系统错误】很实用的解决方案...
- preCornerDetect函数
- Java Persistence with MyBatis 小结2
- Linux学习:第五章-Linux用户和用户组管理
- 【硬件解码系列】之ffmpeg硬件加速器
- 支持Flash和JavaScript的图表控件FusionWidgets
- NDTTS-II变压器综合试验系统
- unity3d 官方demo入门概念
- 关于LeapFTP连接超时/连接失败问题
- 统计遗传学:第四章,GWAS分析
- python降低图片分辨率_Python批量更改图片分辨率
- 实验三|Python 企业营运能力分析
- linux换终端的背景颜色,肿么调整linux终端背景颜色
- windows audio错误0x80070005
- 自定义配置文件 /etc/httpd/conf.d
- 从零开始开发一个大型网站
- 直播app开发公司手把手搭建一套简单的直播系统
- (超、深)超像素网络SSN
热门文章
- ### C++总结-[类成员函数]
- 描述项目的典型用户与场景
- Linux CentOS 5.5 服务器安装图文教程
- 优先级队列,代码参考范例
- C#中理解接口以及接口的作用
- [web性能优化] - 使用在线工具对html、js、css进行压缩
- bootstrap --- 表单
- egg(110,111,112)--egg之微信支付
- favicon.ico--网站标题小图片二三事
- [COCI2015]ZGODAN