Computes values of the Hilbert function of the image of a variety, by numerical interpolation. This technique circumvents the calculation of the kernel of the associated ring map.
In order to speed up computation, the list S of points can be precomputed (see numericalImageSample). This list of points can then be re-used in multiple interpolation computations (which can yield a dramatic speedup over performing separate sampling instances, if the ideal I is not the zero ideal).
We compute the number of quartics in the ideal of the twisted cubic to be 22. One can verify this by inspection as follows: quartics in the coordinate ring pull back to forms of degree 12 on P1, of which there are 13; thus there are 35 - 13 = 22 quartics in the defining ideal.
i1 : R = CC[s,t]; |
i2 : F = {s^3,s^2*t,s*t^2,t^3}; |
i3 : numericalHilbertFunction(F, ideal 0_R, 4) -- warning: experimental computation over inexact field begun -- results not reliable (one warning given per session) Sampling image points ... -- used 0.0362432 seconds Creating interpolation matrix ... -- used 0.0280343 seconds Performing normalization preconditioning ... -- used 0.0129281 seconds Computing numerical kernel ... -- used 0.00131141 seconds o3 = a numerical interpolation table, indicating the number of degree 4 forms in the ideal of the image is 22 o3 : NumericalInterpolationTable |
The following computes the number of Plücker quadrics in the defining ideal of the Grassmannian Gr(3,5) of P2’s in P4.
i4 : R = CC[x_(1,1)..x_(3,5)]; |
i5 : F = (minors(3, genericMatrix(R, 3, 5)))_*; |
i6 : S = numericalImageSample(F, ideal 0_R, 60); |
i7 : numericalHilbertFunction(F, ideal 0_R, S, 2) Creating interpolation matrix ... -- used 0.0562349 seconds Performing normalization preconditioning ... -- used 0.0436519 seconds Computing numerical kernel ... -- used 0.00341658 seconds o7 = a numerical interpolation table, indicating the number of degree 2 forms in the ideal of the image is 5 o7 : NumericalInterpolationTable |
The option Threshold specifies the minimal gap (= ratio of consecutive singular values) for determining the numerical rank of a matrix. If the largest gap is greater than this threshold, then all singular values after the largest gap are considered as numerically zero; if all gaps are less than this threshold, then the matrix is considered numerically full rank. The default value is 200.
The option Threshold may require tuning by the user. If the value of Threshold is too small, the numerical rank may be smaller than the true rank (and vice versa if the value of Threshold is too large).