当你试图用拉格朗日插值去插1/x

Posted by wyj on October 16, 2021

我在做高代作业的时候走了条错路,但发现这个错路其实很有意思,所以下面的推导多半不是最简洁的推导方法。

V指范德蒙矩阵(1x1x21xn111xnx2nxn1n),众所周知detV=i<j(xjxi)

Aij(x1x21xn1xnx2nxnn)的第ij列的代数余子式。

下面通过按行求和与按列求和的方式分别求ni=1nj=1ajAij

按列求和

考虑求ni=1Aik,这相当于求将A的第k列替换成全1后的行列式。显然ni=1Ain=(1)n1detV。下设k<n

将第k列前移到第1列,再把第n列移到第k列剩下的缝隙,可以得到ni=1Aik=(1)k1(1)n(k+1)Vk=(1)nVk+1,其中的Vk指将V的第k列替换成(xn1,xn2,,xnn)T的行列式。

使用Cramer法则,可以得到Vk=xkdetV,其中的xVx=(xn1,xn2,,xnn)T的解。

考虑Vx=(xn1,xn2,,xnn)T这个线性方程组的意义:这是在用待定系数法寻找以全体xk为根的首一多项式的系数。但显然这个多项式就是nk=1(xxk),因此xi=[xi1]nk=1(xxk)[xk]P(x)表示P(x)xk项系数)

因此

ni=1nj=1ajAij=an(1)n1detV+n1j=1ajni=1Aij=an(1)n1detV+(1)nn1i=1aiVi+1=(1)ndetV(an+ni=2ai1xi)=(1)n1detV(an+n1i=1ai[xi]nk=1(xxk))=(1)n1detV(ni=0ai[xi]nk=1(xxk)nk=1(xk))=i<j(xjxi)(nk=1xk+(1)n1nk=1(axk))=i<j(xjxi)(nk=1xknk=1(xka))

按行求和

考虑ni=1aiAki,可以把它写成|x1x21xn1xk1x2k1xnk1aa2anxk+1x2k+1xnk+1xnx2nxnn|,这还是范德蒙行列式(乘上aikxi),即

ni=1aiAki=a(1)k+1ikxi(xia)i<j;i,jk(xjxi)

因此

ni=1nj=1ajAij=ank=1(1)k+1ikxi(xia)i<j;i,jk(xjxi)

如果xk两两不等,实际上这个变形总是正确的,因为交错多项式必有范德蒙行列式为因式

ni=1nj=1ajAij=ai<j(xjxi)(nk=1ikxi(xia)xixk)=ai<j(xjxi)nk=1xk(nk=11xkikaxixkxi)

因此

nk=11xkikaxixkxi=nk=1xknk=1(xka)ank=1xk=1a(1nk=1(1axk))

很容易验证这是一个a的多项式,并且在a=xk时取值1xk。但肯定大家都想简化下这个推导过程。

简单的想法

想要构造一个这样的多项式,显然只需要构造一个在全部xk处取值为1,并且没有常数项的多项式,然后除以x就行了;而这只需要构造一个在全部xk处取值为0且常数项是1的多项式,然后用1减掉就行了;最后这个构造是显然的,P(x)=nk=1(1xxk)

但这个结果没有太大意义,毕竟无论是求单点值还是求多点值,貌似复杂度都不会比暴力插值更优


0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!