插值法与数据拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6、下列数据点的插值
01491625364964
012345678 (1)可以得到平方根函数的近似,在区间[0,64]上作图。
(2)用这9个点作8次多项式插值。
四、实验结果
1、用MATLAB编写独立的拉格朗日插值多项式函数
Lagrange 插值多项式源代码
function yi=Lagrange(x, y, xi)
% Lagrange 插值多项式,其中
% x --- 向量,全部的插值节点
% y --- 向量,插值节点处的函数值
% xi --- 标量,自变量x
% yi --- xi 处的函数估计值
n=length(x); m=length(y);
if n~=m
error('The lengths of X and Y must be equal');
return;
end
p=zeros(1,n);
% 对向量p赋初值0
for k=1:n
t=ones(1,n);
for j=1:n
if j~=k
if abs(x(k)-x(j)) error('the DATA is error!'); return; end t(j)=(xi-x(j))/(x(k)-x(j)); end end p(k)=prod(t); end yi=sum(y.*p); 2、用MATLAB编写独立的牛顿插值多项式函数 function yi=New_Int(x, y, xi) % Newton 基本插值公式,其中 % x --- 向量,全部的插值节点,按行输入 % y --- 向量,插值节点处的函数值,按行输入 % xi --- 标量,自变量x % yi --- xi 处的函数估计值 n=length(x); m=length(y); if n~=m error('The lengths of X and Y must be equal'); return; end % 计算均差表Y Y=zeros(n); Y(:,1)=y'; % Y(:,1)表示矩阵中第一列的元素 for k=1:n-1 for i=1:n-k if abs(x(i+k)-x(i)) error('the DATA is error!'); return; end Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i)); end end % 计算Newton插值公式 N(xi) yi=0; for i=1:n z=1; for k=1:i-1 z=z*(xi-x(k)); end yi=yi+Y(1,i)*z; end 3、利用编写好的函数计算本章P66例1、P77例1的结果并比较。 P66例1 x=[144 169 225]; y=[12 13 15]; yi=Lagrange(x,y,175) yi = 13.230158730158733 P77例1 x=[0.40,0.55,0.65,0.80]; >> y=[0.41075,0.57815,0.69675,0.88811]; >> yi=New_int(x,y,0.596) yi =0.631914405504000 4、已知函数在下列各点的值为: 0.20.40.60.8 1.0 0.980.920.810.640.38 试用4次牛顿插值多项式对数据进行插值,根据{},画出图形。解: X=[0.2:0.2:1.0]; y=[0.98,0.92,0.81,0.64,0.38]; xx=[0.2:0.08:1.0]; m=length(xx); z=zeros(1,m); for i=1:m z(i)=Lagrange(x, y, xx(i)); end hold on plot(x,y,'o');plot(xx,z,'r*'); hold off 得到如下图形: 图一 练习4的图形 5、在区间[-1,1]上分别取用两组等距节点对龙格函数作多项式插值,对不同值,分别画出插值函数及的图形。 解:a=-1;b=1;n=100;h=(b-a)/n; >> x=a:h:b;y=1./(1+25.*x.^2); >> plot(x,y,'k') 其函数原图形分别如下所示: 图二龙格函数的图形 用龙格函数的Lagrange()插值函数画图源程序 当n =10时,有: function Runge(10) % Runge现象 % n --- 等距离节点 a=-1; b=1; h=(b-a)/n; x=[a:h:b]; y=1./(1+25.*x.^2); xx=[a:0.01:b]; yy=1./(1+25.*xx.^2); m=length(xx); z=zeros(1,m); for i=1:m z(i)=Lagrange(x, y, xx(i)); end hold on plot(x,y,'o');plot(xx,z,'r-'); hold off 当n =20时,有: function Runge(10) % Runge现象 % n --- 等距离节点 a=-1; b=1; h=(b-a)/n; x=[a:h:b]; y=1./(1+25.*x.^2); xx=[a:0.01:b]; yy=1./(1+25.*xx.^2); m=length(xx); z=zeros(1,m); for i=1:m z(i)=Lagrange(x, y, xx(i)); end hold on plot(x,y,'o');plot(xx,z,'r-'); hold off 其图形分别如下所示: