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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)