您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:用Python实现Newton插值法

51自学网 2021-10-30 22:44:29
  python
这篇教程用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 = 3print(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.682print(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牛顿插值法内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python+Appium新手教程
解决numpy数组互换两行及赋值的问题
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。