用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之for循环语句
Oct 02 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
wxpython绘制圆角窗体
Nov 18 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
python 从list中随机取值的方法
Nov 16 Python
python中添加模块导入路径的方法
Feb 03 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
多人战的战术与战略
2020/03/04 星际争霸
解决中英文字符串长度问题函数
2007/01/16 PHP
PHP文件读写操作之文件写入代码
2011/01/13 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
python之wxPython菜单使用详解
2014/09/28 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Python如何读写二进制数组数据
2020/08/01 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
优秀党员获奖感言
2014/02/18 职场文书
市级文明单位申报材料
2014/05/07 职场文书
入党函调证明材料
2014/12/24 职场文书
企业党建工作总结2015
2015/05/26 职场文书
党支部对转正的意见
2015/06/02 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书