结式(Resultant)
结式(Resultant)通常用于处理多变量的多项式方程,下面给出一个具体实例进行参考
实例
1 | from Crypto.Util.number import * |
在这里,我们通过g = f1.resultant(f2, q)消去了单变量q,最后得到了一个单变量的多项式进行求解
定义
在一般条件下,我们定义如下的多项式 f(x) = a(x − α1)(x − α2)⋯(x − αm)
g(x) = b(x − β1)(x − β2)⋯(x − βn)
则我们记它们的结式为 Res(f, g) = anbm∏i, j(αi − βj)
= an∏ig(αi)
= (−1)mnbm∏if(βi)
所以我们可以通过结式快速判断两个式子有无公共根,从而将两个式子化简成一个单变量的式子
Sylvester 结式
两个一元多项式在一个域或者环下的结式是由它们所对应的Sylvester matrix行列式构成的
记两个一元多项式为 f(x) = a0xn + a1xn − 1 + … + an
g(x) = b0xm + b1xm − 1 + … + bn
此时我们就可以构造他们的Sylvester matrix行列式
- 取f(x)的系数, 依次在左上角起向下构造m行,每行右移一格补零
- 取g(x)的系数, 依次在左下角起向下构造n行,每行右移一格补零
构造行列式
然后我们就可以通过求解这个结式即可消去其中一个变量得到一个单变量的多项式
1 | from sage.matrix.matrix2 import Matrix |
1 | h = f1.sylvester_matrix(f2, y).det() #利用结式消掉y |
参考: