Как разложить многочлен с другими многочленами?
Это вопрос по алгоритму деления. Рассмотрим полином f=-4x^4y^2z^2+y^6+3z^5
и полиномы G={y^6-z^5, x*z-y^2, x*y^4-z^4, x^2*y^2-z^3 *x^3-z^2}
,
Как можно вычислить f относительно G так, чтобы линейная комбинация f=\sum_i C_i*G_i
доволен?
Я знаю, что остаток равен нулю, но не являются коэффициентами C_i в приведенной выше формуле, например, с Macaulay2
Это может быть связано с более общим математическим вопросом об идеалах здесь.
2 ответа
Это очень поздний ответ. У вас, вероятно, уже есть ответ, но здесь это все равно. "//" вычисляет коэффициенты, используя алгоритм деления.
R=QQ[x,y,z,MonomialOrder=>Lex];
f=-4*x^2*y^2*z^2+y^6+3*z^5;
I=ideal(x*z-y^2,x^3-z^2);
G=gb(I);
f//(gens G)
o5 = {6} | 0 |
{2} | 3x2z2-xy2z-y4 |
{5} | 0 |
{4} | 0 |
{3} | -3z3 |
Так
F =-4* х ^ 2 * у ^ 2 * г ^ 2 + у ^6+3* г ^ 5
= 0 * (y ^ 6-z ^ 5) + (3 * x ^ 2 * z ^ 2-x * y ^ 2 * zy ^ 4)(x z-y ^ 2) + 0 * (xy ^ 4-z ^ 4) +0(x ^ 2 * y ^ 2-z ^ 3) + (- 3 * z ^ 3) * (x ^ 3-z ^ 2).
Другой совет - скопируйте и вставьте свой код, чтобы другие могли его скопировать и вставить. Если вы разместите изображение, то мы должны напечатать его вручную. Если вы поместите четыре пробела перед каждой строкой, то это будет выглядеть как код, как я сделал здесь.
Может быть, достаточно просто сделать повторное полиномиальное деление, что-то вроде этого (грубый псевдокод..)
order G lexicographically
total_rest = 0
coefficients = {g[0]:None, g[1]:None,...}
while f > 0:
for g in G:
quotient, reminder = f / g # polynomial division
coefficients[g] += quotient
if reminder == 0:
return # We are done. f was devisible by G.
f = reminder
total_rest += lt(f) # lt: leading term
f -= lt(f)
# Now it should hold that
# f = coefficient[g]*g + ... + total_rest