Ask Your Question
0

How do I iterate through factors of a monomial?

asked 12 years ago

Ilya gravatar image

updated 12 years ago

I am (very naively) trying to implement a certain non-linear map of polynomial rings. I can get the monomials in a polynomial by simply iterating through a polynomial:

>>> R.<x,y,z>=QQ[]
>>> list(x*y^3 + 2*x*y)
[(1, x*y^3), (2, x*y)]

How do I now iterate through the factors of each monomial, i.e. convert x*y^3 into something like [(x, 1), (y, 3)] or even just [x, y, y, y]?

Also, what is the correct way to do the opposite conversion, i.e. [x, y, y, y] to x*y^3?

I hope you won't be offended by such newbie questions. I couldn't find this in any of the tutorials easily (did I miss the right one?) Thank you!

Preview: (hide)

2 Answers

Sort by » oldest newest most voted
1

answered 12 years ago

achrzesz gravatar image
R.<x,y,z>=QQ[]
[u for u in factor(x*y^3)]
#[(x, 1), (y, 3)]
Preview: (hide)
link

Comments

1

`list(factor(x*y^3))` also works.

Eviatar Bach gravatar imageEviatar Bach ( 12 years ago )

This works, thank you!

Ilya gravatar imageIlya ( 12 years ago )
3

answered 12 years ago

Eviatar Bach gravatar image

updated 12 years ago

Not offended at all! I didn't know about this myself until now.

This works:

sage: (x*y^3).factor_list()
[(x, 1), (y, 3)]
sage: mul([x, y, y, y])
x*y^3

And, if you want to go from the factor list to the expression:

sage: a = (x*y^3).factor_list()
sage: mul(t^m for t, m in a)
x*y^3

Hope this helps!

Preview: (hide)
link

Comments

1

I think something like `mul(t^m for t,m in a)` is simpler.

DSM gravatar imageDSM ( 12 years ago )

Yes, you're right. I changed it.

Eviatar Bach gravatar imageEviatar Bach ( 12 years ago )

Thank you very much, don't know how long I'd be looking for it without your help. However, I have to do `list((x*y^3).factor())`. For some reason, `(x*y^3).factor_list()` gives an error ('sage.rings.polynomial.multi_polynomial_libsingular.MPolynomial_libsingu\ lar' object has no attribute 'factor_list').

Ilya gravatar imageIlya ( 12 years ago )

I see it has to do with `R.<x,y,z>=QQ[]`. Looks like a bug.

Eviatar Bach gravatar imageEviatar Bach ( 12 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 12 years ago

Seen: 1,250 times

Last updated: Jun 10 '12