用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通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
Python中print和return的作用及区别解析
May 05 Python
实例详解Python模块decimal
Jun 26 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
JS获取select-option-text_value的方法
2013/12/26 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
大学生职业生涯规划书模板
2014/01/03 职场文书
校园之声广播稿
2014/01/31 职场文书
酒店员工培训方案
2014/06/02 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript