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
发布了20 篇原创文章 · 获赞 31 · 访问量 634

猜你喜欢

转载自blog.csdn.net/STM89C56/article/details/105528322