牛顿插值

差商及其性质



牛顿插值公式




#牛顿插值,差商
from sympy import *x = Symbol('x')
x_list = [1, 3, 2]
y_list = [1, 2, -1]n = len(x_list)
df_list = [y_list[0]]
for k in range(1,n):df = 0for i in range(k+1):X = 1for j in range(k+1):if i == j:passelse:X = X * (x_list[i]-x_list[j])df += y_list[i] / Xdf_list.append(df)
print(df_list)
P = df_list[0]
n = len(df_list)
for i in range(n-1):X = 1for j in range(i+1):X = X * (x - x_list[j])P += df_list[i+1] * X
print(expand(P))
print(P.subs(x,1.5))

结果:

[1, 0.5, 2.5]
2.5*x**2 - 9.5*x + 8.0
-0.625000000000000
#牛顿插值
from sympy import *def f(a):f = sinh(a)return f
x_list = [0, 0.20, 0.30, 0.50]
y_list = []
for x in x_list:y = f(x)y_list.append(y)n = len(x_list)
df_list = [y_list[0]]
for k in range(1,n):df = 0for i in range(k+1):X = 1for j in range(k+1):if i == j:passelse:X = X * (x_list[i]-x_list[j])df += y_list[i] / Xdf_list.append(df)
print(df_list)
P = df_list[0]
n = len(df_list)
x = Symbol('x')
a = 0.23
for i in range(n-1):X = 1for j in range(i+1):X = X * (x - x_list[j])P += df_list[i+1] * Xprint(f'{i+1}次牛顿差值多项式:',P,';',f'f({a})={P.subs(x,a)}')

结果:

[0, 1.00668001270547, 0.0838763211833875, 0.172461698783472]
1次牛顿差值多项式: 1.00668001270547*x ; f(0.23)=0.231536402922258
2次牛顿差值多项式: 0.0838763211833875*x*(x - 0.2) + 1.00668001270547*x ; f(0.23)=0.232115149538423
3次牛顿差值多项式: 0.172461698783472*x*(x - 0.3)*(x - 0.2) + 0.0838763211833875*x*(x - 0.2) + 1.00668001270547*x ; f(0.23)=0.232031850537911

差商和导数



from sympy import *x_list = [0, 1, 2, 3, 4, 5]
y_list = [-7, -4, 5, 26, 65, 128]
DF = []
DF.append(y_list)
i = 0
while True:n = len(DF[i])i += 1df_list = []num = 0for k in range(n-1):df = (DF[i-1][k+1]-DF[i-1][k]) / iif df == 0:num += 1df_list.append(df)if len(df_list) == 1:breakif len(df_list) == num:breakDF.append(df_list)
print(DF)F = DF[0][0]
x = Symbol('x')
for i in range(1,len(DF)):X = 1for j in range(i):X = X * (x - x_list[j])F += DF[i][0] * X
print(f'{F} = {expand(F)}')

结果:

[[-7, -4, 5, 26, 65, 128], [3.0, 9.0, 21.0, 39.0, 63.0], [3.0, 6.0, 9.0, 12.0], [1.0, 1.0, 1.0]]
1.0*x*(x - 2)*(x - 1) + 3.0*x*(x - 1) + 3.0*x - 7 = 1.0*x**3 + 2.0*x - 7

差分




等距节点牛顿插值公式



#差分,向前差分
from sympy import *
x = 0.57891
x_list = [0.4, 0.5, 0.6, 0.7]
def f(a):f = sin(a)return f
y_list = []
for x_a in x_list:y = f(x_a)y_list.append(y)
DF = [y_list]
n = len(x_list)
for i in range(n-1):df_list = []for j in range(len(DF[-1])-1):df = DF[i][j+1] - DF[i][j]df_list.append(df)DF.append(df_list)
print(DF)
x_list.append(x)
x_list.sort()
n_x = x_list.index(x)
h =0.1
t = (x - x_list[n_x-1]) / h
P = DF[0][n_x-1]
for i in range(1,len(DF)-1):X, Y= 1, 1for j in range(i):X = X * (t - j)Y = Y * (j+1)P += (DF[i][n_x-1]) * X / Y
print(P)

结果:

[[0.389418342308651, 0.479425538604203, 0.564642473395035, 0.644217687237691], [0.0900071962955525, 0.0852169347908324, 0.0795752138426556], [-0.00479026150472012, -0.00564172094817672], [-0.000851459443456604]]
0.547139672804571
#差分,向后差分
from sympy import *
x = 0.57891
x_list = [0.4, 0.5, 0.6, 0.7]
def f(a):f = sin(a)return f
y_list = []
for x_a in x_list:y = f(x_a)y_list.append(y)
DF = [y_list]
n = len(x_list)
for i in range(n-1):df_list = []for j in range(len(DF[-1])-1):df = DF[i][j+1] - DF[i][j]df_list.append(df)DF.append(df_list)
print(DF)
x_list.append(x)
x_list.sort()
n_x = x_list.index(x)
h =0.1
t = (x - x_list[n_x+1]) / h
P = DF[0][n_x]
for i in range(1,len(DF)-1):X, Y= 1, 1for j in range(i):X = X * (t - j)Y = Y * (j+1)P += (DF[i][n_x-i]) * X / Y
print(P)

结果:

[[0.389418342308651, 0.479425538604203, 0.564642473395035, 0.644217687237691], [0.0900071962955525, 0.0852169347908324, 0.0795752138426556], [-0.00479026150472012, -0.00564172094817672], [-0.000851459443456604]]
0.546058556206317

牛顿插值法的Python程序相关推荐

  1. 牛顿法的matlab实现例题,【MATLAB|MATLAB牛顿插值法例题与程序Word版】

    『易坊知识库摘要_MATLAB|MATLAB牛顿插值法例题与程序Word版』x12345678y22.523.324.421.7025.228.524.825.4二.数学原理假设有n+1个不同的节点及 ...

  2. 多项式插值法的Python程序

    多项式插值法 例子 求t=16时,速度v的值 #多项式插值 from numpy import * from numpy.linalg import * x = [0, 10, 15, 20, 22. ...

  3. 【Python篇】拟牛顿法面面俱到(一)--牛顿插值法

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习, ...

  4. python插值程序_计算方法(2)——插值法(附Python程序)

    给定一些数据,生成函数的方式有两种:插值,回归. 插值而得到的函数通过数据点,回归得到的函数不一定通过数据点. 下面给出拉格朗日插值,牛顿插值和Hermite插值的程序, 具体原理可参考课本,不再赘述 ...

  5. 牛顿插值法 matlab m文件,牛顿插值法matlab程序

    <牛顿插值法matlab程序>由会员分享,可在线阅读,更多相关<牛顿插值法matlab程序(3页珍藏版)>请在人人文库网上搜索. 1.计算方法数值实验报告班级090712学号0 ...

  6. 牛顿迭代法(Newton’s Method)迭代求根的Python程序

    迭代法的作用 许多复杂的求解问题,都可以转换成方程f(x)=0的求解问题.这一系列的解叫做方程的根.对于非线性方程的求解,在自变量范围内往往有多个解,我们将此变化区域分为多个小的子区间,对每个区间进行 ...

  7. 2021-01-07 matlab数值分析  插值法 拉格朗日插值法 牛顿插值法

    matlab数值分析  插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...

  8. 拉格朗日插值法《python数据分析与挖掘实践》

    数据清洗 数据清洗主要是删除原始数据集中地无关数据.重复数据.平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值.异常值等. 缺失值处理的方法可分为3类:删除记录.数据插补和不处理. 删除含有缺失值 ...

  9. 拉格朗日插值法 【python】

    一.插值 设函数y=f(x)在区间[a,b]上连续,给定n+1个点 a≤x0<x1<....<xn≤b 已知,f(xk)=yk(k=0,1....n),在函数类P中寻找一个函数Φ(x ...

  10. 区间二分法(Bisection Method)迭代求根的python程序

    迭代法的作用 许多复杂的求解问题,都可以转换成方程f(x)=0的求解问题.这一系列的解叫做方程的根.对于非线性方程的求解,在自变量范围内往往有多个解,我们将此变化区域分为多个小的子区间,对每个区间进行 ...

最新文章

  1. 既是移动硬盘也是微型计算机,既是移动硬盘也是微型计算机 Gnarbox 2.0 SSD让你随时随地备份自己的照片...
  2. JavaScript 运行机制详解:Event Loop——续
  3. 按钮滑动隐藏,停止滑动显示的动画
  4. 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法
  5. 小工匠聊架构-超高并发秒杀系统设计 03_热点数据的处理
  6. 六十万的成长_我的EA策略分析和实现
  7. 公交换乘系统c语言,公交换乘的简单实现(源码)
  8. 阿里云图数据库GDB V3引擎发布,加速开启“图智”未来
  9. BCNF/3NF的判断方法
  10. Mysql学习总结(52)——最全面的MySQL 索引详解
  11. 从数据库导出数为生成excel表
  12. 2021年2月十大热门报告盘点(附百大热门报告列表及下载链接)
  13. 小白初解Linux基础相关
  14. OAuth1.0a的使用例(RFC5849 1.2节的中文翻译)
  15. ELasticSearch安装使用过程中遇到的坑的解决方案,以及使用Kibana操作ELasticSearch
  16. JDK/JRE/JVM之间的关系
  17. (附源码)小程序 校园二手交易平台 毕业设计 191637
  18. 使用Foxit Reader实现批量打印以及一页多版设置技巧
  19. 如何判断用户输入的邮箱格式是否正确?
  20. #include< >和#include“ ”的区别

热门文章

  1. 如何安装最新版质性分析软件NVIVO?
  2. Android水平仪实训报告,测量实训报告【三篇】
  3. PBJ | 华南农大联合中科院东北地理所发表植物功能基因与根际微生物互作综述...
  4. Javassist框架研究
  5. python发送验证码通知短信(互亿无线)
  6. 盘点App测试会用到哪些工具
  7. 工控协议——S7通讯协议
  8. 重要知识结构-持续更新中
  9. 感觉c语言入门经典看不懂,c语言入门经典怎么样_学c语言看什么书_c语言入门自学(3)...
  10. 服务器项目访问速度,【随心秀】优化1M带宽的云服务器访问速度