用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中尝试多线程编程的一个简明例子
Apr 07 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
基于python requests库中的代理实例讲解
May 07 Python
python3学生名片管理v2.0版
Nov 29 Python
python 多线程串行和并行的实例
Feb 22 Python
python3实现mysql导出excel的方法
Jul 31 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
python文件和文件夹复制函数
Feb 07 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
javascript数组排序汇总
2015/07/07 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python实现的栈(Stack)
2018/01/26 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
安全教育观后感
2015/06/17 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
CentOS安装Nginx并部署vue
2022/04/12 Servers
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL