一、算法原理
1、问题引入
在实际问题中,对所构造的插值多项式,不仅要求函数值重合,而且要求若干阶导数也重合,即要求插值函数 P(x) 满足:
此类问题被称为埃米特插值,相应的插值多项式成为埃米特插值多项式。
2、考虑函数值与导数值个数相等的情况
设在节点a≤x0<x1<...<xn≤b上,yi=f(xi),mi=f'(xi)(i=0、1...n)
要求插值多项式H(x)=H2n+1(x)=a0+a1*x+a2*x^2+...+a(2n+1)*x^(2n+1),其中a0,a1,...,a(2n+1)为待定系数。
埃米特插值多项式的构造方法:待定系数法(参考多项式插值方法)、基函数方法(拉格朗日插值/牛顿插值)
3、lagrange型hermite插值构造
共有2n+2个条件,函数值点有n+1个条件,一阶导数点有n+1个,分别构造【函数值点重合】和【一阶导数值点重合】的lagrange插值多项式。
使其满足条件
下面的问题就是求满足条件的基函数αj(x)及βj(x),利用Lagrange插值基函数:假设
根据满足条件,可知
整理得
整理解得:
同理可得
二、matlab程序
%% 埃米特插值(承袭性方法的hermite插值)
clc
clear
close
x=[1 2 3 4];
y=[2 11 32 71];
yy=[4 15 27 51];%一阶导数值
function H=hermite(X,Y,X0,Y0)
% HERMITE 插值
% X为数据点X坐标
% Y为数据点Y坐标
% X0为一阶导数点X坐标
% Y0为一阶导数值
syms x
m=length(X);
N=newton(X,Y); %求出函数值点的牛顿插值多项式
N1=diff(N); %求导
w=prod(x-X); %计算连乘积
A=zeros(1,m); %预分配内存
for j=1:m
W=diff(w); %对w求导
A(j)=(Y0(j)-subs(N1,x,X0(j)))/subs(W,x,X0(j));
end
A=newton(X0,A); %利用牛顿插值求出A的插值多项式
H=expand(N+A*w); %埃米特插值多项式
H1=sym2poly(H);
x=X(1):0.1:X(end); %
y=polyval(H1,x);
subplot(2,1,1);
plot(x,y);
subplot(2,1,2);
plot(X,Y);
end
function N=newton(X,Y) %对牛顿插值稍作更改
m=length(X);
c=cha(X,Y);
syms x
for i=1:m-1
D1=x-X(1:i);
D(i)=prod(D1);
end
N=expand(sum(D.*c)+Y(1))
end