数值分析 插值法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章插值法

2.在区间[-1,1]上分别取n=10,20用两组等距节点对龙哥函数f(x)=1/(1+25*x^2)做多项式插值及三次样条插值,对每个n值,分别画出插值函数及f(x)的图形。

(1)多项式插值

①先建立一个多项式插值的M-file;

输入如下的命令(如牛顿插值公式):

function [C,D]=newpoly(X,Y)

n=length(X);

D=zeros(n,n)

D(:,1)=Y'

for j=2:n

for k=j:n

D(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1));

end

end

C=D(n,n);

for k=(n-1):-1:1

C=conv(C,poly(X(k)))

m=length(C);

C(m)= C(m)+D(k,k);

end

②当n=10时,我们在命令窗口中输入以下的命令:

clear,clf,hold on;

X=-1:0.2:1;

Y=1./(1+25*X.^2);

[C,D]=newpoly(X,Y);

x=-1:0.01:1;

y=polyval(C,x);

plot(x,y,X,Y,'.');

grid on;

xp=-1:0.2:1;

z=1./(1+25*xp.^2);

plot(xp,z,'r')

得到插值函数和f(x)图形:

③当n=20时,我们在命令窗口中输入以下的命令:clear,clf,hold on;

X=-1:0.1:1;

Y=1./(1+25*X.^2);

[C,D]=newpoly(X,Y);

x=-1:0.01:1;

y=polyval(C,x);

plot(x,y,X,Y,'.');

grid on;

xp=-1:0.1:1;

z=1./(1+25*xp.^2);

plot(xp,z,'r')

得到插值函数和f(x)图形:

(2)三次样条插值

①先建立一个多项式插值的M-file;

输入如下的命令:

function S=csfit(X,Y,dx0,dxn)

N=length(X)-1;

H=diff(X);

D=diff(Y)./H;

A=H(2:N-1);

B=2*(H(1:N-1)+H(2:N));

C=H(2:N);

U=6*diff(D);

B(1)=B(1)-H(1)/2;

U(1)=U(1)-3*(D(1));

B(N-1)=B(N-1)-H(N)/2;

U(N-1)=U(N-1)-3*(-D(N));

for k=2:N-1

temp=A(k-1)/B(k-1);

B(k)=B(k)-temp*C(k-1);

U(k)=U(k)-temp*U(k-1);

end

M(N)=U(N-1)/B(N-1);

for k=N-2:-1:1

M(k+1)=(U(k)-C(k)*M(k+2))/B(k);

end

M(1)=3*(D(1)-dx0)/H(1)-M(2)/2;

M(N+1)=3*(dxn-D(N))/H(N)-M(N)/2;

for k=0:N-1

S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1));

S(k+1,2)=M(k+1)/2;

S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6;

S(k+1,4)=Y(k+1);

end

②当n=10时,我们在命令窗口中输入以下的命令:clear,clc

X=-1:0.2:1;

Y=1./(25*X.^2+1);

dx0= 0.0739644970414201;dxn= -0.0739644970414201; S=csfit(X,Y,dx0,dxn)

x1=-1:0.01:-0.5;y1=polyval(S(1,:),x1-X(1));

x2=-0.5:0.01:0;y2=polyval(S(2,:),x2-X(2));

x3=0:0.01:0.5; y3=polyval(S(3,:),x3-X(3));

x4=0.5:0.01:1;y4=polyval(S(4,:),x4-X(4));

plot(x1,y1,x2,y2,x3,y3,x4,y4, X,Y,'.')

结果如图:

②当n=20时,我们在命令窗口中输入以下的命令:clear,clc

X=-1:0.1:1;

Y=1./(25*X.^2+1);

dx0= 0.0739644970414201;dxn= -0.0739644970414201; S=csfit(X,Y,dx0,dxn)

x1=-1:0.01:-0.5;y1=polyval(S(1,:),x1-X(1));

x2=-0.5:0.01:0;y2=polyval(S(2,:),x2-X(2));

x3=0:0.01:0.5; y3=polyval(S(3,:),x3-X(3));

x4=0.5:0.01:1;y4=polyval(S(4,:),x4-X(4));

plot(x1,y1,x2,y2,x3,y3,x4,y4, X,Y,'.')

结果如图:

相关文档
最新文档