On 2018-12-05 11:07, Dima Pasechnik wrote: >>>> For integrating a polynomial over a polyhedron LattE is used but if the >>>> dimension is not full, then it is not implemented, see >>>> >>>> sage: x, y = polygens(QQ, 'x, y') >>>> sage: P = Polyhedron(vertices=[[0,0],[1,1]]) >>>> sage: P.integrate(x*y) # optional - latte_int >>>> Traceback (most recent call last): >>>> ... >>>> NotImplementedError: The polytope must be full-dimensional. >>>> [...] >>> >>> you need an orthonormal transformation, thus potentially square roots, >>> if you just want to move over to >>> P.affine_hull() and integrate there. >> [...] > I suppose that in fact everything needed is actually available in Sage > already, just not connected together. Indeed, > (A,b)=P.affine_hull(as_affine_map=True, orthogonal=True) > gives the rational change of coordinates, > and so all you need is to use (A,b) to construct a ring homomorphism from > R[x,y] to R[t], apply it to the integrand, integrate the result over > P.affine_hull(orthogonal=True) # hopefully it would use the same (A,b) > and scale the result by something like the square root of det(AA^T).
Why is it of importance that the transformation is orthogonal? (or is it just a technical restriction as otherwise no matrix is returned at the moment?) > I'd actually propose to add an option to P.affine_hull() to give the caller > both A,b and the resulting polytope. +1 > And perhaps there is a 1-line way to construct the ring homomorphism, too > (there should be one like this, anyway). Would be interesting to know if there is a shortcut for this. Best, Daniel -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.