X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Fcone%2Fschur.py;h=53607a948ef26a3cb9f5fae2d86c8d895a4fab71;hb=7b8b7a41b839e1a0180ba0a4f7506dcc655b51e9;hp=3903b2bc8e346aa824c93d5acb14ad5efa6613de;hpb=3de09687eda60668146db73602d368be4ef4f853;p=sage.d.git diff --git a/mjo/cone/schur.py b/mjo/cone/schur.py index 3903b2b..53607a9 100644 --- a/mjo/cone/schur.py +++ b/mjo/cone/schur.py @@ -19,6 +19,11 @@ def schur_cone(n): REFERENCES: + .. [GourionSeeger] Daniel Gourion and Alberto Seeger. + Critical angles in polyhedral convex cones: numerical and + statistical considerations. Mathematical Programming, 123:173-198, + 2010, doi:10.1007/s10107-009-0317-2. + .. [IusemSeegerOnPairs] Alfredo Iusem and Alberto Seeger. On pairs of vectors achieving the maximal angle of a convex cone. Mathematical Programming, 104(2-3):501-523, 2005, @@ -40,13 +45,24 @@ def schur_cone(n): sage: P = schur_cone(5) sage: Q = nonnegative_orthant(5) - sage: G = [ g.change_ring(QQbar).normalized() for g in P ] - sage: H = [ h.change_ring(QQbar).normalized() for h in Q ] - sage: actual = max([arccos(u.inner_product(v)) for u in G for v in H]) + sage: G = ( g.change_ring(QQbar).normalized() for g in P ) + sage: H = ( h.change_ring(QQbar).normalized() for h in Q ) + sage: actual = max(arccos(u.inner_product(v)) for u in G for v in H) sage: expected = 3*pi/4 sage: abs(actual - expected).n() < 1e-12 True + The dual of the Schur cone is the "downward monotonic cone" + [GourionSeeger]_, whose elements' entries are in non-increasing + order:: + + sage: set_random_seed() + sage: n = ZZ.random_element(10) + sage: K = schur_cone(n).dual() + sage: x = K.random_element() + sage: all( x[i] >= x[i+1] for i in xrange(n-1) ) + True + TESTS: We get the trivial cone when ``n`` is zero:: @@ -59,7 +75,7 @@ def schur_cone(n): sage: set_random_seed() sage: def majorized_by(x,y): ....: return (all(sum(x[0:i]) <= sum(y[0:i]) - ....: for i in range(x.degree()-1)) + ....: for i in xrange(x.degree()-1)) ....: and sum(x) == sum(y)) sage: n = ZZ.random_element(10) sage: V = VectorSpace(QQ, n)