Пусть
- многочлены одной переменной
. Пусть также
-
i-й субрезультант (См.
https://en.wikipedia.org/wiki/Polynomial_greatest_common_divisor#Subresultants) многочленов
, а
соответствующий
i-й субрезультантный многочлен ((См.
https://en.wikipedia.org/wiki/Polynomial_greatest_common_divisor#Subresultants)). Тогда, если
, а
, то
- наибольший общий делитель полиномов
и
.
Пример процедуры на языке Maple для вычисления
(здесь v - переменная полиномов, напр. 'x'):
Цитата:
sub_res:=proc(i,p,q,v)
local m,n,S,T,M1,M2,f,V:
m:=degree(p, v):
n:=degree(q, v):
S := LinearAlgebra[SylvesterMatrix](p, q, v)^+:
T:=LinearAlgebra[SubMatrix](S, [1..m+n-i], [1..n-i, n+1..m+n-i]):
M1:=Matrix([[Matrix(m+n-2*i-1, shape=identity)],[Matrix(1,m+n-2*i-1)]]):
f:=(ii,jj)->v^(i-jj+1):
M2:=Matrix([[Matrix(m+n-2*i-1,i+1)],[Matrix(1,i+1,f)]]):
V:=Matrix([M1,M2]):
return LinearAlgebra[Determinant](V.T):
end proc:
Также в
Maple есть подпакет
ChainTools пакета
RegularChains. А там есть функции
SubresultantChain(p, q, x, R) и
SubresultantOfIndex(i, src, R). Последняя функция вычисляет субрезультантные многочлены порядка i.