h1 { margin-bottom: 0.21cm }
h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt }
h1.cjk { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt }
h1.ctl { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt }
p { margin-bottom: 0.25cm; line-height: 120% }

牛顿插值法

一、背景引入

相信朋友们,开了拉格朗日插值法后会被数学家的思维所折服,但是我想说有了拉格朗日插值法还不够,因为我们每次增加一个点都得重算所有插值基底函数,这样会增加计算量,下面我们引入牛顿插值法,这种插值法,添加一个插值结点我们只要做很小的变动便可以得到新的插值多项式。

二、理论推导

-均差的定义:

(一阶均差)

二阶均差为一阶均差再求均差。(显然是递推的)

一般地,函数f 的k阶均差定义为:

由均差的性质可以推导出:

k+1阶均差:

p { margin-bottom: 0.25cm; line-height: 120% }

(具体性质看:《数值分析:第5版》 page:30)

由均差的递推性,我们可以用以下表来求:

求表的公式:

table[i][j] = (table[i - 1][j] - table[i - 1][j - 1]) / (x[j] - x[j - i]);

p { margin-bottom: 0.25cm; line-height: 120% }

其中P(x) 为插值多项式,而R(x) 为插值余项。

所以p(x):

(由于图片问题此处P(x) 同N(x))

p { margin-bottom: 0.25cm; line-height: 120% }

三、代码实现

由以上推导可知,求牛顿插值多项式子主要就是求均差。

均差可由上表递推求得:

求表的公式:

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<);
    ; i <= n; i++) {
        table[i].resize(n + );
    }
    ; i <= n; i++) table[][i] = y[i];
    ; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            table[i][j] = (table[i - ][j] - table[i - ][j - ]) / (x[j] - x[j - i]);
        }
    }

    double res = 0.0;
    ; i <= newton_time; i++) {
        double temp = table[i][i];
        ; j < i; j++) {
            temp *= num - x[j];
        }
        res += temp;
    }

    return res;

}
int main(int argc, char const *argv[])
{
    ;
    cout << "插值节点个数-1:";
    cin >> n;
    ], y[n + ];
    cout << "\n请输入x[i]:";
    ; i <= n; i++) {
        cin >> x[i];
    }
    cout << "\n请输入y[i]:";
    ; i <= n; i++) {
        cin >> y[i];
    }
    ;
    cout << "\n请输入要求的点的x:";
    cin >> num;
    cout << "\n请输入所求的插值多项式次数:";
    ;
    cin >> newton_time;
    cout << newton_solution(x, y, n, num, newton_time) << endl;
    ;

牛顿插值法及其C++实现的更多相关文章

  1. 牛顿插值法——用Python进行数值计算

    拉格朗日插值法的最大毛病就是每次引入一个新的插值节点,基函数都要发生变化,这在一些实际生产环境中是不合适的,有时候会不断的有新的测量数据加入插值节点集, 因此,通过寻找n个插值节点构造的的插值函数与n ...

  2. Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法

    本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...

  3. 牛顿插值法(c++)【转载】

    摘自<c++和面向对象数值计算>,代码简洁明快,采用模板函数,通用性增强,牛顿差分合理利用存储空间,采用Horner算法(又称秦九韶算法)提高精度,减少时间复杂度,高!确实是高!对其中代码 ...

  4. 差分形式的牛顿插值法(c++)

    本程序对cosx函数进行插值,取步长为0.1,因此x的值为0.00,0.10,0.20,0.30,对应的y值为cos(0.00),cos(0.10),cos(0.20),cos(0.30),其实本程序 ...

  5. 牛顿插值法(c++)

    X Y 0.40 0.41075 0.55 0.57815 0.65 0.69675 0.80 0.88811 0.90 1.02652 1.05 1.25382 #include using nam ...

  6. CPP,MATLAB实现牛顿插值

    牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...

  7. 埃尔米特插值问题——用Python进行数值计算

    当插值的要求涉及到对插值函数导数的要求时,普通插值问题就变为埃尔米特插值问题.拉格朗日插值和牛顿插值的要求较低,只需要插值函数的函数值在插值点与被插函数的值相等,以此来使得在其它非插值节点插值函数的值 ...

  8. 风景区的面积及道路状况分析问题 test

    参考文献:   https://wenku.baidu.com/view/b6aed86baf1ffc4ffe47ac92.html #include <bits/stdc++.h> us ...

  9. ORACLE SQL 实现IRR的计算

    一.IRR计算的原理: 内部收益率(Internal Rate of Return (IRR)),就是资金流入现值总额与资金流出现值总额相等.净现值等于零时的折现率. 用公式 标识:-200+[30/ ...

随机推荐

  1. 201521123103 《Java程序设计》第三周学习总结

    一.本周学习总结 二.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; pub ...

  2. 201521123048 《Java程序设计》第2周学习总结

    本周学习总结 (1)String类数据类型 (2)枚举类型应用 (3)Java数组创建及使用 (4)进一步运用和了解码云 书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源 ...

  3. 201521123053《Java程序设计》第1周学习总结

    1. 本周学习总结 第一次接触Java,让我感到很吃力,有些困难.但我知道接触所有新事物都会困难,慢慢来就好. 下面是我这周的学习总结: one  第一节课 老师上课太快了,而且我没预习,根本跟不上 ...

  4. 201521123109 《java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  5. 201521123027 <java程序设计>第13周学习总结

    1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2.书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.e ...

  6. Spring详解(六)------AOP 注解

    上一篇博客我们讲解了 AspectJ 框架如何实现 AOP,然后具体的实现方式我们是通过 xml 来进行配置的.xml 方式思路清晰,便于理解,但是书写过于麻烦.这篇博客我们将用 注解 的方式来进行 ...

  7. Spring03-jdbc

    1,Spring集成Jdbc,需要导入spring包和数据库驱动包,这里我们使用的是mysql驱动包 2,选择一个数据源(DBCP,C3P0),这里我们使用DBCP,需要导入DBCP驱动包 3,创建j ...

  8. 嵌入系统squashfs挂载常见问题总结

    由于squahsfs的一些优点,嵌入系统常常直接使用squashfs作为initrd挂载到/dev/ram,作为rootfs.这里对常见的一些问题进行一些分析. 1. kernel启动出现错误 RAM ...

  9. FoxOne---一个快速高效的BS框架--数据访问(Dao)

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  10. 工欲善其事,必先利其器之open live writer写作

    在博客园学习有一段时间,想想是不是自己也应该开始写点东西,做点总结,更加快速的提升自己. 查看小组/博客园使用帮助 得知目前windows live writer 已经停止更新并推荐安装 open l ...