数值计算与算法|牛顿插值法——差商表

C++中Newton插值——计算差商表
目录

    • C++中Newton插值——计算差商表
  • 差商(difference quotient)定义
  • 一、用二维数组存放差商表
  • 二、差商的计算
  • 代码实现

差商(difference quotient)定义 数值计算与算法|牛顿插值法——差商表
文章图片

相信看到这篇文章的你,其实在之前就了解或学习的差商的定义和知识,因此下面主要讲在c++中代码如何实现差商表的计算和输出
提示:以下是本篇文章正文内容,下面案例可供参考
一、用二维数组存放差商表 为方便牛顿插值多项式的构造,可建立下表所示各阶差商计算表。 数值计算与算法|牛顿插值法——差商表
文章图片

我们将构造二维数组DQ[][]将与上面的表格类似。数组第一列为f(x)的值即零阶差商,第二列为二阶差商…,而第一行我们对应X的下标。
那么数组DQ[0][0]表示f[x0] 是一0阶差商 , DQ[1][1]就表示f[x0,x1]是一个1阶差商,那DQ[4][3]表示的是f[x1,x2,x3,x4]的3阶差商…
DQ数组的列元素就是对应的几阶差商,行元素就是对应的差商计算的末值
那么有N组关系的x与f(x)所建立的差商表就是一个NN的二维数组*
二、差商的计算 首先零阶差商直接存入二维数组的第一列DQ[0][i]中就行。
主要介绍1阶包括1阶之后的差商计算:
由前面定义可知:
数值计算与算法|牛顿插值法——差商表
文章图片

数值计算与算法|牛顿插值法——差商表
文章图片

数值计算与算法|牛顿插值法——差商表
文章图片


对应差商表可以很容易发现:
数值计算与算法|牛顿插值法——差商表
文章图片

这样就更直观了,后一阶的差商是由前一阶的两个差商运算得到的。
对于一个高阶差商DQ[m][n]=(DQ[m][n-1]-DQ[m-1][n-1])/(x[m]-x[m-n]);
分子部分很好理解,看见图就可以很清楚知道;分母也很好理解,但需要分析一下,不然容易写错。
我们知道分母是两个X值相减,被减数很简单,就是对应几个f(X)算得差商时末尾f(Xm)最靠后的Xm; 减数就要追根溯源到0阶所用的f(X)所对应的x值,由上面的下三角表格可以不难发现,0阶对应的X值、Xm和DQ[m][n]构成“等腰直角”三角形,因此减数为:X[m-n]
到此这个简单粗暴的结构就建立起来了,下面让我们看看代码的实现吧。
代码实现 提示:这是在VS2019中的代码和运行结果
#include #include using namespace std; void Dquotient(double x[], double f[],const int n) { //申请一个动态的二维数组存放差商 double** DQ = new double* [n]; //上面申请了行,下面就是把给每行申请一个空间 for (int i = 0; i < n; i++)DQ[i] = new double [n]; /******************下面就是计算差商表的核心步骤(分为两步)***************************/ //第一步,将fx函数的值放入第一列,这便是0阶差商 for (int i = 0; i < n; i++)DQ[i][0] = f[i]; //第二步,这步需要理解newton差商怎么计算 //这部计算是最重要,计算后一介差商需要用到前一阶差商,这也是为什么先单独要把0阶差商存入DQ的0列 for(int i=1; i

【数值计算与算法|牛顿插值法——差商表】运行结果:
数值计算与算法|牛顿插值法——差商表
文章图片

这是我在CSDAN发的第一篇blog,代码比较粗糙,讲解比较模糊,我这个萌新后期会完善的,如有不对的地方希望指正

    推荐阅读