---------------------------------------- -- Trace Form ---------------------------------------- -- Abraham Martin del Campo -- 25 Abr 2016 ---------------------------------------- R = QQ[x,y,z]; I = ideal( z^2+1/5*x-1/5*y+2/25, y^2-1/5*x+1/5*z+2/25, x^2+1/5*y-1/5*z+2/25, x*y+x*z+y*z+1/25 ); dim I -- verificamos que I tiene dimension 0 InI = ideal leadTerm I -- el ideal inicial y vemos que I es Base de Grobner M = R/InI -- creamos el cociente, o sea, el anillo coordenado B = basis M -- la base de monomios estandar d = numColumns B; Br = sub(B,R) -- podemos considerar los monomios estandar como elementos de R use R; -- necesitamos cambiar de anillo, porque ahora estabamos usando R/I xB = transpose Br * Br xB = flatten entries xB; --lo convertimos en una lista m = xB_8 T1 = apply(xB, m->( mB := first entries (m * Br); L := apply(mB, f -> f%I); LL := matrix{L}; (Mb, Cb) = coefficients(LL, Monomials=>first(entries(Br))); trace Cb )); T1 = matrix pack(d,T1) eigenvalues sub(T1,QQ) S = QQ[t]; charPol = det (t*id_(S^d) - sub(T1,S)) p = charPol; p1 = diff(t,p) P = {p,p1}; residuo = 1; while residuo > 0 do( k = #P; residuo = -1*( P#(k-2) % P#(k-1)); P = append(P,residuo); ) P = drop(P,-1); -- para ver cuantas raices reales positivas tenemos -- necesitamos tomar los coeficientes iniciales de P varP = apply(P, p-> leadCoefficient p); sub(P_5, {t=>-t}) varPminus = apply(P, p-> leadCoefficient(sub(p, {t=>-t}))); var = P ->( signchange := 0; T := delete(0_QQ,P); for i from 0 to #T-2 do( if T#i*T#(i+1)<0 then ( signchange = signchange+1; ) ); return signchange ) -- del Teorema de Sturm tenemos que var varPminus - var varP -- por lo tanto hay 19 raices reales quit;