数值分析实验二(matlab)插值法

更新时间:2023-08-28 22:51:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二

插值法

实验2.1(多项式插值的振荡现象) ................................................................................................................ 3

实验要求1: ............................................................................................................................................... 3

程序: .................................................................................................................................................. 3 主函数: .............................................................................................................................................. 3 实验结果: .......................................................................................................................................... 5 实验要求2: ............................................................................................................................................... 6

(1)对:h(x)

x

.................................................................................................................... 6 4

1 x

程序: .................................................................................................................................................. 6 主函数: .............................................................................................................................................. 6 实验结果: .......................................................................................................................................... 8 实验分析 .............................................................................................................................................. 8 (2)对g(x)=arctan x .................................................................................................................... 8 程序: .................................................................................................................................................. 8 实验结果: ........................................................................................................................................ 10 实验分析 .............................................................................................................................................11 实验要求3: ..............................................................................................................................................11

程序: .................................................................................................................................................11 实验结果: ........................................................................................................................................ 13 实验分析: ........................................................................................................................................ 14

实验2.2(样条插值的收敛性) ...................................................................................................................... 15

实验要求(一) ........................................................................................................................................ 15

程序: ................................................................................................................................................ 15 数值实验结果 .................................................................................................................................... 15 实验分析 ............................................................................................................................................ 17 实验要求(二): ...................................................................................................................................... 17

程序: ................................................................................................................................................ 17 实验总结: ........................................................................................................................................ 19

实验2.3 .............................................................................................................................................................. 20

程序: ................................................................................................................................................ 20 运行结果: ........................................................................................................................................ 20

实验2.1(多项式插值的振荡现象)

实验要求1: 程序:

M文件:lagrange.m

test1p1.m Lagrange函数:

%lagrange insert

function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end

主函数:

x1=[-1:1:1];y1=1./(1+25*x1.^2); x2=[-1:0.5:1];y2=1./(1+25*x2.^2);

x4=[-1:0.25:1];y4=1./(1+25*x4.^2); x5=[-1:0.2:1];y5=1./(1+25*x5.^2); x6=[-1:0.1:1];y6=1./(1+25*x6.^2); x0=[-1:0.01:1]; subplot(4,2,1) y7=1./(1+25*x0.^2); plot(x0,y7,'-b') y0=lagrange(x1,y1,x0); y1=1./(1+25*x0.^2); subplot(4,2,2) plot(x0,y0,'--b') y0=lagrange(x2,y2,x0); y2=1./(1+25*x0.^2); subplot(4,2,3) plot(x0,y0,'-g') y0=lagrange(x3,y3,x0); y3=1./(1+25*x0.^2); subplot(4,2,4) plot(x0,y0,'--g') y0=lagrange(x4,y4,x0); y4=1./(1+25*x0.^2); subplot(4,2,5) plot(x0,y0,'-r') y0=lagrange(x5,y5,x0); y5=1./(1+25*x0.^2); subplot(4,2,6) plot(x0,y0,'--r') y0=lagrange(x6,y6,x0); y6=1./(1+25*x0.^2); subplot(4,2,7) plot(x0,y0,'-y')

数值实验结果及分析:

图一为原函数曲线。然后图二至图七为插值点分别为2个、4个、5个、8个、10个、20个时的函数图像。

10.5

0-110

-1-120

-2-11000

-100

-1

-0.5

0.5

1

-0.5

0.5

1

-0.5

0.5

1

-0.5

0.5

1

10.5

0-110

-1-120

-2-1

-0.5

0.5

1

-0.5

0.5

1

-0.5

0.5

1

实验分析

在此,我们看得到当采用四个和五个点进行拟合的时候,得到的函数在中间部分拟合得较好。随着插值点的次数越多,两端出现了明显的震荡。如图五、图六为插值节点增加到8个、10个的情况,得到的插值函数的图像明显与原函数的相似度很低,并且在两端出现了较大的震荡。图七增加到20个点时误差震荡极大,曲线基本不可取。从图中可以明显看到,随着插值节点的增多,虽然在中间的拟合函数拟合得比较好,在两端出现了较为明显的震荡,并且随着插值点的逐渐增多震荡越来越明显。

在这里,我们采用一个很简单的函数对其作出了很直接的验证。

(1)对:h(x) x1 x4

程序:

M文件:lagrange.m

test1p2a.m Lagrange函数:

%lagrange insert

function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end

主函数:

x1=[-5:2.5:5];y1=x1./(1+x1.^4); x2=[-5:2:5];y2=x2./(1+x2.^4); x3=[-5:1:5];y3=x3./(1+x3.^4);

x4=[-5:0.5:5];y4=x4./(1+x4.^4); x5=[-5:0.4:5];y5=x5./(1+x5.^4); x6=[-5:0.1:5];y6=x6./(1+x6.^4); x0=[-5:0.01:5]; subplot(4,2,1) y7=x0./(1+x0.^4); plot(x0,y7,'-b') y0=lagrange(x1,y1,x0); y1=x0./(1+x0.^4); subplot(4,2,2) plot(x0,y0,'--b') y0=lagrange(x2,y2,x0); y2=x0./(1+x0.^4); subplot(4,2,3) plot(x0,y0,'-g') y0=lagrange(x3,y3,x0); y3=x0./(1+x0.^4); subplot(4,2,4) plot(x0,y0,'--g') y0=lagrange(x4,y4,x0); y4=x0./(1+x0.^4); subplot(4,2,5) plot(x0,y0,'-r') y0=lagrange(x5,y5,x0); y5=x0./(1+x0.^4); subplot(4,2,6) plot(x0,y0,'--r') y0=lagrange(x6,y6,x0); y6=x0./(1+x0.^4); subplot(4,2,7) plot(x0,y0,'-y')

数值实验结果及分析:

实验结果:

图一为原函数曲线。然后图二至图七为插值点分别为4个、5个、10个、20个、25个、100个时的函数图像。

10

-1-510

-1-5100

-10-5

175

0-5-5

5

5

5

5

0.10

-0.1-510

-1-55000

-5000

-5

5

5

5

实验分析

与第一问得到的拟合函数的结果相类似,随着插值节点愈多,在中间阶段得到的函数图像叫原函数比较相似,但是在两端出现了明显的震荡,并且随着插值点的增多,震荡越来越大且不可控制。

(2)对g(x)=arctan x 程序:

M文件名:lagrange.m

Lagrange函数:

%lagrange insert

function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end 主函数:

x1=[-5:2.5:5];y1=atan(x1); x2=[-5:2:5];y2=atan(x2); x3=[-5:1:5];y3=atan(x3); x4=[-5:0.5:5];y4=atan(x4); x5=[-5:0.4:5];y5=atan(x5); x6=[-5:0.1:5];y6=atan(x6); x0=[-5:0.001:5]; subplot(4,2,1) y7=atan(x0); plot(x0,y7,'-b') y0=lagrange(x1,y1,x0); y1=atan(x1); subplot(4,2,2)

y0=lagrange(x2,y2,x0); y2=atan(x2); subplot(4,2,3) plot(x0,y0,'-g') y0=lagrange(x3,y3,x0); y3=atan(x3); subplot(4,2,4) plot(x0,y0,'--') y0=lagrange(x4,y4,x0); y4=atan(x4); subplot(4,2,5) plot(x0,y0,'-r') y0=lagrange(x5,y5,x0); y5=atan(x5); subplot(4,2,6) plot(x0,y0,'--r') y0=lagrange(x6,y6,x0); y6=atan(x6); subplot(4,2,7) plot(x0,y0,'-y')

数值实验结果及分析:

实验结果:

图一为原函数曲线。然后图二至图七为插值点分别为2个、4个、5个、8个、10个、20个时的函数图像。

20

-2-520

-2-550

-5-5

132

0-2-5

5

5

5

5

20

-2-520

-2-51000

-100

-5

5

5

5

实验分析

当插值节点为五个时,拟合程度不是很好,但是在两端出现的波动较小。当插值节点为10个时,可以看出,插值点确定出来的函数较原函数比较相识,中间阶段拟合程度比较高,在两端的波动也比较小。但是当节点增加到20、25、100个时,在插值区间两端出现了较大的波动,也就是龙格现象。可以看出,等距插值中,增加插值点的个数,并不能使得到的多项式函数与原函数的拟合程度更高。

实验要求3: 程序:

M文件名:lagrange.m

test1p3.m

Lagrange函数:

%lagrange insert

function y=lagrange(x0,y0,x) n=length(x0);m=length(x);

for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end 主函数:

k=[1:5];

x1=cos((2*k-1)*3.1415/12); y1=1./(1+25*x1.^2); a=[1:15];

x2= cos((2*a-1)*3.1415/32); y2=1./(1+25*x2.^2); b=[1:50];

x3= cos((2*b-1)*3.1415/102); y3=1./(1+25*x3.^2); c=[1:100];

x4= cos((2*b-1)*3.1415/102); y4=1./(1+25*x4.^2); x0=[-1:0.01:1]; subplot(3,2,1) y5=1./(1+25*x0.^2); plot(x0,y5,'-b') y0=lagrange(x1,y1,x0); y1=1./(1+25*x0.^2);

plot(x0,y0,'--b') y0=lagrange(x2,y2,x0); y2=1./(1+25*x0.^2); subplot(3,2,3) plot(x0,y0,'-g') y0=lagrange(x3,y3,x0); y3=1./(1+25*x0.^2); subplot(3,2,4) plot(x0,y0,'--g'); y0=lagrange(x4,y4,x0); y4=1./(1+25*x0.^2); subplot(3,2,5) plot(x0,y0,'--r')

数值实验结果及分析:

实验结果:

应用上面的lagrange函数以及主函数,分别就

y

1

1 25x2

在[ 1,1]区间上做出了图像,如下图的图一。然后分别采用切比雪夫点进行插值,然后图二至图七为插值点分别为5个、15个、50个、100个时的函数图像。 :

10.5

0-110.5

10.5

0-11.51

0.5

-0.500.51-0.500.51

0-11.51

0.50-1

-0.500.51

0-1

-0.500.51

-0.500.51

实验分析:

实验2.2(样条插值的收敛性)

实验要求(一) 程序:

M文件名:test2p1.m

x1=[-1:1];y1=1./(1+25*x1.^2); x2=[-1:0.5:1];y2=1./(1+25*x2.^2); x3=[-1:0.4:1];y3=1./(1+25*x3.^2); x4=[-1:0.25:1];y4=1./(1+25*x4.^2); x5=[-1:0.2:1];y5=1./(1+25*x5.^2); x6=[-1:0.1:1];y6=1./(1+25*x6.^2); x0=[-1:0.01:1]; subplot(4,2,1) y7=1./(1+25*x0.^2); plot(x0,y7,'-b') y0=spline(x1,y1,x0); y1=1./(1+25*x0.^2); subplot(4,2,2) plot(x0,y0,'--b') y0=spline(x2,y2,x0); y2=1./(1+25*x0.^2); subplot(4,2,3) plot(x0,y0,'-g') y0=spline(x3,y3,x0); y3=1./(1+25*x0.^2); subplot(4,2,4) plot(x0,y0,'--g') y0=spline(x4,y4,x0); y4=1./(1+25*x0.^2);

plot(x0,y0,'-r') y0=spline(x5,y5,x0); y5=1./(1+25*x0.^2); subplot(4,2,6) plot(x0,y0,'--r') y0=spline(x6,y6,x0); y6=1./(1+25*x0.^2); subplot(4,2,7) plot(x0,y0,'-y')

数值实验结果

应用matlab函数库中提供的spline函数以及原函数表达式函数,分别就

y

1

2

1 25x

在[ 1,1]区间上做出了原函数图像,如下图的图一。然后图二至图七为插值点分别为2个、4个、5个、8个、10个、20个时的函数图像。

10.5

0-110

-1-110.5

0-110.5

0-1

-0.5

0.5

1

-0.5

0.5

1

-0.5

0.5

1

-0.5

0.5

1

10.5

0-110

-1-110.5

0-1

-0.5

0.5

1

-0.5

0.5

1

-0.5

0.5

1

实验分析

在此看到,当采用五个插值函数的节点时和采用更多节点的三次样条函数对原函数进行插值拟合的时候,得到的函数都是光滑的。并且随着插值节点的增多,也没有出现如实验2·1所示的随着点的增多而出现龙格现象。并且可以看出,随着三次样条函数的分段的增多,插值函数的图像与原函数的图像越来越相似。

实验要求(二): 程序:test2p2.m

clear clc

X=[0,1,2,3,4,5,6,7,8,9,10];

Y=[0.0,0.79,1.53,2.19,2.71,3.03,3.27,2.89,3.06,3.19,3.29]; dy0=0.8; dyn=0.2; n=length(X)-1; d=zeros(n+1,1); h=zeros(1,n-1); f1=zeros(1,n-1); f2=zeros(1,n-2);

for i=1:n;h(i)=X(i+1)-X(i); f1(i)=(Y(i+1)-Y(i))/h(i); end

for i=2:n;f2(i)=(f1(i)-f1(i-1))/(X(i+1)-X(i-1)); d(i)=6*f2(i); end

d(1)=6*(f1(1)-dy0)/h(1);

d(n+1)=6*(dyn-f1(n-1))/h(n-1); A=zeros(n+1,n+1); B=zeros(1,n-1); C=zeros(1,n-1);

B(i)=h(i)/(h(i)+h(i+1)); C(i)=1-B(i); end A(1,2)=1; A(n+1,n)=1; for i=1:n+1 A(i,i)=2; end for i=2:n A(i,i-1)=B(i-1); A(i,i+1)=C(i-1); end M=A\d; x=zeros(1,n); S=zeros(1,n); for i=1:n x(i)=X(i)+0.5;

S(i)=Y(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(x(i)-X(i))+M(i)/2*(x(i)-X(i))^2+(M(i+1)-M(i))/(6*h(i))*(x(i)-X(i))^3; end

plot(X,Y,'k'); hold on; plot(x,S,'o');

title('三次样条插值效果图');

legend('已知插值节点','三次样条插值'); hold off

返回插值函数:

S(x)=0.8*x - 0.001486*x^2 - 0.008514*x^3 (0,1)

S(x)=0.8122*x - 0.01365*x^2 - 0.004458*x^3 - 0.004055 (1,2) S(x)=0.8218*x - 0.01849*x^2 - 0.003652*x^3 - 0.01051 (2,3) S(x)=0.317*x^2 - 0.1847*x - 0.04093*x^3 + 0.9961 (3,4) S(x)=6.934*x - 1.463*x^2 + 0.1074*x^3 - 8.496 (4,5) S(x)=4.177*x^2 - 21.26*x - 0.2686*x^3 + 38.5 (5,6) S(x)=53.86*x - 8.344*x^2 + 0.427*x^3 - 111.7 (6,7)

S(x)=14.88*x - 1.643*x^2 + 0.06076*x^3 - 41.93 (8,9) S(x)=8.966*x - 0.986*x^2 + 0.03641*x^3 - 24.18 (9,10) 图像:

三次样条插值效果图

12345678910

实验总结:

插值多项式余项公式说明插值节点越多,一般说来误差越小,函数逼近越好,但这也不是绝对的,因为余项的大小既与插值节点的个数有关,也与函数f(x)的高阶导数有关。换句话说,适当地提高插值多项式的次数,有可能提高计算结果的准确程度,但并非插值多项式的次数越高越好。当插值节点增多时,不能保证非节点处的插值精度得到改善,有时反而误差更大。而这个误差就是由于计算机计算里面的舍入误差和截断误差。所以我们在进行多项式插值的时候,必须考虑这个函数的在插值区间的高阶导数的值是否是存在极大值的。

但是可以考虑的就是,在针对某些函数的时候,可以采用用切比雪夫插值的形式来对原函数进行插值拟合。这样,随着插值点的增多,插值函数越来越接近于原函数。

在实际的插值过程中,我们不需要一定就用高阶的多项式函数进行插值。在一些函数中,我们可以采用一次函数分段插值,只要取足够多的点,那么也可以达到很高的拟合程度。理论上也已经证明,当取点数区域无穷时,得到的函数就等于原函数。另外我们还可以考虑Hermite插值,三次样条插值等等其他一系列可以考虑的插值函数。

本文来源:https://www.bwwdw.com/article/7hdi.html

Top