埃尔米特(Hermite)插值
2015-09-10 20:23
183 查看
Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值。对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况。在此情况下,n个节点x1,x2,…,xn的Hermite插值多项式的表达式如下:
其中:
这样就很容易写出代码了,关键就是记住公式。
matlab中的实现:
Hermite.m
HermiteInsert.m
其中:
这样就很容易写出代码了,关键就是记住公式。
matlab中的实现:
Hermite.m
function f = Hermite(x,y,y_1,x0) %求已知数据点的向后差分牛顿插值多项式 %已知数据点的x 坐标向量:x %已知数据点的y 坐标向量:y %已知数据点的导数向量:y_1 %求得的Hermite插值多项式或x0处的插值:f syms t; f = 0.0; if(length(x) == length(y)) if(length(y) == length(y_1)) n = length(x); else disp('y和y的导数的维数不相等!'); return; end else disp('x和y的维数不相等!'); return; end for i=1:n h = 1.0; a = 0.0; %%计算hi和ai for j=1:n if( j ~= i) h = h*(t-x(j))^2/((x(i)-x(j))^2); a = a + 1/(x(i)-x(j)); end end f = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i)); if(i==n) if(nargin == 4) f = subs(f,'t',x0); else f = vpa(f,6); end end end
HermiteInsert.m
x=1:0.2:1.8; y=[1 1.0954 1.1832 1.2649 1.3416]; y_1=[0.5 0.4564 0.4226 0.3953 0.3727]; f=Hermite(x,y,y_1) f=Hermite(x,y,y_1,1.44) x1=0:2*pi; y1=sin(x1); y1_1=cos(x1); xx=0:0.5:2*pi; yy=Hermite(x1,y1,y1_1,xx); plot(x1,y1,'o',xx,yy,'r')
相关文章推荐
- frame与iframer和frameset
- SkImageDecoder::Factory returned null
- 基本概念
- HTML 简介
- Mac下,在myeclipse中导入jdk和javaEE
- LPC43xx SGPIO Configuration -- Why not use GPDMA ?
- uname -r和uname -a了解
- POJ 1840 Brainman(逆序对数)
- Effective C++ 条款36 绝不重新定义继承而来的non-virtual函数
- BGP-RR 路由反射器工作原理 推荐
- Android将背景切换致白色的。(老是忘记...
- 《神探tcpdump第二招》-linux命令五分钟系列之三十六
- maven利用Profile构建不同环境的部署包
- 剑指Offer系列---(17)调整数组顺序使奇数位于偶数前面
- Java 堆和栈的区别
- 《神探tcpdump第一招》-linux命令五分钟系列之三十五
- 加快mydumper与myloader导出导入
- IOS开发-琐碎的知识点总结1
- 《dig挖出DNS的秘密》-linux命令五分钟系列之三十四
- CentOS7中宿主机配置多网卡绑定和建桥的方法