matlab拉格朗日插值法程序

matlab拉格朗日插值法程序,第1张

function yh=lagrange (x,y,xh)

n = length(x)

m = length(xh)

yh = zeros(1,m)

c1 = ones(n-1,1)

c2 = ones(1,m)

for i=1:n

xp = x([1:i-1 i+1:n])

yh = yh + y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2))

end

注:该程序只可一次计算实现一个插值计算。可实现多个插值计算的程序如下:

function yh=lagrange(x,y,xh)

n = length(x)

m = length(xh)

x = x(:)

y = y(:)

xh = xh(:)

yh = zeros(m,1)

c1 = ones(1,n-1)

c2 = ones(m,1)

for i=1:n,

xp = x([1:i-1 i+1:n])

yh = yh + y(i) * prod((xh*c1-c2*xp')./(c2*(x(i)*c1-xp')),2)

end

用拉格朗日插值做y=1./(1+x.^2)本来就有很大的偏差,你的插值函数没写错

这是我做过的一个y=1/(1+25x^2)的图像 ,这里取得是11点,你的应该是5点的吧。你的做完是这种么。这样没错,插值法不适合太多点,想做多点的用的是分段插值。你应该是在学计算方法的课程吧,后边就会讲的。

附件中是拉格朗日插值法程序。

以下面数据为例:(运行时,也就是调用Language.m程序)

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

y0=Language(x,y,x0)

(上面语句,在command window中输入即可)

结果:

y0=

    0.0201


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

原文地址: http://outofmemory.cn/yw/11104542.html

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

发表评论

登录后才能评论

评论列表(0条)

保存