用Python实现Newton插值法
目录
- 1. n阶差商实现
- 2. 牛顿插值实现
- 3.完整Python代码
1. n阶差商实现
def diff(xi,yi,n):"""param xi:插值节点xiparam yi:插值节点yiparam n: 求几阶差商return: n阶差商"""if len(xi) != len(yi):#xi和yi必须保证长度一致returnelse: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 = 1for 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:插值节点xiparam yi:插值节点yiparam n: 求几阶差商param x: 代求近似值return: n阶差商"""if len(xi) != len(yi):#xi和yi必须保证长度一致returnelse: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 = 1for i in range(n):r *= (x - xi[i])v.append(r)f += diff_quot[i][0] * v[i]return f
【用Python实现Newton插值法】到此这篇关于用Python实现牛顿插值法的文章就介绍到这了,更多相关python牛顿插值法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- JS中的各种宽高度定义及其应用
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 涉毒患者(新诗)
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询