用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加密自己的密码
Aug 04 Python
微信跳一跳python辅助脚本(总结)
Jan 11 Python
Python制作动态字符图的实例
Jan 27 Python
Python2和Python3的共存和切换使用
Apr 12 Python
Django给admin添加Action的步骤详解
May 01 Python
python命令行参数用法实例分析
Jun 25 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
详解python UDP 编程
Aug 24 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
详解Python模块化编程与装饰器
Jan 16 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
PHP daddslashes 使用方法介绍
2012/10/26 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
python解析xml文件实例分析
2015/05/27 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
企业年度评优方案
2014/06/02 职场文书
离婚协议书范本样本
2014/08/19 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL