埃尔米特插值(等距节点,只用一个点的导数构造n+1阶Hermite多项式)Python实现
函数
y = \frac{1}{1+x^2}
埃尔米特插值
埃尔米特多项式构造方法有很多种。
这里只是用最简单的一种,通过均差来进行构造,最后再通过任意一个点的导数来计算出一个待定系数(这里假设的是m)。
下面代码中使用的是第一个点的导数相等来作为限制,算出这个多项式。
插值效果
代码
下面代码就是根据之前的拉格朗日插值改进得到的。所以那个label那个就是用拉格朗日的做默认值
有必要解释一下,ff(x)这个函数,只能传一个数组类型,然后算的这个数组的均差。
注意到,这里算出的来的跟之前直接用拉格朗日算出的来数值loss的绝对值均值基本相等。
import numpy as np
from sympy import *
import matplotlib.pyplot as pltdef f(x):return 1 / (1 + x ** 2)def ff(x): # f[x0, x1, ..., xk]ans = 0for i in range(len(x)):temp = 1for j in range(len(x)):if i != j:temp *= (x[i] - x[j])ans += f(x[i]) / tempreturn ansdef draw(L, newlabel= 'Lagrange插值函数'):plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsex = np.linspace(-5, 5, 100)y = f(x)Ly = []for xx in x:Ly.append(L.subs(n, xx))plt.plot(x, y, label='原函数')plt.plot(x, Ly, label=newlabel)plt.xlabel('x')plt.ylabel('y')plt.legend()plt.savefig('1.png')plt.show()def lossCal(L):x = np.linspace(-5, 5, 101)y = f(x)Ly = []for xx in x:Ly.append(L.subs(n, xx))Ly = np.array(Ly)temp = Ly - ytemp = abs(temp)print(temp.mean())def calM(P, x):Y = 1 / (1 + n ** 2)dfP = diff(P, n)return solve(Y.subs(n, x[0]) - dfP.subs(n, x[0]), [m,])[0]if __name__ == '__main__':x = np.array(range(11)) - 5y = f(x)n, m = symbols('n m')init_printing(use_unicode=True)P = f(x[0])for i in range(len(x)):if i != len(x) - 1:temp = ff(x[0:i + 2])else:temp = mfor j in x[0:i + 1]:temp *= (n - j)P += tempP = expand(P)P = P.subs(m, calM(P, x))draw(P, newlabel='Hermite插值多项式(-5点导数相等)')lossCal(P)
埃尔米特插值(等距节点,只用一个点的导数构造n+1阶Hermite多项式)Python实现相关推荐
- 拉格朗日插值--等距节点Python实现并计算误差
目标函数 y=11+x2y=11+x2 y = \frac{1}{1+x^2} 条件 通过拉格朗日进行插值但是通过所给的节点的不同,会导致插值的效果也不同. 下面方法采用的是用等距节点来实现插值效果. ...
- 《数值分析》-- 埃尔米特插值与分段插值
文章目录 一.埃尔米特插值 二.分段插值 2.1 龙格现象 2.2 分段线性插值 2.3 分段三次Hermite插值 习题 一.埃尔米特插值 问题 在实际问题中,对所构造的插值多项式,不仅要求函数值重 ...
- 数值分析笔记_3 埃尔米特插值
埃尔米特插值 本文内容完全原创,严禁抄袭. 我们知道,线性插值思想在于利用n个零点解出唯一的n维多项式映射,这种方法保证了曲线的连续性但是不能保证其平滑性,例如拉格朗日插值多项式在高次情况下容易出现的 ...
- c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...
1.埃尔米特(Hermite)插值 1.1.Hermite插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶.二阶甚至更高阶的导数值,这就是 Hermite 插值问 ...
- 数值计算之 插值法(5)分段插值,埃尔米特插值
数值计算之 插值法(5)分段插值,埃尔米特插值 前言 分段插值 分段线性插值 分段二次插值 埃尔米特Hermite插值 埃尔米特插值原理 埃尔米特插值公式 分段三次埃尔米特插值 后记 前言 之前记录了 ...
- 分段三次埃尔米特插值
引入: Hermite插值定义:对于一个n+1个节点的插值问题,要求在给定的节点处,插值多项式的函数值与节点的函数值相等.同时插值多项式的一阶甚至到指定高阶的导数值,也与该节点相应阶导数值相同.这样做 ...
- 5.3 matlab数据插值(线性插值、最近点插值、埃尔米特插值、三次样条插值)
①数据插值可以根据有限个点的取值状况,合理估算出附近其他点的取值,从而节约大量的实验和测试资源,节省大量的人力.物力和财力. ②数据插值能够根据已知数据推算未知数据,这使得人们解决问题的能力得到了拓展 ...
- 只用一个循环实现层序遍历
107. 二叉树的层序遍历 II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 . (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 只用一个循环while遍历栈s的长度 ...
- 【matlab】三次埃尔米特插值与三次样条插值的实际应用代码
要求:完成下列这些数据的插值,并将结果保存到一个EXCEL表格中.要求至少选取两种插值方法,并对1号池中的这些指标做出插值后图像(显示在同一个图像中) Z.mat load Z.mat x=Z(1,: ...
最新文章
- iOS开发UIlabel篇:iOS 10 3 Label设置的中划线突然失效了
- error: RPC failed; curl 18 transfer closed with outstanding read
- 特征值和特征向量的实际意义
- 自考感悟,话谈备忘录模式
- vmware的vmdk格式虚拟机转换为kvm的qcow2格式
- CarbonData:大数据融合数仓新一代引擎
- 层拖动Drag Div
- FLEX与JAVA不通讯错误与解决方法(转)
- 圣人、仁人、君子、善人、士、小人之名简释
- ex7.Caption属性的运用
- 解决vmware16安装win7时安装不了vmtools
- JS async库:parallel, series, waterfall, whilst用法
- typora偏好设置
- 猿人学第五题上---代码
- 《Windows 8 权威指南》——2.4 Aero与Metro的触摸对比
- 2021年危险化学品经营单位安全管理人员考试报名及危险化学品经营单位安全管理人员证考试
- 生成HTTPS协议需要的SSL证书
- 计算机键盘锁不了怎么办,电脑键盘被锁,打字打不出来怎么处理,
- putty更新linux运行程序,PuTTY for linux
- 云计算环境下安全关键技术研究