用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验证码识别的实例详解
Sep 09 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
深入浅析python 协程与go协程的区别
May 09 Python
python字典的遍历3种方法详解
Aug 10 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
You might like
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
el-form 多层级表单的实现示例
2020/09/10 Javascript
Python中运算符"=="和"is"的详解
2016/10/08 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
python异常处理和日志处理方式
2019/12/24 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
Python定义一个Actor任务
2020/07/29 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
应届毕业生就业自荐信
2013/10/26 职场文书
学前班学生评语
2014/12/29 职场文书
董事长开业致辞
2015/07/29 职场文书
《刷子李》教学反思
2016/02/20 职场文书