In that case, just use expr.coeff(t, n). Aaron Meurer
On Wed, Nov 28, 2012 at 7:22 PM, Shriramana Sharma <[email protected]> wrote: > On Wed, Nov 28, 2012 at 9:18 AM, ThanhVu Nguyen > <[email protected]> wrote: >> >> I am wondering how to obtain the coefs and terms of a given expression in >> sympy. For example, given the expression a**2+b+5*c+2, I want to get the >> coefs [1,1,5,2] and the terms [a^2,b,c,1]. > > As a related question, recently I needed to extract the coefficient in > a polynomial of t of a particular power of t: > > t**12*Ra(6)**2 + 2*t**11*Ra(5)*Ra(6) + 2*t**10*Ra(4)*Ra(6) + > t**10*Ra(5)**2 + 2*t**9*Ra(3)*Ra(6) + 2*t**9*Ra(4)*Ra(5) + > 2*t**8*Ra(2)*Ra(6) + 2*t**8*Ra(3)*Ra(5) + t**8*Ra(4)**2 + > 2*t**7*Ra(1)*Ra(6) + 2*t**7*Ra(2)*Ra(5) + 2*t**7*Ra(3)*Ra(4) + > 2*t**6*Ra(0)*Ra(6) + 2*t**6*Ra(1)*Ra(5) + 2*t**6*Ra(2)*Ra(4) + > t**6*Ra(3)**2 + 2*t**5*Ra(0)*Ra(5) + 2*t**5*Ra(1)*Ra(4) + > 2*t**5*Ra(2)*Ra(3) + 2*t**4*Ra(0)*Ra(4) + 2*t**4*Ra(1)*Ra(3) + > t**4*Ra(2)**2 + 2*t**3*Ra(0)*Ra(3) + 2*t**3*Ra(1)*Ra(2) + > 2*t**2*Ra(0)*Ra(2) + t**2*Ra(1)**2 + 2*t*Ra(0)*Ra(1) + Ra(0)**2 > > Given the above polynomial [which is just the expansion of (t**6*Ra(6) > + t**5*Ra(5) + t**4*Ra(4) + t**3*Ra(3) + t**2*Ra(2) + t*Ra(1) + > Ra(0))**2 given some function Ra()] I needed to query it for the > coefficients of t**d for a particular d. From the answer by Aaron > Meurer, it seems I can do: > > Poly(above_polynomial,t).allcoeffs()[-d-1] > > but it is not so elegant, and it also throws an IndexError if I query > for some d greater than the degree of the polynomial whereas ideally a > function something like: Poly.coeff_for_degree(d) would return 0 in > such cases. Is such a function coeff_for_degree available? The input > and output for such a function on the above (squared) polynomial would > be what I got by doing: > >>>> for (p,v) in enumerate(reversed(Poly(mysum,t).all_coeffs())): print(p,v) > 0 Ra(0)**2 > 1 2*Ra(0)*Ra(1) > 2 2*Ra(0)*Ra(2) + Ra(1)**2 > 3 2*Ra(0)*Ra(3) + 2*Ra(1)*Ra(2) > 4 2*Ra(0)*Ra(4) + 2*Ra(1)*Ra(3) + Ra(2)**2 > 5 2*Ra(0)*Ra(5) + 2*Ra(1)*Ra(4) + 2*Ra(2)*Ra(3) > 6 2*Ra(0)*Ra(6) + 2*Ra(1)*Ra(5) + 2*Ra(2)*Ra(4) + Ra(3)**2 > 7 2*Ra(1)*Ra(6) + 2*Ra(2)*Ra(5) + 2*Ra(3)*Ra(4) > 8 2*Ra(2)*Ra(6) + 2*Ra(3)*Ra(5) + Ra(4)**2 > 9 2*Ra(3)*Ra(6) + 2*Ra(4)*Ra(5) > 10 2*Ra(4)*Ra(6) + Ra(5)**2 > 11 2*Ra(5)*Ra(6) > 12 Ra(6)**2 > > Thanks! > > -- > Shriramana Sharma > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > 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/sympy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sympy" group. 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/sympy?hl=en.
