拉格朗日插值算法分析
这几天一直研究拉格朗日多项式,今天将自己对拉格朗日多项式的理解写在这里,方便大家交流。
在数值分析中,拉格朗日常用于多项式插值。假定提供一组数据点[xi,yi],拉格朗日插值多项式就是由这些
数据的线性运算得到的。
其中基本的多项式有以下公式计算得到
注意
1.第一提供的xi应该是没有相同的,否则不能应用此算法
2.对于每一个xi,yi都只对应一个值
3.对于i~=j,lj(x)包括x-xi,因此,整个表达式的乘积将是0。
4.相反
5.因此yi*li(x)=yi,因此在每一个点xi,L(xi) = yi+0+0+........+0=yi,表明这个拉格朗日插值算法的正确性。
举例说明
x = [1 2 3 ] y = f(x)=[1 4 9]
则L(x) = 1*(x-2)*(x-3)/{(1-2)(1-3)}+4*(x-1)(x-3)/{(2-1)*(2-3)}+9(x-1)(x-2)/{(3-1)(3-2)}=x^2
下面看一下MATLAB的具体代码实现过程。
- clear,clc;
- x0 = linspace(-10,10,21);
- y0 = x0.^2;
- x = linspace(-20,20,100);
- n = size(x0,2);
- L = ones(n,size(x,2));
- for ii = 1:n
- for jj = 1:n
- if(ii~=jj)
- L(ii,:) = L(ii,:).*(x-x0(jj))./(x0(ii)-x0(jj));
- end
- end
- end
- y = 0;
- for ii = 1:n
- y = y +y0(ii).*L(ii,:);
- end
- y1 = x.^2;
- plot(x,y1,'ro',x,y,'b*')
- legend('source data','langrange')
- title('langrange interplation vision')
虽然样本数据点只有21个,但足以看出插值曲线足以和满足标准了,插值效果还是很好的