% 在整个插值区间上采用拉格朗日插值法计算f(0.6),写出程序源代码,输出计算结果
% x -2.15 -1.00 0.01 1.02 2.03 3.25
% y 17.03 7.24 1.05 2.03 17.06 23.05
function main()
clc;
x = [-2.15 -1.00 0.01 1.02 2.03 3.25];
y = [17.03 7.24 1.05 2.03 17.06 23.05 ];
x0 = 0.6;
f = Language(x,y,x0)function f = Language(x,y,x0)
%求已知数据点的拉格朗日插值多项式
%已知数据点的x坐标向量: x
%已知数据点的y坐标向量: y
%插值点的x坐标: x0
%求得的拉格朗日插值多项式或在x0处的插值: fsyms t l;
if(length(x) == length(y))
n = length(x);
else
disp('x和y的维数不相等!');
return; %检错
endh=sym(0);
for (i=1:n)
l=sym(y(i));
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end;
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));
end;
h=h+l;
end
simplify(h);if(nargin == 3)
f = subs (h,'t',x0); %计算插值点的函数值
else
f=collect(h);
f = vpa(f,6); %将插值多项式的系数化成6位精度的小数
end结果:
f = 0.0201>>
function y0=Lagrange(x,y,x0)
%给定一系列插值点(x,y),得到在x=x0处,拉格朗日插值多项的值y0
n=length(x);
l=ones(1,n); %基函数
for k=1:n
for j=1:n
if j~=k
l(k)=l(k)*(x0-x(j))/(x(k)-x(j)); %定义插值基函数
end
end
end
y0=sum(y.*l); %根据拉格朗日插值多项式,求x=x0对应的值y0