数值分析Runge插值逼近
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dx=y0; %差商
yz=y0(1);
fori=1:n-1
dx0=dx;
forj=1:n-i
dx(j)=(dx0(j+1)-dx0(j))/(x0(i+j)-x0(j));
end
df=dx(1);
s=s*(x(k)-x0(i)); %一次因子乘积
yz=yz+s*df; %计算各次Newton插值的值
end
end
end
figure;
plot(x,yx,'r','LineWidth',2);
holdon;
plot(x,y,'b','LineWidth',2);
gr来自百度文库don;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
holdon
title('分段线性插值曲线与原曲线比较','fontsize',24);
x=-1:0.01:1; %插值计算点
y=1./(1+25*x.^2);
m=length(x);
n=11;
for k=1:m %分别对每一点进行插值
tx=x(k);%插值点
s=0;
%进入迭代计算过程
forj=0:(n-1)
t=1;
fori=0:(n-1)
ifi~=j
t=t*(tx-x0(i+1))/(x0(j+1)-x0(i+1));
由此有 .
牛顿前插公式为
.
其余项为
牛顿后插公式为
.
其余项为
在这里由于x不是等距节点,Lagrange插值曲线与原曲线比较接近,没有出现Runge现象。
给定 ,构造次数不超过 的拉格朗日插值多项式
.
称 为 关于 的 次拉格朗日插值多项式,它满足
.
其中 称为 为结点的 次插值函数,它满足
.
设 是 上关于 的 次插值多项式, 在 上有 阶连续导数, 在 上存在,则其余项为
holdon
title('Lagrange插值曲线与原曲线比较','fontsize',24);
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('Lagrange插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
(4)用等距节点 ,h=0.2,绘出它的三次自然样条线性插值多项式的图像。
解:
当x在中间取值范围时,Newton插值曲线与原曲线比较接近,但是当x在两端时,Newton插值曲线与原曲线相差越来越大,出现了Runge现象。
插值余项 .
由插值多项式的唯一性知 ,因此,牛顿插值与拉格朗日插值有相同的余项表达式,即
end
end
s=s+t*y0(j+1);
end
yx(k)=s;
end
%画图显示结果
figure;
plot(x,yx,'r','LineWidth',2);
holdon;
plot(x,y,'b','LineWidth',2);
gridon;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
holdon
title('三次样条插值曲线与原曲线比较','fontsize',24);
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('三次样条插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
.
分段线性插值函数在区间上是一致收敛的,曲线与原曲线比较接近,不会出现Runge现象,但是需要用分段函数来表示。
①n越大,分段越多,节点间距越小,分段直线越逼近于原函数曲线;
②由于在每个节点处,分段线性插值函数都是取该点的原函数的值,故 具有很好的收敛性,不会像拉格朗日插值那样出现振荡现象;
③由于对于x点的插值,分段线性插值只用到x左右的两个节点,并且用直线直接相连,因此分段线性插值在节点处不光滑。
Matlab程序如下:
x0=-1:0.2:1; %初始数据
y0=1./(1+25*x0.^2);
x=-1:0.01:1; %插值点
y=1./(1+25*x.^2);
n=max(size(x0));
l=max(size(x));
s=1; %一次因子的乘积,预设为1
dx=y0; %差商
fork=1:l
s=1; %一次因子的乘积,预设为1
三次自然样条插值曲线与原曲线很接近。
设 为三次样条插值函数,则有估计式
, .
其中:
.
可见,当 时,三次样条插值函数 及其一阶导数 、二阶导数 分别一致收敛于被插函数 、 及 .
在以上四种插值方法中,三次自然样条插值方法得到的曲线与原曲线最相近。拉格朗日插值曲线在节点附近误差很小,曲线也较为光滑,但在端点处有较为明显的振荡现象;分段线性插值曲线具有良好的收敛性,但在节点处不光滑;而三次样条插值曲线在n较小时也会在端点附近有相对较大的误差,但兼具了收敛和光滑的优点,从直观上看与原函数曲线吻合得最好。
x0=-1:0.2:1
y0=1./(1+25*x0.^2);
x=-1:0.01:1; %插值计算点
y=1./(1+25*x.^2);
m=length(x);
n=length(x0);
forj=1:m
fori=1:n-1
if(x(j)>=x0(i))&(x(j)<=x0(i+1))
yx(j)=(x(j)-x0(i+1))/(x0(i)-x0(i+1))*y0(i)+(x(j)-x0(i))/(x0(i+1)-x0(i))*y0(i+1);
end
yx(k)=yz
end
figure;
plot(x,yx,'r','LineWidth',2);
holdon;
plot(x,y,'b','LineWidth',2);
gridon;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
holdon
title('Newton插值曲线与原曲线比较','fontsize',24);
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('分段线性插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
x0=-1:0.2:1;%节点
y0=1./(1+25*x0.^2);
x=-1:0.01:1; %插值计算点
1.对Runge函数 用在区间[-1, 1]下列条件作插值逼近,并和 的图像进行比较。
(1)用等距节点 ,h=0.2,绘出它的10次Newton插值多项式的图像。
(2)用节点 (i=0,1,…,10),绘出它的10次Newton插值多项式的图像。
(3)用等距节点 ,h=0.2,绘出它的分段线性插值多项式的图像。
y=1./(1+25*x.^2);
yx=csape(x0,y0,'second');
figure;
plot(x,fnval(yx,x),'r','LineWidth',2);hold on;
plot(x,y,'b','LineWidth',2);
gridon;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('Newton插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
i=1:11
x0=cos((2*i-1)/22*pi)
y0=1./(1+25*x0.^2);
yz=y0(1);
fori=1:n-1
dx0=dx;
forj=1:n-i
dx(j)=(dx0(j+1)-dx0(j))/(x0(i+j)-x0(j));
end
df=dx(1);
s=s*(x(k)-x0(i)); %一次因子乘积
yz=yz+s*df; %计算各次Newton插值的值
end
end
end
figure;
plot(x,yx,'r','LineWidth',2);
holdon;
plot(x,y,'b','LineWidth',2);
gr来自百度文库don;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
holdon
title('分段线性插值曲线与原曲线比较','fontsize',24);
x=-1:0.01:1; %插值计算点
y=1./(1+25*x.^2);
m=length(x);
n=11;
for k=1:m %分别对每一点进行插值
tx=x(k);%插值点
s=0;
%进入迭代计算过程
forj=0:(n-1)
t=1;
fori=0:(n-1)
ifi~=j
t=t*(tx-x0(i+1))/(x0(j+1)-x0(i+1));
由此有 .
牛顿前插公式为
.
其余项为
牛顿后插公式为
.
其余项为
在这里由于x不是等距节点,Lagrange插值曲线与原曲线比较接近,没有出现Runge现象。
给定 ,构造次数不超过 的拉格朗日插值多项式
.
称 为 关于 的 次拉格朗日插值多项式,它满足
.
其中 称为 为结点的 次插值函数,它满足
.
设 是 上关于 的 次插值多项式, 在 上有 阶连续导数, 在 上存在,则其余项为
holdon
title('Lagrange插值曲线与原曲线比较','fontsize',24);
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('Lagrange插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
(4)用等距节点 ,h=0.2,绘出它的三次自然样条线性插值多项式的图像。
解:
当x在中间取值范围时,Newton插值曲线与原曲线比较接近,但是当x在两端时,Newton插值曲线与原曲线相差越来越大,出现了Runge现象。
插值余项 .
由插值多项式的唯一性知 ,因此,牛顿插值与拉格朗日插值有相同的余项表达式,即
end
end
s=s+t*y0(j+1);
end
yx(k)=s;
end
%画图显示结果
figure;
plot(x,yx,'r','LineWidth',2);
holdon;
plot(x,y,'b','LineWidth',2);
gridon;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
holdon
title('三次样条插值曲线与原曲线比较','fontsize',24);
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('三次样条插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
.
分段线性插值函数在区间上是一致收敛的,曲线与原曲线比较接近,不会出现Runge现象,但是需要用分段函数来表示。
①n越大,分段越多,节点间距越小,分段直线越逼近于原函数曲线;
②由于在每个节点处,分段线性插值函数都是取该点的原函数的值,故 具有很好的收敛性,不会像拉格朗日插值那样出现振荡现象;
③由于对于x点的插值,分段线性插值只用到x左右的两个节点,并且用直线直接相连,因此分段线性插值在节点处不光滑。
Matlab程序如下:
x0=-1:0.2:1; %初始数据
y0=1./(1+25*x0.^2);
x=-1:0.01:1; %插值点
y=1./(1+25*x.^2);
n=max(size(x0));
l=max(size(x));
s=1; %一次因子的乘积,预设为1
dx=y0; %差商
fork=1:l
s=1; %一次因子的乘积,预设为1
三次自然样条插值曲线与原曲线很接近。
设 为三次样条插值函数,则有估计式
, .
其中:
.
可见,当 时,三次样条插值函数 及其一阶导数 、二阶导数 分别一致收敛于被插函数 、 及 .
在以上四种插值方法中,三次自然样条插值方法得到的曲线与原曲线最相近。拉格朗日插值曲线在节点附近误差很小,曲线也较为光滑,但在端点处有较为明显的振荡现象;分段线性插值曲线具有良好的收敛性,但在节点处不光滑;而三次样条插值曲线在n较小时也会在端点附近有相对较大的误差,但兼具了收敛和光滑的优点,从直观上看与原函数曲线吻合得最好。
x0=-1:0.2:1
y0=1./(1+25*x0.^2);
x=-1:0.01:1; %插值计算点
y=1./(1+25*x.^2);
m=length(x);
n=length(x0);
forj=1:m
fori=1:n-1
if(x(j)>=x0(i))&(x(j)<=x0(i+1))
yx(j)=(x(j)-x0(i+1))/(x0(i)-x0(i+1))*y0(i)+(x(j)-x0(i))/(x0(i+1)-x0(i))*y0(i+1);
end
yx(k)=yz
end
figure;
plot(x,yx,'r','LineWidth',2);
holdon;
plot(x,y,'b','LineWidth',2);
gridon;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
holdon
title('Newton插值曲线与原曲线比较','fontsize',24);
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('分段线性插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
x0=-1:0.2:1;%节点
y0=1./(1+25*x0.^2);
x=-1:0.01:1; %插值计算点
1.对Runge函数 用在区间[-1, 1]下列条件作插值逼近,并和 的图像进行比较。
(1)用等距节点 ,h=0.2,绘出它的10次Newton插值多项式的图像。
(2)用节点 (i=0,1,…,10),绘出它的10次Newton插值多项式的图像。
(3)用等距节点 ,h=0.2,绘出它的分段线性插值多项式的图像。
y=1./(1+25*x.^2);
yx=csape(x0,y0,'second');
figure;
plot(x,fnval(yx,x),'r','LineWidth',2);hold on;
plot(x,y,'b','LineWidth',2);
gridon;
plot(x0,y0,'ok','markersize',6,'LineWidth',6)
xlabel('x轴','fontsize',20);
ylabel('y轴','fontsize',20);
legend('Newton插值曲线','原曲线:1/(1+25*x^2)');
set(gca,'fontsize',16)
i=1:11
x0=cos((2*i-1)/22*pi)
y0=1./(1+25*x0.^2);