On 2013-04-01, tvn <[email protected]> wrote:
> ------=_Part_2931_5871514.1364827746074
> Content-Type: text/plain; charset=ISO-8859-1
>
>
>
>> >> In sympy there's a method call as_coeffficients_dict() that returns
>> all
>> >> the terms and their coefficients from an expression. I am if I can do
>> >> something like this in Sage.
>> > you can do a similar thing, except that the monomials are encoded by
>> > their exponents
>> >
>> > sage: R.<x,a> = ZZ[]
>> > sage: p=x^2*a-a^2+a-4
>>
>> Note that this is not a symbolic expression, but a "proper" polynomial.
>> But the original question was about symbolic expressions. Perhaps the
>> original poster has a reason for using symbolic expressions?
>>
>
> Right, my question is on expressions. That's how I store my data. In
> short, I just want something that is like Sympy's as_coefficients_dict for
> expressions (I've put its documentation at the end of this msg). However,
> based on Dima's feedbacks above, I've written something like this for the
> input expression p
>
> vs = p.variables()
> pr_p = PolynomialRing(ZZ,vs, None if len(vs) > 1 else 1)(p)
> cs = pr_p.coefficients()
> ts = map(SR, pr_p.monomials())
> return cs,ts
>
>
>
>
>
>
>>
>> Perhaps the following does what is requested?
>> sage: var('x','a')
>> (x, a)
>> sage: b = (3*x + a*x + 4)
>> sage: b.operands()
>> [a*x, 3*x, 4]
>>
>> It would probably not be too dificult to extract the constant
>> coefficient of each operand.
>>
>
>
> How do I do get the coefficients of these operands ?
something like this:
sage: b = (3*x^2 + a*x + 4)
sage: [t.coeffs(x) for t in b.operands()]
[[[a, 1]], [[3, 2]], [[4, 0]]]
>
>
>
>
>>
>> It all depends on what answer you would expect. Say, if you present an
>> equal polynomial symbolic expression by
>> sage: c = (3+a)*x + 4
>> Then you get
>> sage: c.operands()
>> [(a + 3)*x, 4]
>>
> Is this what you want? Or do you want that an automatic expansion into a
>
>> sum takes place? In this case it might really be better to use
>> polynomials.
>>
>
>
> I don't need automatic expansion, if the input is (3+a)*x + 4, then I want
> the output to be something like what sympy's as_coefficients_dict() would
> give
>
> In [44]: ((3+x)*y+4).as_coefficients_dict()
> Out[44]: defaultdict(<type 'int'>, {1: 4, y*(x + 3): 1})
>
>
>
>
> Doc of sympy's as_coefficients_dict()
>
>
> Return a dictionary mapping terms to their Rational coefficient.
> Since the dictionary is a defaultdict, inquiries about terms which
> were not present will return a coefficient of 0. If an expression is
> not an Add it is considered to have a single term.
>
> Examples
> ========
>
> >>> from sympy.abc import a, x
> >>> (3*x + a*x + 4).as_coefficients_dict()
> {1: 4, x: 3, a*x: 1}
> >>> _[a]
> 0
> >>> (3*a*x).as_coefficients_dict()
> {a*x: 3}
>
>
>
>
>
>> Cheers,
>> Simon
>>
>>
>>
>
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-support?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.