在MATLAB编程实验中,用拉格朗日插值法跟牛顿插值法运行之后计算的结果为什么是一样的?

在MATLAB编程实验中,用拉格朗日插值法跟牛顿插值法运行之后计算的结果为什么是一样的?,第1张

根据插值多项式的唯一性,两种方法的结果应该是一样的。条条道路通罗马,只是方法不同而已,牛顿法要比拉格朗日法优越简单。

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

做个测试,希望有所帮助。代码function main()clcx=[0.40,0.55,0.65,0.80,0.90,1.05]y=[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382]xhat=0.596[yhat,dy,cout]=newtint(x,y,xhat)figurehold onbox onplot(x, y, 'r-*')plot(xhat, yhat, 'ko') function [yhat,dy,cout]=newtint(x,y,xhat) %牛顿插值n=length(y)if length(x)~=nerror('x和y不一致')endc=y(:)for j=2:n %计算差商矩阵for i=n:-1:jc(i)=(c(i)-c(i-1))/(x(i)-x(i-j+1)) endendyhat=c(n)for i=(n-1):-1:1 %构造插值多项式yhat=yhat.*(xhat-x(i))+c(i)endif nargout>1yn2=c(n-1) for i=n-2:-1:1yn2=yn2.*(xhat-x(i))+c(i) enddy=yhat-yn2 if nargout>2, cout=cendend 结果


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8101785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存