Skip to content

Instantly share code, notes, and snippets.

@Observatorio-de-Matematica
Created January 5, 2024 15:14
Show Gist options
  • Save Observatorio-de-Matematica/f5fcef35a50b47347d9fabbd04026555 to your computer and use it in GitHub Desktop.
Save Observatorio-de-Matematica/f5fcef35a50b47347d9fabbd04026555 to your computer and use it in GitHub Desktop.
/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
/* [ Created with wxMaxima version 0.8.6 ] */
/* [wxMaxima: comment start ]
PRIMERO HAY QUE CARGAR EL PAQUETE "GROBNER". LA ORDEN ES:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
load(grobner);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
AHORA DEFINIMOS LOS POLINOMIOS, Y LES DAMOS EL NOMBRE DE F Y G, RESPECTIVAMENTE.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
F: x^4*y^2+3*x^7-5*y^3;
G: y^7*x^4+y^3*x+x-1;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
EL PRODUCTO SE PUEDE REALIZAR DE LAS SIGUIENTES FORMAS:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
F*G;
poly_expand(F*G,[x,y]);
poly_multiply(F,G,[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
OBSERVA QUE PODEMOS OBTENER LA EXPANSIÓN DEL PRODUCTO DE DOS FORMAS DISTINTAS.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
PARA LA SUMA NO TENEMOS PROBLEMAS APARENTES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
F+G;
poly_add(F,G,[x,y]);
poly_subtract(F,G,[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
SE PUEDEN CALCULAR LOS S-POLINOMIOS MEDIANTE LA ORDEN:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_s_polynomial(F,G,[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
LA DIVISIÓN DE UN POLINOMIO POR UN CONJUNTO DE POLINOMIOS SE REALIZA MEDIANTE LA ORDEN:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
H: x^4*y^3+1;
poly_pseudo_divide(H,[F,G],[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
LA INTERPRETACIÓN DEL ÚLTIMO RESULTADO ES LA SIGUIENTE
(%i)poly_pseudo_divide(H,[F,G],[x,y]);
(%o)[[L1,L2],R,a,n]
a*H=L1*F+L2*G+R
n ES EL NÚMERO DE REDUCCIONES REALIZADAS.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
SE PUEDE COMPLETAR CON LA SIGUIENTE ORDEN, QUE DA DIRECTAMENTE EL RESTO DE LA DIVISIÓN:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_normal_form(H,[F,G],[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
EJERCICIO NATURAL.
Determina una base de Groebner del ideal generado por F y G.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
================================================
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
EL CÁLCULO DE LA BASE DE GROEBNER SE PUEDE REALIZAR DIRECTAMENTE MEDIANTE LA ORDEN:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
F;
G;
poly_grobner([F,G],[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
¡BUENO, QUÉ VAMOS A HACER! PROBEMOS CON OTRO EJEMPLO MÁS SENCILLO.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_grobner([X^2*Y+1,X*Y^2+Y+3],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
UNA FORMA DE AVERIGUAR SI TENEMOS UNA BASE DE GROEBNER ES UTILIZAR LA ORDEN.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_buchberger_criterion([X^2*Y+1,X*Y^2+Y+3],[X,Y]);
poly_buchberger_criterion([X^2*Y+1,X*Y^2+Y+3,-X*Y+Y-3*X,Y-3*X^2-3*X+1,Y^2-2*Y+9*X+3,Y^3+Y^2+6*Y+9],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
PARA CALCULAR UNA BASE DE GROEBNER:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_buchberger([X^2*Y+1,X*Y^2+Y+3],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
PARA REDUCIR LOS ELEMENTOS DE UN CONJUNTO:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_reduction([X^2*Y+1,X*Y^2+Y+3],[X,Y]);
poly_reduction([x^2*y+1,y^2-3],[x,y]);
poly_reduction([x^2*y+1,y^2-3,y^3-y^2+2*x^3*y+2*x^2*y-3*y+2*x+5],[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
PARA MINIMIZAR UN CONJUNTO:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_minimization([x^2*y+1,y^2-3],[x,y]);
poly_minimization([x^2*y+1,2*y^2-6,y+3*x^2],[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
PARA DETERMINAR UNA BASE DE GROEBNER REDUCIDA:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_reduced_grobner([X^2*Y+1,X*Y^2+Y+3],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
OBSERVA LA DIFERENCIA ENTRE poly_grobner Y poly_reduced_grobner.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
EJEMPLO DE HOY.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
SE TIENE EL IDEAL GENERADO POR G1 Y G2. VAMOS A SEGUIR EL MÉTODO PARA DETERMINAR UNA BASE DE GROEBNER.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
G1: X^2*Y+Y^2+1;
G2: X*Y^2+X-1;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
EL PRIMER S-POLINOMIO.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G1,G2,[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
poly_pseudo_divide(S,[G1,G2],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
COMO TIENE RESTO NO NULO, DEBEMOS INCORPORARLO AL SISTEMA DE GENERADORES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
G3: S;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
SEGUIMOS CALCULANDO S-POLINOMIOS.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G1,G3,[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
poly_pseudo_divide(S,[G1,G2,G3],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
OTRO QUE TENEMOS QUE INCORPORAR AL SISTEMA DE GENERADORES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
G4: S;
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G1,G4,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
EN ESTE CASO EL RESTO ES CERO, LUEGO NO VARIAMOS EL SISTEMA DE GENERADORES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
S4: poly_s_polynomial(G2,G3,[X,Y]);
poly_pseudo_divide(S4,[G1,G2,G3,G4],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
UN NUEVO ELEMENTO PARA EL SISTEMA DE GENERADORES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
G5: Y^5+2*Y^3+Y-X+1;
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G2,G4,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G2,G5,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
UN NUEVO ELEMENTO PARA EL SISTEMA DE GENERADORES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
G6: Y^7+3*Y^5+3*Y^3+Y^2+Y;
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G2,G6,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G1,G5,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G1,G6,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
UN NUEVO ELEMENTO PARA EL SISTEMA DE GENERADORES.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
G7: Y^6+3*Y^4+3*Y^2+Y+1;
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G1,G7,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G2,G7,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G3,G4,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G3,G5,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G3,G6,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G3,G7,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G4,G5,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G4,G6,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G4,G7,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G5,G6,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G5,G7,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
S: poly_s_polynomial(G6,G7,[X,Y]);
poly_pseudo_divide(S,[G1,G2,G3,G4,G5,G6,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
TENEMOS ENTONCES UNA BASE DE GROEBNER FORMADA POR LOS POLINOMIOS G1,G2,G3,G4,G5,G6,G7.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
PODÍAMOS HABER OBTENIDO UNA BASE DE GROEBNER DE FORMA INMEDIATA MEDIANTE LA ORDEN:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_grobner([G1,G2],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
O BIEN UNA BASE DE GROEBNER REDUCIDA.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_reduced_grobner([G1,G2],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
VEAMOS COMO ESTUDIAR LA PERTENENCIA DE UN POLINOMIO A UN IDEAL.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
CONSIDERAMOS EL CASO DEL POLINOMIO Y EL IDEAL GENERADO POR G1 Y G2.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
H: X^2+Y*X^3;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
ESTUDIAMOS QUE OCURRE AL DIVIDIRLO POR EL CONJUNTO DE GENERADORES {G1,G2}.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_pseudo_divide(H,[G1,G2],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
COMPROBAMOS QUE LA DIVISIÓN SE HA REALIZADO CORRECTAMENTE.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_expand(X*G1-G2+(X^2-1),[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
VEMOS QUE EL RESTO NO ES CERO, PERO ESTO NO NOS ASEGURA QUE H NO PERTENEZCA AL IDEAL
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
PARA COMPROBAR QUE H NO PERTENECE AL IDEAL TENEMOS QUE TRABAJAR CON UNA BASE DE GROEBNER.
EN ESTE CASO TOMAMOS LA BASE DE GROEBNER REDUCIDA {G5,G7}.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_pseudo_divide(H,[G5,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
AHORA SÍ PODEMOS AFIRMAR QUE H NO PERTENECE AL IDEAL.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
VEAMOS EL CASO DEL POLINOMIO G7. SABEMOS QUE PERTENECE AL IDEAL,
SIN EMBARGO AL HACER LA DIVISIÓN POR {G1,G2} EL RESTO NO ES CERO.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_pseudo_divide(G7,[G1,G2],[X,Y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
AL HACER LA DIVISIÓN POR {G5,G7} EL RESTO ES CERO, DE DONDE SE DEDUCE QUE G7 PERTENECE AL IDEAL.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
poly_pseudo_divide(G7,[G5,G7],[X,Y]);
/* [wxMaxima: input end ] */
/* Maxima can't load/batch files which end with a comment! */
"Created with wxMaxima"$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment