-- MATH 531: Nov 1. -- Computing resultants. DN = (R,degs) -> ( n := numgens R - 1; XD := apply(n+1, i->R_i^(degs_i)); d := sum(degs) - n; rp := (sum(first entries vars R))^d; MD := first entries first coefficients rp; S := apply(n+1, i->( divByXDi := select(MD, m->m%XD_i==0); MD = select(MD, m->m%XD_i!=0); divByXDi )); -- create new ring (indeterminate coefficients) monoms:= apply(degs, d->( rp := (sum(first entries vars R))^d; first entries first coefficients rp )); a := symbol a; C := QQ[flatten apply(#monoms, i->apply(monoms_i, m->a_{i,m}))]; CR := C[first entries vars R]; F := apply(n+1, i->sum(monoms_i, m->a_{i,m}*sub(m,CR))); G := flatten apply(n+1, i->apply(S_i, m->sub(m//(XD_i),CR)*F_i)); M := (coefficients transpose matrix{G})#1; sub(det M, C) ) MacMinor = (R,degs) -> ( n := numgens R - 1; XD := apply(n+1, i->R_i^(degs_i)); d := sum(degs) - n; rp := (sum(first entries vars R))^d; MD := first entries first coefficients rp; S := apply(n+1, i->( divByXDi := select(MD, m->m%XD_i==0); MD = select(MD, m->m%XD_i!=0); divByXDi )); -- create new ring (indeterminate coefficients) monoms:= apply(degs, d->( rp := (sum(first entries vars R))^d; first entries first coefficients rp )); a := symbol a; C := QQ[flatten apply(#monoms, i->apply(monoms_i, m->a_{i,m}))]; CR := C[first entries vars R]; F := apply(n+1, i->sum(monoms_i, m->a_{i,m}*sub(m,CR))); G := flatten apply(n+1, i->apply(S_i, m->sub(m//(XD_i),CR)*F_i)); M := (coefficients transpose matrix{G})#1; -- Macaulay minor MD = first entries first coefficients rp; nonredMD := select(toList(0..#MD-1), i->#select(XD, xd->MD_i%xd==0)>1); flatS := flatten S; nonredS := select(toList(0..#flatS-1), i->#select(XD, xd->flatS_i%xd==0)>1); MacM := submatrix(M, nonredS, nonredMD); det sub(MacM,C) ) /// restart M2dir = "/home/x/leykin/M2/" load (M2dir|"lab9.m2") -- General approach (tested on Res_{1,1,2}) R = QQ[x,y,z]; degs = {1,1,2}; D = DN(R,degs) -- Macaulay's idea D' = MacMinor(R,degs) Res112 = D//sub(D',ring D) -- Compute the resultant Res_{1,2,2} R = QQ[x,y,z]; degs = {1,2,2}; D = DN(R,degs) -- Macaulay's idea D' = MacMinor(R,degs) Res112 = D//sub(D',ring D) -- Res_{2,2,2} ...computations fail... ///