%% 2022-1-15拉格朗日插值法,Hermite插值
%生成插值节点
clc;clear all;close all;
t=[0:2*pi/100:2*pi];
X=linspace(0,2*pi,5);
y=sin(t);
Y=sin(X);
%拉格朗日插值一共有5个点会产生4次多项式
k=1;syms x;L4x=0;
for k=1:5
L=1;
for i=1:5
if k~=i;
L=(x-X(i))./(X(k)-X(i)).*L;
else
continue;
end
end
L4x=Y(k).*L+L4x;
end
XL=[0:2*pi/10:2*pi];
YL=zeros(size(XL));
for i=1:length(XL)
YL(i)=subs(L4x,XL(i));
end
figure('Name','拉格朗日拟合','NumberTitle','off');
plot(XL,YL,'-ob',t,y);
%Hermite插值,n=4,mo=3(有三介导x=0)
X=[0 0 0 0 0.5*pi];
Y=[0 0 0 0 1]
Y_1=[0 1 0 -1 1];
k=1:5;
df=zeros(5,3);
for i=1:5
df(i,1)=Y(i);
end
for j=1:4
for i=1:1:length(X)-j
dx=X(i+1)-X(i);dy=Y(i+1)-Y(i);
if dx~=0
df(i,j+1)=dy./dx;%一阶差商
else
df( i,j+1)=Y_1(j+1)./ factorial(j);
end
end
end
%H=f(0)+f[0,0](x-0)+f[0,0,0](x-0)(x-0)+f[0 0 0 0](x-0)^3+f[0 0 0 0 1](x-0)^3*(x-0.5*pi)
syms x;
L=0;
for j=1:5
Lk=1;
if j==1
Lk=1;
else
for k=2:j
Lk= (x-df(k,1))*Lk;
end
end
L=df(1,j)*Lk+L;
end
t=[0:0.5*pi/5:0.5*pi];
for i=1:length(t)
Y(i)=subs(L,t(i));
end
figure('Name','埃尔米特插值','NumberTitle','off');
plot(t,Y,'-ob',t,sin(t));
拉格朗日插值和埃尔米特插值
最新推荐文章于 2024-12-30 21:50:35 发布