#19405: Add lyapunov_rank() method for polyhedral cones
-------------------------------------+-------------------------------------
       Reporter:  mjo                |        Owner:
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-6.10
      Component:  geometry           |   Resolution:
       Keywords:                     |    Merged in:
        Authors:  Michael Orlitzky   |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/novoselt/ticket/19405            |  d01c7ab1915d95178b44c2d42f43228ca7affdc2
   Dependencies:  #19368             |     Stopgaps:
-------------------------------------+-------------------------------------
Changes (by mjo):

 * commit:  30ea08309c5a63d864c05e5267a35c3a4090c85d =>
     d01c7ab1915d95178b44c2d42f43228ca7affdc2


Comment:

 Replying to [comment:18 novoselt]:
 > `REFERENCES:` block in `lyapunov_rank` should be reformatted perhaps? Or
 is there a reason why some entries are in Spinx notation and others are
 not?

 The docbuild process throws a fit about duplicate references -- those two
 appear as references to `discrete_complementarity_set()` and
 `lyapunov_like_basis()`. That leaves two bad choices: decide it's okay for
 your build system to spit out big red errors, or mess up the formatting of
 the references block. I flipped a coin.


 > Not for this ticket - couldn't you use this more efficient algorithm for
 computing the Lyapunov basis as well? I.e. compute it for the restriction
 and then modify appropriately to account for the space and trivial
 factors?

 Probably =)

 Any closed convex cone `K` is isomorphic to a cartesian product of three
 factors:

 1. `K.solid_restriction().strict_quotient()`
 2. `K.linear_subspace()`
 3. The trivial cone in `K.span().complement()`

 Suppose some matrix `A` sends the cone `K` to this nice representation as
 a product. If we let `L` be a 3x3 block matrix, then you can figure out
 what the entries should be if `L` is to be Lyapunov-like on `A(K)`. That's
 basically what I did in Lemma 1 in the paper, but then I threw away some
 information and just counted dimensions.

 The block entries of `L` will be one of three things:

 1. Lyapunov-like transformations on
 `K.solid_restriction().strict_quotient()`
 2. Zero
 3. Arbitrary

 You can fill them in with some coordinate juggling. Afterwards,
 Proposition 5 shows you how to get back in terms of `K`: simply conjugate
 by the matrix `A` that put `K` into the nice cartesian product. The only
 complications I see are aesthetic.

 And I told you this boring story... so that I would have a good example
 below!


 > I think it would be better to have `solid_restriction` return the
 original cone if it is already solid. The amount of time required for the
 check is not much compared to constructing a new cone and the advantages
 are common sense and being able to reuse all cached data. My version of
 changes are posted.

 The problem I foresee with this is that it gives you different behavior
 for solid/nonsolid cones. If `K` is solid, you'll get its representation
 in one basis, but if it's not, you'll get it in another basis.

 Suppose I actually wanted to implement the fast `lyapunov_like_basis`
 algorithm above. I would need to know which change-of-basis occurs when I
 call `K.solid_restriction()`, because I would eventually need to do a
 conjugation involving it. But the change-of-basis depends on whether or
 not `K` was solid to begin with.

 In similar cases where you need to know what happened in
 `solid_restriction()`, you'll need to prefix that call with `if
 K.solid()...`, duplicating the check inside the method. Two possible
 behaviors inside the function forces two possible responses outside it.


 Everything else looks fine, tests pass, etc.

 ----
 New commits:
 
||[http://git.sagemath.org/sage.git/commit/?id=d01c7ab1915d95178b44c2d42f43228ca7affdc2
 d01c7ab]||{{{Reviewer tweaks.}}}||

--
Ticket URL: <http://trac.sagemath.org/ticket/19405#comment:20>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to