我在做高代作业的时候走了条错路,但发现这个错路其实很有意思,所以下面的推导多半不是最简洁的推导方法。
V指范德蒙矩阵(1x1x21⋯xn−11⋮⋮⋮⋱⋮1xnx2n⋯xn−1n),众所周知detV=∏i<j(xj−xi)。
Aij指(x1x21⋯xn1⋮⋮⋱⋮xnx2n⋯xnn)的第i行j列的代数余子式。
下面通过按行求和与按列求和的方式分别求∑ni=1∑nj=1ajAij。
按列求和
考虑求∑ni=1Aik,这相当于求将A的第k列替换成全1后的行列式。显然∑ni=1Ain=(−1)n−1detV。下设k<n。
将第k列前移到第1列,再把第n列移到第k列剩下的缝隙,可以得到∑ni=1Aik=(−1)k−1(−1)n−(k+1)Vk=(−1)nVk+1,其中的Vk指将V的第k列替换成(xn1,xn2,⋯,xnn)T的行列式。
使用Cramer法则,可以得到Vk=xkdetV,其中的x为Vx=(xn1,xn2,⋯,xnn)T的解。
考虑Vx=(xn1,xn2,⋯,xnn)T这个线性方程组的意义:这是在用待定系数法寻找以全体xk为根的首一多项式的系数。但显然这个多项式就是n∏k=1(x−xk),因此xi=−[xi−1]n∏k=1(x−xk) ([xk]P(x)表示P(x)的xk项系数)
因此
n∑i=1n∑j=1ajAij=an(−1)n−1detV+n−1∑j=1ajn∑i=1Aij=an(−1)n−1detV+(−1)nn−1∑i=1aiVi+1=(−1)ndetV(−an+n∑i=2ai−1xi)=(−1)n−1detV(an+n−1∑i=1ai[xi]n∏k=1(x−xk))=(−1)n−1detV(n∑i=0ai[xi]n∏k=1(x−xk)−n∏k=1(−xk))=∏i<j(xj−xi)(n∏k=1xk+(−1)n−1n∏k=1(a−xk))=∏i<j(xj−xi)(n∏k=1xk−n∏k=1(xk−a))按行求和
考虑n∑i=1aiAki,可以把它写成|x1x21⋯xn1⋮⋮⋱⋮xk−1x2k−1⋯xnk−1aa2⋯anxk+1x2k+1⋯xnk+1⋮⋮⋱⋮xnx2n⋯xnn|,这还是范德蒙行列式(乘上a∏i≠kxi),即
n∑i=1aiAki=a(−1)k+1∏i≠kxi(xi−a)∏i<j;i,j≠k(xj−xi)因此
n∑i=1n∑j=1ajAij=an∑k=1(−1)k+1∏i≠kxi(xi−a)∏i<j;i,j≠k(xj−xi)如果xk两两不等,实际上这个变形总是正确的,因为交错多项式必有范德蒙行列式为因式
因此
n∑k=11xk∏i≠ka−xixk−xi=∏nk=1xk−∏nk=1(xk−a)a∏nk=1xk=1a(1−n∏k=1(1−axk))很容易验证这是一个a的多项式,并且在a=xk时取值1xk。但肯定大家都想简化下这个推导过程。
简单的想法
想要构造一个这样的多项式,显然只需要构造一个在全部xk处取值为1,并且没有常数项的多项式,然后除以x就行了;而这只需要构造一个在全部xk处取值为0且常数项是1的多项式,然后用1减掉就行了;最后这个构造是显然的,P(x)=n∏k=1(1−xxk)。
但这个结果没有太大意义,毕竟无论是求单点值还是求多点值,貌似复杂度都不会比暴力插值更优…