用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标准库urllib2的一些使用细节总结
Mar 16 Python
Python中的高级函数map/reduce使用实例
Apr 13 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
Python编程中类与类的关系详解
Aug 08 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
python编写函数注意事项总结
Mar 29 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
聊天室php&mysql(五)
2006/10/09 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
php处理带有中文URL的方法
2016/07/11 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
详解Python编程中包的概念与管理
2015/10/16 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
一文总结学习Python的14张思维导图
2017/10/17 Python
python的Tqdm模块的使用
2018/01/10 Python
Python实现简单http服务器
2018/04/12 Python
python多进程控制学习小结
2018/10/31 Python
python numpy存取文件的方式
2020/04/01 Python
python 模块导入问题汇总
2021/02/01 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
西门豹教学反思
2014/02/04 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
优质服务口号
2014/06/11 职场文书
病人慰问信范文
2015/02/15 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
openstack中的rpc远程调用的方法
2021/07/09 Python