一、算法原理
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