用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内置数据类型详解
Aug 18 Python
python中二维阵列的变换实例
Oct 09 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
python多进程读图提取特征存npy
May 21 Python
Python传递参数的多种方式(小结)
Sep 18 Python
numpy np.newaxis 的实用分享
Nov 30 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
python 利用panda 实现列联表(交叉表)
Feb 06 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
Python快速实现一键抠图功能的全过程
Jun 29 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP小教程之实现链表
2014/06/09 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
AJAX架构之Dojo篇
2007/04/10 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
JS高级运动实例分析
2016/12/20 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
微信小程序实现同时上传多张图片
2020/02/03 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python3中int(整型)的使用教程
2017/03/23 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
python将图片转base64,实现前端显示
2020/01/09 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
管事部库房保管员岗位职责
2014/02/21 职场文书
团队精神口号
2014/06/06 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
党员个人承诺书
2015/04/27 职场文书
如何写新闻稿
2015/07/18 职场文书