资源描述
题目:对n+1个节点xi及yi=f(xi)(i=0,…,n)编制通用程序
(1) n次lagrange插值计算公式Ln(x)
(2) n次Newton插值计算公式
并利用上述两种方法对f(x)=ln(x),[a,b]=[1,2],取h=0.1,xi=1+ih,i=0,1,…,10.计算ln(1.54)及ln(1.98)的近似值。
1. Lagrange 插值法的function文件
function yy=lagrange(x,y,xx)
n=length(y);m=length(x);
if m~=n
error('向量长度不一致');
end
s=0;
for i=1:1:n
t=ones(1,length(xx));
for j=1:n
if j~=i
t=t.*(xx-x(j))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
end
2 Netwon 插值法的function文件
function yi=cnewton(x,y,xi)
n=length(x);m=length(y);
if m~=n
error('向量长度不一致');
end
Y=zeros(n);Y(:,1)=y';
for k=1:n-1
for i=1:n-k
if abs(x(i+k)-x(i))<1e-10
error(‘数据错误’);
end
Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));
end
end
yi=0;
for i=i:n
z=1;
for k=1:i-1
z=z*(xi-x(k));
end
yi=yi+Y(1,i)*z;
end
end
对题目进行输入,结果运行如下:
format long;
>> x=[1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2]';
y=log(x)
y =
0
0.095310179804325
0.182321556793955
0.262364264467491
0.336472236621213
0.405465108108164
0.470003629245736
0.530628251062170
0.587786664902119
0.641853886172395
0.693147180559945
Lagrange插值结果
>> yy=lagrange(x,y,1.54)
yy =
0.431782416482614
>> yy=lagrange(x,y,1.98)
yy =
0.683096848636761
Newton 插值结果
yi=cnewton(x,y,1.54)
yi =
0.431782416482615
>> yi=cnewton(x,y,1.98)
yi =
0.683096848636760
通过结果显示,两种方法对不同的插值点进行近似计算,差别只在显示数值结果的最后一位上,表明结果已经非常接近精确解
展开阅读全文