Добрый день!
Помогите пожалуйста с решением такой проблемы.
Имеется набор из нескольких десятков полиномов. Необходимо перебрать все возможные комбинации по два полинома из этого набора и посчитать для каждого такого набора базис Грёбнера.
Я делаю это следующим образом (для примера взял 4 полинома).
Код:
with(Groebner):
U[1] := x^3*y^3*z-x*y^2*z^4+x*y*z^2-6*y^2*z:
U[2] := 4*x^6*y*z+y^2*z^4-x*y*z^3+8*x*y*z^2-7*x*y:
U[3] := x*y*z^5-3*x^2*z^3+x*y*z^3+x*y*z^2:
U[4] := x*y^7-3*x^5*y+2*x^2*y*z^2-2*x*y^2*z^2-y:
k:=0:
for i from 1 to 4 do
for j from 1 to 4 do
k:=k+1:
B[k] := Basis([U[i], U[j]], plex(op(indets([U[i], U[j]])))):
od:
od:
Проблема в том, что некоторые из таких комбинаций считаются очень долго (так долго, что Maple в итоге "зависает"). Можно ли сделать так, что если выражение
Код:
Basis([U[i], U[j]], plex(op(indets([U[i], U[j]]))))
считается дольше какого-то заданного времени (например, 20 секунд), то вычисление этого выражения прекращалось бы и осуществлялся переход к вычислению следующего?
Я пробовал использовать команду timelimit:
Код:
timelimit(20, Basis([U[i], U[j]], plex(op(indets([U[i], U[j]])))))
но после того, как находится комбинация, для которой время превышено, выдаётся сообщение "Error, (in Buchberger:-inter_reduce_gb) time expired" и оставшиеся комбинации не проверяются.
Ещё был вариант делать проверку
Код:
if traperror(timelimit(20, Basis([U[i], U[j]], plex(op(indets([U[i], U[j]]))))))<>"time expired" then (рассчитывать Basis)
но и так не получилось - иногда в сообщении выводится не только "time expired", но и какие-то другие символы и эта проверка не срабатывает.
Подскажите пожалуйста, как можно решить эту проблему?
Заранее спасибо!