数值分析 插值法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,'.')
结果如图: