用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数据结构之Array用法实例
Oct 09 Python
python开发之for循环操作实例详解
Nov 12 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
python生成圆形图片的方法
Mar 25 Python
python中的闭包函数
Feb 09 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Django之路由层的实现
Sep 09 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
python计算导数并绘图的实例
Feb 29 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
mysql中存储过程、函数的一些问题
2007/02/14 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
js Function类型
2011/12/04 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python爬取附近餐馆信息代码示例
2017/12/09 Python
Python自定义一个异常类的方法
2019/06/27 Python
python 循环数据赋值实例
2019/12/02 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
C#笔试题集合
2013/06/21 面试题
七一党建活动方案
2014/01/28 职场文书
数学教育专业求职信
2014/07/22 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB