数值分析函数拟合MATLAB代码
第一题
MATLAB代码:
%用spline作图
xi=[0.2 0.4 0.6 0.8 1.0];
yi=[0.98 0.92 0.81 0.64 0.38];
x=-1:0.01:2;
y1=Newton3(xi,yi,x); %源代码见m文件
y2=spline(xi,yi,x);
plot(xi,yi,'o',x,y1,'r-',x,y2,'k')
%用csape作图
xi=[0.2 0.4 0.6 0.8 1.0];
yi=[0.98 0.92 0.81 0.64 0.38];
x=-1:0.01:2;
y1=Newton3(xi,yi,x); %源代码见m文件
pp=csape(xi,yi, 'variational');
y2=ppval(pp,x);
plot(xi,yi,'o',x,y1,'r-',x,y2,'k')
第二题
MATLAB代码:
y1=zeros(1,11);
x1=-1:0.2:1;
for i=1:11,
p=1./(1+25.*x1(i).^2);
y1(i)=p;
end
x=-1:0.01:1;
ym=language(x1,y1,x);
yn=spline(x1,y1,x);
y2=zeros(1,21);
x2=-1:0.1:1;
for i=1:21,
p=1./(1+25.*x2(i).^2);
y2(i)=p;
end
x=-1:0.01:1;
yi=language(x2,y2,x);
yj=spline(x2,y2,x);
figure(1);
plot(x1,y1,'o',x,ym,'r-',x,yn,'k-');
figure(2);
plot(x2,y2,'o',x,yi,'r-',x,yj,'k-')
第三题
MATLAB代码:
用spline进行插值
x1=[0 1 4 9 16 25 36 49 64 ];
y1=[0 1 2 3 4 5 6 7 8];
x=0:0.1:64;
ym=language(x1,y1,x);
yn=spline(x1,y1,x);
figure(1);
plot(x1,y1,'o',x,ym,'k-',x,yn,'r-');
用scape用第一边界条件进行插值
x1=[0 1 4 9 16 25 36 49 64 ];
y1=[0 1 2 3 4 5 6 7 8];
x=0:0.1:64;
ym=language(x1,y1,x);
pp=csape(x1,y1, 'complete',[0.2,-1]);
yn=ppval(pp,x);
figure(1);
plot(x1,y1,'o',x,ym,'k-',x,yn,'r-');
结论:
[0 64]三次样条插值精确
[0 1]多项式插值精确
第三章
第一题
MATLAB代码:
y=zeros(1,11);
x=-1:0.2:1;
for i=1:11,
p=1./(1+25.*x(i).^2);
y(i)=p;
end
A=polyfit(x,y,3);
y1=poly2str(A,'x');
p1=-1:0.02:1;
u1=polyval(A,p1);
plot(p1,u1,x,y,'o')
y1
y1 =
1.5271 x^3 + 3.8235 x^2 + 3.2599 x + 1.0023
第二题
MATLAB代码:
x=[0.0 0.1 0.2 0.3 0.5 0.8 1.0];
y=[1.0 0.41 0.50 0.61 0.91 2.02 2.46];
A1=polyfit(x,y,3);
A2=polyfit(x,y,4);
%用y=a*exp(b*x)拟合
u=log(y);
A3=polyfit(x,u,1);
m=A3(1);n=A3(2);
a=exp(n);
p1=-0.5:0.01:1.5;
u3=a*exp(m*p1);
u1=polyval(A1,p1);
u2=polyval(A2,p1);
plot(p1,u1,'c-',p1,u2,'r--',p1,u3,'k-.',x,y,'o')