用Python实现Newton插值法


Posted in Python onApril 17, 2021

1. n阶差商实现

def diff(xi,yi,n):
    """
    param xi:插值节点xi
    param yi:插值节点yi
    param n: 求几阶差商
    return: n阶差商
    """
    if len(xi) != len(yi):  #xi和yi必须保证长度一致
        return
    else:
        diff_quot = [[] for i in range(n)]
        for j in range(1,n+1):
            if j == 1:
                for i in range(n+1-j):
                    diff_quot[j-1].append((yi[i]-yi[i+1]) / (xi[i] - xi[i + 1]))
            else:
                for i in range(n+1-j):
                    diff_quot[j-1].append((diff_quot[j-2][i]-diff_quot[j-2][i+1]) / (xi[i] - xi[i + j]))
    return diff_quot

测试一下:

xi = [1.615,1.634,1.702,1.828]
yi = [2.41450,2.46259,2.65271,3.03035]
n = 3
print(diff(xi,yi,n))

返回的差商结果为:

[[2.53105263157897, 2.7958823529411716, 2.997142857142854], [3.0440197857724347, 1.0374252793901158], [-9.420631485362996]]

2. 牛顿插值实现

def Newton(x):
    f = yi[0]
    v = []
    r = 1
    for i in range(n):
        r *= (x - xi[i])
        v.append(r)
        f += diff_quot[i][0] * v[i]
    return f

测试一下:

x = 1.682
print(Newton(x))

结果为:

2.5944760289639732

完整Python代码

def Newton(xi,yi,n,x):
    """
    param xi:插值节点xi
    param yi:插值节点yi
    param n: 求几阶差商
    param x: 代求近似值
    return: n阶差商
    """
    if len(xi) != len(yi):  #xi和yi必须保证长度一致
        return
    else:
        diff_quot = [[] for i in range(n)]
        for j in range(1,n+1):
            if j == 1:
                for i in range(n+1-j):
                    diff_quot[j-1].append((yi[i]-yi[i+1]) / (xi[i] - xi[i + 1]))
            else:
                for i in range(n+1-j):
                    diff_quot[j-1].append((diff_quot[j-2][i]-diff_quot[j-2][i+1]) / (xi[i] - xi[i + j]))
    print(diff_quot)
    
    f = yi[0]
    v = []
    r = 1
    for i in range(n):
        r *= (x - xi[i])
        v.append(r)
        f += diff_quot[i][0] * v[i]
    return f

到此这篇关于用Python实现牛顿插值法的文章就介绍到这了,更多相关python牛顿插值法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
python实现飞行棋游戏
Feb 05 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
Django CBV模型源码运行流程详解
Aug 17 Python
Django xadmin安装及使用详解
Oct 26 Python
python中time、datetime模块的使用
Dec 14 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
利用Python多线程实现图片下载器
Mar 25 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
会计助理的岗位职责
2013/11/29 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫