根据插值多项式的唯一性,两种方法的结果应该是一样的。条条道路通罗马,只是方法不同而已,牛顿法要比拉格朗日法优越简单。
Matlab函数M文件Lagrange程序function yy=lagrange(x,y,xi) m=length(x)上面是拉格朗日插值法,其中xi为要计算的数值比如 x=[0 3 5 9 31]Q
clear allclc
x0=1:5
y0=sin(x0)
x=1:0.2:2
y0=lagrange(x0,y0,x)
命令窗口输这个就没有问题。
扩展资料:
如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。
参考资料来源:百度百科-牛顿插值法
牛顿插值法matlab的m文件,里面有调用示例,可以直接调用;%保存文件名为New_Int.m
%Newton基本插值公式
%x为向量,全部的插值节点
%y为向量,差值节点处的函数值
%xi为标量,是自变量
%yi为xi出的函数估计值
function
yi=New_Int(x,y,xi)
n=length(x)
m=length(y)
if
n~=m
error('The
lengths
of
X
ang
Y
must
be
equal!')
return
end
%计算均差表Y
Y=zeros(n)
Y(:,1)=y'
for
k=1:n-1
for
i=1:n-k
if
abs(x(i+k)-x(i))<eps
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
%计算牛顿插值公式
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)