用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实现多线程采集的2个代码例子
Jul 07 Python
Python Sleep休眠函数使用简单实例
Feb 02 Python
Python的Flask框架中web表单的教程
Apr 20 Python
python清除字符串里非字母字符的方法
Jul 02 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
Python numpy 点数组去重的实例
Apr 18 Python
python实现简单登陆流程的方法
Apr 22 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
python中count函数简单用法
Jan 05 Python
python调用百度API实现人脸识别
Nov 17 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
php中的数组操作函数整理
2008/08/18 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
php 基础函数
2017/02/10 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python操作 hbase 数据的方法
2016/12/18 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
九年级历史教学反思
2014/01/27 职场文书
保密承诺书
2014/03/27 职场文书
马智宇结婚主持词
2014/04/01 职场文书
教师业务培训方案
2014/05/01 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis