MATLAB之埃米特插值

一、算法原理

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章