在Matlab中,可以编写如下程序来利用Lagrange插值公式进行计算:
function f=Lagrange(x,fx,inx)
n=length(x);m=length(inx);
for i=1:m;
z=inx(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x(j))/(x(k)-x(j));
end
end
s=p*fx(k)+s;
end
f(i)=s;
end
plot(x,fx,'O',inx,f)
x=[1:12]
fx=[12 234 34 -1 34 2 5 23 34 9 45 23]
xi=[1:0.2:12]
Lagrange(x,fx,xi)
得出结果:
12.0000 -60.5937 18.2765 124.9778 202.5952 234.0000 223.3757 184.1249 131.4738 78.4253 34.0000 2.9467 -13.6885 -17.5810 -12.0379 -1.0000 11.7556 23.1624 31.1611 34.7730 34.0000 29.6054 22.8332 15.1153 7.8099 2.0000 -1.6307 -2.8397 -1.7907 1.0404 5.0000 9.4024 13.6643 17.4033 20.4834 23.0000 25.2037 27.3769 29.6858 32.0400 34.0000 34.7742 33.3426 28.7320 20.4439 9.0000 -3.4848 -12.8605 -12.8873
4.0592 4
5.0000 112.3788 197.1817 267.9699 254.3439 23.0000
拉格朗日插值法理论介绍
对于给定的若n+1个点,对应于它们的次数不超过n的拉格朗日多项式只有一个。
如果计入次数更高的多项式,则有无穷个,因为所有与相差的多项式都满足条件。
定义
对某个多项式函数,已知有给定的k + 1个取值点:
其中x j对应着自变量的位置,而y j对应着函数在这个位置的取值。
假设任意两个不同的x j都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:
其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:
拉格朗日基本多项式的特点是在x j上取值为1,在其它的点
上取值为0。
范例:
假设有某个多项式函数f,已知它在三个点上的取值为:
▪f(4) = 10
▪f(5) = 5.25
▪f(6) = 1
要求f(18)的值。
首先写出每个拉格朗日基本多项式:
然后应用拉格朗日插值法,就可以得到p的表达式(p为函数f的插值函数):
此时代入数值就可以求出所需之值:。
优缺点:
拉格朗日插值法的公式结构整齐紧凑,在理论分析中十分方便,然而在计算中,当插值点增加或减少一个时,所对应的基本多项式就需要全部重新计算,于是整个公式都会变化,非常繁琐[5]。
这时可以用重心拉格朗日插值法或牛顿插值法来代替。
此外,当插值点比较多的时候,拉格朗日插值多项式的次数可能会很高,因此具有数值不稳定的特点,也就是说尽管在已知的几个点取到给定的数值,但在附近却会和“实际上”的值之间有很大的偏差(如右下图)[6]。
这类现象也被称为龙格现象,解决的办法是分段用较低次数的插值多项式。