用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实现多线程的方式及多条命令并发执行
Jun 07 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
python实现一个简单的ping工具方法
Jan 31 Python
python 整数越界问题详解
Jun 27 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
对python中list的五种查找方法说明
Jul 13 Python
python实现经纬度采样的示例代码
Dec 10 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
解析目标检测之IoU
Jun 26 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
融入意大利的咖啡文化
2021/03/03 咖啡文化
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
儿媳婚宴答谢词
2014/01/14 职场文书
干部行政关系介绍信
2014/01/17 职场文书
爱耳日活动总结
2014/04/30 职场文书
干部年终考核评语
2015/01/04 职场文书
民事起诉书范本
2015/05/19 职场文书
签证工作证明模板
2015/06/15 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript