This function uses a modified Buchberger-Moeller algorithm to compute a grobner basis for the ideal of a finite number of fat points in affine space.
i1 : R = QQ[x,y] o1 = R o1 : PolynomialRing |
i2 : M = transpose matrix{{0,0},{1,1}} o2 = | 0 1 | | 0 1 | 2 2 o2 : Matrix ZZ <--- ZZ |
i3 : mults = {3,2} o3 = {3, 2} o3 : List |
i4 : (Q,inG,G) = affineFatPoints(M,mults,R) 2 2 3 2 4 2 3 3 5 2 o4 = ({1, y, x, y , x*y, x , y , x*y , y }, ideal (x y, x , x*y , y ), {x y - ------------------------------------------------------------------------ 2 3 3 2 3 3 4 2 3 5 4 3 2x*y + y , x - 3x*y + 2y , x*y - y - x*y + y , y - 2y + y }) o4 : Sequence |
i5 : monomialIdeal G == inG o5 = true |
This algorithm may be faster than computing the intersection of the ideals of each fat point.
i6 : K = ZZ/32003 o6 = K o6 : QuotientRing |
i7 : R = K[z_1..z_5] o7 = R o7 : PolynomialRing |
i8 : M = random(K^5,K^12) o8 = | 107 -5307 10359 -6203 8231 9534 6230 13177 10866 -5326 1031 | 4376 8570 -7464 12365 5864 -7216 9033 13990 5398 2998 -2036 | -5570 -15344 -8251 -13508 5026 -10125 5107 -11521 5549 5679 -6325 | 3187 8444 2653 -9480 10259 7256 -3996 -1309 -7061 -7152 -11740 | 3783 -10480 5071 -11950 -7501 -5321 9398 -1779 2627 15317 -6922 ------------------------------------------------------------------------ -5080 | 1236 | 8922 | -5006 | 8880 | 5 12 o8 : Matrix K <--- K |
i9 : mults = {1,2,3,1,2,3,1,2,3,1,2,3} o9 = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3} o9 : List |
i10 : elapsedTime (Q,inG,G) = affineFatPoints(M,mults,R); -- 1.59663 seconds elapsed |
i11 : elapsedTime H = affineFatPointsByIntersection(M,mults,R); -- 7.22474 seconds elapsed |
i12 : G==H o12 = true |
For reduced points, this function may be a bit slower than affinePoints.
The object affineFatPoints is a method function.