Такое переписывание можно выполнить, сформировав базис Грёбнера из заменяющих полиномов относительно переменного порядка, который благоприятствует использованию a-f вместо w-z. Затем используйте PolynomialReduce
в том же порядке, чтобы переписать полином.
Вот пример. Я начну с правил замены, чтобы построить полином так, чтобы мы знали ожидаемый результат.
reprules = {a -> w*z, b -> x*y, c -> (w^3 + z^3),
d -> (x + y), e -> (w^3*x + y*z^3), f -> (w^3*y + x*z^3)};
Теперь преобразуйте в полиномиальные отношения.
reppolys = Apply[Subtract, reprules, 1];
Здесь мы создаем пример.
poly =
a^2*b + 3*b^2*c^3 - 2*d*e*f + 11*b*f^2 - 5 a*d^2*e /. reprules // Expand
Out[11]= -2*w^6*x^2*y - 2*w^6*x*y^2 + 3*w^9*x^2*y^2 + 11*w^6*x*y^3 -
5*w^4*x^3*z - 10*w^4*x^2*y*z - 5*w^4*x*y^2*z + w^2*x*y*z^2 - 2*w^3*x^3*z^3 -
2*w^3*x^2*y*z^3 - 2*w^3*x*y^2*z^3 + 22*w^3*x^2*y^2*z^3 + 9*w^6*x^2*y^2*z^3 -
2*w^3*y^3*z^3 - 5*w*x^2*y*z^4 - 10*w*x*y^2*z^4 - 5*w*y^3*z^4 -
2*x^2*y*z^6 + 11*x^3*y*z^6 - 2*x*y^2*z^6 + 9*w^3*x^2*y^2*z^6 + 3*x^2*y^2*z^9
Сформируйте упомянутый выше базис Гребнера.
gb = GroebnerBasis[reppolys, {w, x, y, z, a, b, c, d, e, f}];
Используйте его, чтобы уменьшить наши входные данные, чтобы восстановить ожидаемый результат.
PolynomialReduce[poly,
gb, {w, x, y, z, a, b, c, d, e, f}][[2]]
Out[12]= a^2*b + 3*b^2*c^3 - 5*a*d^2*e - 2*d*e*f + 11*b*f^2
---редактировать---
Комментарий спрашивает об описаниях баз Грёбнера. Для моего собственного взгляда на функциональность Mathematica есть старая статья TMJ. Можно найти в
http://library.wolfram.com/infocenter/Articles/2179/
Среди лучших книг, связанных с этой темой, есть текст серии UTM.
Идеалы, разновидности и алгоритмы Кокса, Лоттла и О'Ши.
«Введение в базы Грёбнера» Адамса и Лустаунау (AMS) также неплохо.
---конец редактирования---
Даниэль Лихтблау
person
Daniel Lichtblau
schedule
20.05.2011