On Jul 8, 2:38 pm, David Sanders <[email protected]> wrote:
> Hi,
>
> I am trying to extract part of a symbolic expression.
> The expression -- an eigenvalue of a matrix -- has the form
>
> A + B*sqrt(C)
>
> where A, B and C are themselves complicated symbolic expressions.
>
> I wish to extract the subexpression C from this to test where the
> eigenvalues change type (where C==0).
>
> By using introspection and the help (both excellent features!), I
> stumbled across one possible solution, using iterator. But it's very
> fussy: I have to do something like:
>
> var('A B C')
> eigval = A + B*sqrt(C)
> terms = list( eigval.iterator() )
> first = terms[0]
> terms2 = list(first.iterator())
> desired = list(terms2[1].iterator())[0]
>
> to extract the part I want into the variable "desired"
>

I don't know if this would be better, but...

sage: eigval
B*sqrt(C) + A
sage: eigval.operands()[0].operands()[1].operands()[0]
C

At least it is using the things specific to symbolic expressions.

> To me it would seem more intuitive to use indexing directly on the
> expression, to be able to do something like
>
> eigval[0][1][0]
>
> which is similar to what is available in Mathematica, for example, but
> this doesn't work, since apparently indexing is not defined for
> symbolic expressions. (Couldn't it be defined to have exactly this
> functionality?)

This seems intriguing, but I have no idea if it's possible.

- kcrisman

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to