用Python实现Newton插值法

 更新时间:2021年04月16日 14:40:13   作者:Amiyai  
最近在做数值分析的作业,作业里面的小数点让计算能力本就薄弱的我雪上加霜,为了偷个小懒快速把作业完成,所以有了这篇博客。哈哈哈哈哈,让我们一起复制copy,完成作业,哈哈哈哈需要的朋友可以参考下

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

3.完整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 字典中文key处理,读取,比较方法

    python 字典中文key处理,读取,比较方法

    今天小编就为大家分享一篇python 字典中文key处理,读取,比较方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python 命名规范知识点汇总

    python 命名规范知识点汇总

    这里给大家分享的是在python开发过程中需要注意的命名的规范的知识汇总,有需要的小伙伴可以查看下
    2020-02-02
  • python读取json数据还原表格批量转换成html

    python读取json数据还原表格批量转换成html

    这篇文章主要介绍了python读取json数据还原表格批量转换成html,由于需要对ocr识别系统的表格识别结果做验证,通过返回的json文件结果对比比较麻烦,故需要将json文件里面的识别结果还原为表格做验证,下面详细内容需要的小伙伴可以参考一下
    2022-03-03
  • Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题

    Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题

    这篇文章主要介绍了Python3中内置类型bytes和str用法及byte和string之间各种编码转换问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Python实现的拟合二元一次函数功能示例【基于scipy模块】

    Python实现的拟合二元一次函数功能示例【基于scipy模块】

    这篇文章主要介绍了Python实现的拟合二元一次函数功能,结合实例形式分析了Python基于scipy模块进行二元一次函数拟合相关科学运算操作实现技巧,需要的朋友可以参考下
    2018-05-05
  • 通过Python的jieba库对文本进行分词

    通过Python的jieba库对文本进行分词

    Python的jieba库是一个中文分词工具,它可以将一段中文文本分割成一个一个的词语,方便后续的自然语言处理任务,如文本分类、情感分析等,本文给大家介绍如何通过Python的jieba库对文本进行分词,文中详细的代码示例,需要的朋友可以参考下
    2023-05-05
  • 基于python实现学生信息管理系统

    基于python实现学生信息管理系统

    这篇文章主要为大家详细介绍了基于python学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Python利用pynimate实现制作动态排序图

    Python利用pynimate实现制作动态排序图

    这篇文章主要为大家详细介绍了Python如何利用pynimate实现制作动态排序图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-02-02
  • 关于Numpy中的行向量和列向量详解

    关于Numpy中的行向量和列向量详解

    今天小编就为大家分享一篇关于Numpy中的行向量和列向量详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python编程PyAutoGUI库使用与安装简介

    python编程PyAutoGUI库使用与安装简介

    这篇文章主要为大家介绍了python编程中PyAutoGUI库的使用与安装简单介绍,文中含有视频详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10

最新评论