• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    用Python实现Newton插值法

    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+Appium新手教程
    • Python requests timeout的设置
    • 在python代码中加入环境变量的语句操作
    • python matplotlib绘图实现删除重复冗余图例的操作
    • Python爬虫之爬取2020女团选秀数据
    • python爬取各省降水量及可视化详解
    • python爬虫之教你如何爬取地理数据
    • 用Python的绘图库(matplotlib)绘制小波能量谱
    上一篇:Python+Appium新手教程
    下一篇:解决numpy数组互换两行及赋值的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    用Python实现Newton插值法 用,Python,实现,Newton,插值,