Changeset e2f3ad in git
- Timestamp:
- Aug 18, 2022, 1:44:44 PM (21 months ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- d0731c963230ccafabf460a89208f06831979612
- Parents:
- cd8a89918073438ccbaf9e823dda24cf8ab16709
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/sagbi.lib
rcd8a899 re2f3ad 1255 1255 setring DI; algDep; 1256 1256 */ 1257 1258 proc minimalGenerators(ideal a, list #) 1259 "USAGE: minimalGenerators(id[,w]); id ideal, w: weight vector. 1260 RETURN: ideal (list of minimal generators of the subalgebra a) 1261 EXAMPLE: example minimalGenerators; shows an example" 1262 { 1263 if(!homog(a)) 1264 { 1265 ERROR("generators must be homogeneous"); 1266 } 1267 ring br=basering; 1268 intvec w; 1269 if (size(#)==0) { w=1:nvars(basering); } 1270 else { w=#[1]; } 1271 int elems=size(a); 1272 int j; ideal ad; poly p; ideal sb; ideal mingen; ideal h; 1273 for (int d=0;elems>0;d++) 1274 { 1275 ad=jet(jet(a,d,w),-d,-w); // degree d part of a 1276 if (size(ad)>0) 1277 { 1278 "sagbi for deg ",d-1;sb; 1279 "testing deg ",d; 1280 "ad=",ad; 1281 for(j=1;j<=ncols(ad);j++) // 2.1 1282 { 1283 if (ad[j]!=0) 1284 { 1285 p=sagbiReduce(ad[j],sb); 1286 "reduced:",p; 1287 if(p==0) { a[j]=0; "a[",j,"] not needed"; } 1288 else 1289 {"min gen",j," = ",p; 1290 sb=sb,p; 1291 mingen=mingen,p; 1292 } 1293 elems--; 1294 } 1295 } 1296 } 1297 h=relations_apply(sb,a); // 2.3 1298 h=jet(jet(h,d+1,w),-d-1,w); // deg d+1 part 1299 "rel. in deg ",d+1," =",h; 1300 for(j=1;j<=ncols(h);j++) // 2.4 1301 { 1302 h[j]=sagbiReduce(h[j],sb); 1303 } 1304 sb=sb,h; // 2.5 1305 sb=simplify(sb,2); // 2.6 1306 } 1307 "sb=",sb; 1308 return(simplify(a,2)); 1309 } 1310 example 1311 { 1312 "EXAMPLE:";echo=2; 1313 ring r= 0,(a0,a1,a2),dp; 1314 ideal A=a0,a1*a2-a0*a1+a0*a2,a1^2-a2^2+a0*a1,a1^3-a0*a2^2; 1315 A=A,A[1]*A[4]+A[2]*A[3]; 1316 minimalGenerators(A); 1317 } 1318 1319 proc relations_apply(ideal s, ideal a) 1320 { 1321 ideal ls=lead(s); 1322 // new vars, #=ncols(s) 1323 ring savering=basering; 1324 ring d1=0,(y(1..ncols(a))),dp; 1325 def e1=d1+savering; 1326 setring e1; 1327 ideal ls=imap(savering,ls); 1328 poly m=1; 1329 for(int i=1;i<=nvars(savering);i++) 1330 { m=m*var(i+nvars(d1)); } 1331 for(i=1;i<=ncols(ls);i++) 1332 { 1333 if (ls[i]!=0) 1334 { 1335 ls[i]=ls[i]-y(i); 1336 } 1337 } 1338 ls=eliminate(ls,m); // eliminate original vars from ls 1339 "orig rel:",ls; 1340 // apply the relations 1341 setring savering; 1342 // image of map; 1343 ideal im; 1344 im[nvars(savering)]=0; 1345 im=im,a; 1346 // map: 1347 map f=e1,im; 1348 // apply relations 1349 ideal rel=f(ls); 1350 "Relations:",rel; 1351 return(rel); 1352 } 1353
Note: See TracChangeset
for help on using the changeset viewer.