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

Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值。对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况。在此情况下,n个节点x1,x2,…,xn的Hermite插值多项式的表达式如下:

4d7f44c1850a69501f1c197d2e03745f.png

其中:

1c9876bfc27bdf83356a2e12a0039350.png

这样就很容易写出代码了,关键就是记住公式。

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')

d0d7776db70d187b3d251209e7a1a7da.png

本文同步分享在 博客“风翼冰舟”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值