%hermite.m
%求埃尔米特多项式和误差估计的MATLAB主程序
%输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量,
%以f'(x_i)=y'_i(i = 1,2,...,n+1)为元素的向量Y1;
%x是以向量形式输入的m个插值点,M在[a,b]上满足|f~(2n+2)(x)|≤M
%注:f~(2n+2)(x)表示f(x)的2n+2阶导数
%输出的量:向量y是向量x处的插值,误差限R,2n+1阶埃尔米特插值多项式H_k及其系数向量
%H_c,误差公式wcgs及其系数向量Cw.
function[y,R,Hc,Hk,wcgs,Cw] = hermite(X,Y,Y1,x,M)
n = length(X);
m = length(x);for t = 1 : m
z = x(t);
H = 0;
q = 1;
c1 = 1;for k = 1 : ns = 0;V = 1;for i = 1 : nif k ~= is = s + (1/(X(k)-X(i)));V = conv(V,poly(X(i)))/(X(k)-X(i));endendh = poly(X(k));g = ([0 1]-2 * h * s);%注意不要写成1-2*h*s,因为是多项式减法,低阶多项式前面必须用零填补,书上的错误,浪费我一晚上时间G = g * Y(k) + h * Y1(k);H = H + conv(G,conv(V,V));%hermite插值多项式b = poly(X(k));b2 = conv(b,b);q = conv(q,b2);
end
Hc = H;
Hk = poly2sym(H);
Q = poly2sym(q);
for i = 1 : 2*n c1 = c1 * i;
end
wcgs = M * Q / c1;
Cw = M * q / c1;
y(t) = polyval(Hc,x(t));
R(t) = polyval(Cw,x(t));
end

%hermite.m
%求埃尔米特多项式和误差估计的MATLAB主程序
%输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量,
%以f'(x_i)=y'_i(i = 1,2,...,n+1)为元素的向量Y1;
%x是以向量形式输入的m个插值点,M在[a,b]上满足|f~(2n+2)(x)|≤M
%注:f~(2n+2)(x)表示f(x)的2n+2阶导数
%输出的量:向量y是向量x处的插值,误差限R,2n+1阶埃尔米特插值多项式H_k及其系数向量
%H_c,误差公式wcgs及其系数向量Cw.
function[y,R,Hc,Hk,wcgs,Cw] = hermite(X,Y,Y1,x,M)
n = length(X);
m = length(x);for t = 1 : m
z = x(t);
H = 0;
q = 1;
c1 = 1;for k = 1 : ns = 0;V = 1;for i = 1 : nif k ~= is = s + (1/(X(k)-X(i)));V = conv(V,poly(X(i)))/(X(k)-X(i));endendh = poly(X(k));g = ([0 1]-2 * h * s);%注意不要写成1-2*h*s,因为是多项式减法,低阶多项式前面必须用零填补,书上的错误,浪费我一晚上时间G = g * Y(k) + h * Y1(k);H = H + conv(G,conv(V,V));%hermite插值多项式b = poly(X(k));b2 = conv(b,b);q = conv(q,b2);
end
Hc = H;
Hk = poly2sym(H);
Q = poly2sym(q);
for i = 1 : 2*n c1 = c1 * i;
end
wcgs = M * Q / c1;
Cw = M * q / c1;
y(t) = polyval(Hc,x(t));
R(t) = polyval(Cw,x(t));
end

从这图片看要比拉格朗日和牛顿插值要好,不过当插值多了以后,也就是埃尔米特多项式的次数高了以后误差会变得很大的。不信我们来试试。

我们还是用sinx,不过这次我们用5个点。

X                       0                         pi/6                          pi/4                         pi/3                     pi/2

Y                       0                         0.5                          0.7071                    0.8660                    1

Y1                     1                        0.8660                     0.7071                       0.5                       0

>> X = [0 pi/6 pi/4 pi/3 pi/2];Y = [0 0.5 0.7071 0.8660 1];Y1 = [1 0.8660 0.7071 0.5 0];
>> M = 1;
>> x = linspace(0, pi, 50);
>> [y,R,Hc,Hk,wcgs,Cw] = hermite(X,Y,Y1,x,M)
>> y1 = sin(x);
>> errorbar(x,y,R,'.g')
>> hold on
>> plot(X, Y, 'or', x, y, '.k', x, y1, '-b');
>> legend('误差','样本点','埃尔米特插值估算','sin(x)');  

可以看到拟合的多项式从x=2.5开始远远偏离sinx,并且此时误差公式也失效了.这就是我们后面需要讲到的高次插值的振荡问题。

埃尔米特(Hermite)插值及其MATLAB程序相关推荐

  1. hermit插值 matlab,埃尔米特(Hermite)插值及其MATLAB程序

    %hermite.m %求埃尔米特多项式和误差估计的MATLAB主程序 %输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量, %以f'(x ...

  2. c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

    1.埃尔米特(Hermite)插值 1.1.Hermite插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶.二阶甚至更高阶的导数值,这就是 Hermite 插值问 ...

  3. matlab点坐标 一次插值,[转载]坐标转换和插值之matlab程序

    坐标转换和插值之matlab程序 Matlab版本:8.1.0.604 (R2013a) 这里需要用到的命令有:maps, defaultm, projfwd, projinv Matlab版本:8. ...

  4. 艾尔米特插值的MATLAB实现,埃尔米特(Hermite)插值

    Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值.对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况.在此情 ...

  5. 埃尔米特(Hermite)插值

    Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值.对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况.在此情 ...

  6. 牛顿(Newton)插值及其MATLAB程序

    拉格朗日插值的优点是格式整齐和规范,有误差估计方式,它的缺点是没有承袭性,当需要增加节点时,必须重新计算插值的基函数li(x).本文给出具有承袭性的牛顿插值法及其MATLAB程序.与牛顿插值有关的差商 ...

  7. 拉格朗日(lagrange)插值及其MATLAB程序

    一.n次拉格朗日插值 根据<插值多项式的性质>中的定理6.1可得 其中(6.19)称为基函数,(6.18)称为拉格朗日多项式,用(6.18)计算插值称为拉格朗日多项式插值. 方法2:通过M ...

  8. 插值拟合matlab程序,Matlab插值和拟合

    数值插值 一维插值 YI=interp1(X,Y,XI,METHOD) X.Y为采样点和样本值,XI为表示要插值的点,METHOD默认是线性插值'linear' METHOD可以取 'nearest' ...

  9. 埃尔米特插值c语言编程,131张艳-埃尔米特(Hermite)插值逼近的C语言程序.doc

    PAGE PAGE 1 论文题目:埃尔米特(Hermite) 插值逼近的C语言程序 院 系: 数学科学学院 专 业: 数学与应用数学 姓 名: 张 艳 学 号: 指导教师: 侯 存 贵 完成时间: 2 ...

最新文章

  1. 【译】如何精确判断最终用户响应时间过长的原因?
  2. oracle12c spa,Oracle12c功能加强 新特性之管理功能的加强
  3. WCF学习之旅—第三个示例之二(二十八)
  4. 第一个Django应用程序_part1
  5. 与微软.NET创始人Scott Guthrie面对面,“红衣教主”亲身传授推动成功转型的洪荒之力
  6. 外设驱动库开发笔记4:AD9833函数发生器驱动
  7. carplay是否可以用安卓系统_Microsoft Teams正在支持CarPlay通话,我还是期待微信支持CarPlay...
  8. CSDN博客下载器v2.0发布(导出PDF)
  9. java镜像劫持_解析映像劫持技术第1/3页
  10. Multistage GAN for Fabric Defect Detection 用于织物检测的多级GAN
  11. Excel插件POI-ET扩展(NiceXSSFWorkbook)说明
  12. 阿里70后程序员的 26 个职场感悟
  13. 如何刷新微信服务器小程序版本,微信小程序线上更新版本流程及如何运用
  14. 【放牛娃】奶盘seo自媒体文章伪原创系统
  15. CCleanner下载安装教程
  16. ORACLE 按时间创建分区表
  17. 计算机组成原理-笔记
  18. 机器学习强基计划2-2:一文详解ID3、C4.5、CART决策树算法+ Python实现
  19. 八大防火墙评测 谁才是真“金钟罩”
  20. Juce源码分析(一)Juce的优势

热门文章

  1. Python:如何安装与使用 pip
  2. Visual C++学习总结——进程或线程与指定CPU绑定
  3. c语言程序构建,c语言开发环境构建及简单的c程序设计.doc
  4. 赋能时空云计算,阿里云数据库时空引擎Ganos上线
  5. iOS 初识CoreBluetooth
  6. [C#]方法示例:判断是否闰年
  7. 邻居子系统:地址解析协议
  8. 如何为IE9平台预览版穿上外衣?
  9. Debug学习资源汇总
  10. Latex 合并pdf文档