牛顿插值法及其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]);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其中Px) 为插值多项式,而Rx) 为插值余项。

所以px):

(由于图片问题此处Px) 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on

报错如下 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project hhh: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test failed: The forked VM terminated without sa…

【原创中】儿子,听爸爸跟你说

可爱的宝贝儿子&#xff1a;可能你现在正在家里小床上酣睡&#xff0c;可惜爸爸不能在你身边陪着你。无数个夜晚&#xff0c;你妈妈他们睡在你身边照顾你&#xff0c;你知道他们有多辛苦吗&#xff1f;等你长大了&#xff0c;我会告诉你做父母的艰辛&#xff0c;我们并不是要求…

ASP.NET Core 认证与授权[1]:初识认证

在ASP.NET 4.X 中&#xff0c;我们最常用的是Forms认证&#xff0c;它既可以用于局域网环境&#xff0c;也可用于互联网环境&#xff0c;有着非常广泛的使用。但是它很难进行扩展&#xff0c;更无法与第三方认证集成&#xff0c;因此&#xff0c;在 ASP.NET Core 中对认证与授权…

IDEA创建Maven项目报错- Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model】

1&#xff1a;报错 今天下了最新版本的maven&#xff0c;在idea中配置好maven好&#xff0c;拉取依赖报错了 2:查看报错日志 报错如下 1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <…

C# 动态加载 动态卸载

代码usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Threading;usingSystem.Reflection;namespaceUnloadDll{ classProgram { staticvoidMain(string[] args) { stringcallingDomainName AppDomain.CurrentDomain.…

python进行数据分析

1. python进行数据分析----线性回归 2. python进行数据分析------相关分析 3. python进行数据分析---python3卡方 4. 多重响应分析&#xff0c;多选题二分法思路 5. 交叉表思路&#xff0c;未发布 6. 比较均值分析思路 7. 排序题如何进行数据分析 8.python 二元Logistics Regr…

GdiPlus[38]: IGPGraphicsPath (五) 路径标记

IGPGraphicsPath.SetMarker //建立一个标记 IGPGraphicsPath.ClearMarkers //取消全部标记在路径中每建立一个图形都可以同时做个 Marker,真正使用这些个标记时, 主要通过 IGPGraphicsPathIterator 的 NextMarker() 方法.下面是建立并遍历 Marker 的演示代码, 暂未使用 IGPG…

结队编程项目进度

四则运算答题计算器&#xff1a;现在已经进行到随机生成一个100以内的数字和一个10以内的数字&#xff0c;并进行减法运算转载于:https://www.cnblogs.com/juyan/p/7598434.html

微软发布3款SQL Injection攻击检测工具

随着 SQL INJECTION 攻击的明显增多&#xff0c;微软近日发布了三个免费工具&#xff0c;帮助网站管理员和检测存在的风险并对可能的攻击进行拦截。Scrawlr 下载地址&#xff1a;https://download.spidynamics.com/Products/scrawlr/这个微软和 HP合作开发的工具&#xff0c;会…

安装C语言版本tensorflow

安装 本文中的示例&#xff0c;可以点击这里下载。 参考&#xff1a;https://www.tensorflow.org/install/install_c 官网提供的方法是用一个脚本去安装&#xff1a; TF_TYPE"cpu" # Change to "gpu" for GPU support OS"linux" # Change to &qu…

Idea Error:(6, 32) java: 程序包xxx.xxx包不存解决方(亲测有效)

main方法运行不起来,报错&#xff1a;xxx.xxx包不存在&#xff0c;xxx.xxx找不到&#xff0c;实则相关的包都是存在的&#xff0c;并且可以打包成功。也就是说&#xff0c;可以打包成功但是idea不能运行 报错如下 方法一&#xff1a; 勾选了"delegate IDE build/run act…

2440启动代码分析

;GET和INCLUDE功能相同 ;功能&#xff1a;引进一个被编译过的文件。 GET option.inc GET memcfg.inc GET 2440addr.inc ;EQU为程序中的常量、标号等定义一个等效的字符名称 ;定义SDRAM工作在Refresh模式&#xff0c;SDRAM有两种刷新方式&#xff1a;autorefresh和selfrefresh&a…

如何查看apache,php,mysql的编译参数

如何查看apache,php,mysql的编译参数 查看nginx编译参数&#xff1a;/usr/local/nginx/sbin/nginx -V查看apache编译参数&#xff1a;cat /usr/local/apache2/build/config.nice查看mysql编译参数&#xff1a;cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE查看php编…

Mac启动elasticsearch并用代码创建索引

一&#xff1a;启动ElasticSearch ES后台启动 bi目录下执行如下命令 ./elasticsearch -d 二&#xff1a;验证启动是否成功 浏览器输入&#xff0c;返回如下表示启动成功 三&#xff1a;添加es依赖 <dependency><groupId>org.elasticsearch</groupId><…

什么是 I2C

什么是 I2C I2C(Inter&#xff0d;Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。I2C总线产生于在80年代&#xff0c;最初为音频和视频设备开发&#xff0c;如今主要在服务器管理中使用&#xff0c;其中包括单个组…

阅读笔记一之《软件需求与分析》

关于我们怎样做需求分析&#xff1a; 本学期《软件需求与分析》需要掌握需求调研、需求分析和需求确认三大基本内容。以下为针对每一个内容的自己的理解。 一、需求调研 初识&#xff1a;刚开始与客户接触的时候&#xff0c;一定要建立良好的职业微信。在对需求进行分析时&…

java代码删除ElasticSearch索引

用java代码删除ElasticSearch索引 public class ElasticsearchDeleteIndexTest {public static void main(String[] args) throws IOException {RestHighLevelClient restHighLevelClient new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9…

今天

微博一篇。 今天,发烧了,冬天第一次 今天,上海下雪了&#xff0c;冬天第一次 今天,听说是我生日.一年也一次