---------------------------------------- -- Sturm Sequence ---------------------------------------- -- Abraham Martin del Campo -- 17 Abr 2016 ---------------------------------------- R = QQ[x]; p = 5*x^6-4*x^5-27*x^4+55*x^2-6 p1 = diff(x,p) p2 = -p % p1 p3 = -p1 % p2 P = {p,p1}; residuo = 1; while residuo > 0 do( k = #P; residuo = -1*( P#(k-2) % P#(k-1)); P = append(P,residuo); ) P -- P tiene un ultimo 0 que no es parte de la sucesion P = drop(P,-1) -- asi se lo quitamos -- veamos todos los elementos de la sucesion scan(P, p -> << p<0}) ) -- VarP0 = Var(P,0) = 4 -- ahora evaluemos la sucesion en x = 2 P2 = apply(P, p-> sub(p,{x=>2})) --esta es una manera compacta de hacer el for loop -- podemos hacer una funcion que nos calcule la variacion 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 ) var P0 var P2 -- El teorema de Sturm nos dice que p tiene -- 4 - 2 = 2 raices reales en el intervalo (0,2)