在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)

命令窗口输这个就没有问题。

扩展资料:

如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。

参考资料来源:百度百科-牛顿插值法

function

main()

clearclcclose

all

x=linspace(-5,5,11)

y=1./(1+x.^2)

x0=[0.3

0.5]

f=Language(x,y,x0)

function

f

=

Language(x,y,x0)

%求已知数据点的拉格朗日插值多项式

%已知数据点的x坐标向量:

x

%已知数据点的y坐标向量:

y

%插值点的x坐标:

x0

%求得的拉格朗日插值多项式或在x0处的插值:

f

x=[0.0

0.4

0.8

1.2

1.6]%input

x

data(可替换为自己的数据)

y=[0

0.428392

0.742101

0.910314

0.970348]%input

y

data(可替换为自己的数据)

x0=[0.3

0.5]%input

x0

data(可替换为自己的数据)

syms

t

l

if(length(x)

==

length(y))

n

=

length(x)

else

disp('x和y的维数不相等!')

return

%检错

end

p=sym(0)

for

(i=1:n)

l=sym(y(i))

for(k=1:i-1)

l=l*(t-x(k))/(x(i)-x(k))

end

for(k=i+1:n)

l=l*(t-x(k))/(x(i)-x(k))

end

p=p+l

end

simplify(p)%简化多项式

f

=

subs

(p,'t',x0)

%计算插值点的函数值

f

=

vpa(f,6)

%将插值多项式的值化成6位精度的小数

end


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存