用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 相关文章推荐
Django中使用group_by的方法
May 26 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
python线程、进程和协程详解
Jul 19 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
Python闭包思想与用法浅析
Dec 27 Python
python 修改本地网络配置的方法
Aug 14 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
Python机器学习之底层实现KNN
Jun 20 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
PHP静态文件生成类实例
2014/11/29 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python自定义线程池实现方法分析
2018/02/07 Python
python 实现敏感词过滤的方法
2019/01/21 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
Python datetime模块使用方法小结
2020/06/18 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
建筑施工员岗位职责
2013/11/26 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
签约仪式策划方案
2014/06/02 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
入党介绍人意见范文
2015/06/01 职场文书
2022微信温控新功能上线
2022/05/09 数码科技