Как разложить многочлен с другими многочленами?

Это вопрос по алгоритму деления. Рассмотрим полином 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
Другие вопросы по тегам