Ask Your Question
1

Constant coefficient of Laurent Polynomials

asked 2016-11-27 00:35:11 +0200

Ed Cal gravatar image

updated 2016-11-27 11:42:56 +0200

tmonteil gravatar image

I am looking for the constant coefficient of a Laurent polynomial, the issue I am having is that sage is not simplifying the polynomial.

An example:

a = var(",".join( "a%i" %i for i in range(0, 6)))
f = x*y + 1.00000000000000*a6*x + 1.00000000000000*a4*y + x*y^-1 + x^-1*y + 1.00000000000000*a3*y^-1 + 1.00000000000000*a1*x^-1 + x^-1*y^-1

Then I ask

f/(x^1*y^0)  #  (The powers have to be in this way, just from the context of the work I am doing)

and it outputs:

1.00000000000000/x*x*y + 1.00000000000000*a6/x*x + 1.00000000000000*a4/x*y + 1.00000000000000/x*x*y^-1 + 1.00000000000000/x*x^-1*y + 1.00000000000000*a3/x*y^-1 + 1.00000000000000*a1/x*x^-1 + 1.00000000000000/x*x^-1*y^-1

Now when I ask for the constant coefficient of this LP it tells me its 0 when it is a6.

How can I fix this.

Thanks in advance

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
2

answered 2016-11-27 12:16:43 +0200

tmonteil gravatar image

updated 2016-11-27 13:53:40 +0200

First, you are working with symbolic expressions, which is a very fuzzy place. Since your objects are of algebraic nature and Sage is good at it, let us work there.

In your description, there is no difference between x and a6, they are all symbols, at equality. If you agree that the constant coefficient of 3*x+y+1 is 1, then you should agree that the constant coefficient of 3*x+a6+1 is 1, not a6+1.

How to make x and y the undeterminates of your laurent polynomial, and let the ai be part or the coefficients ?

Just define the laurent polynomial ring in x,y on the ring which is the polynomial ring with indeterminates a0,....,a6 over QQ:

sage: R = PolynomialRing(QQ,'a',7); R
Multivariate Polynomial Ring in a0, a1, a2, a3, a4, a5, a6 over Rational Field
sage: R.inject_variables()
Defining a0, a1, a2, a3, a4, a5, a6

sage: L = LaurentPolynomialRing(R,['x','y']) ; L
Multivariate Laurent Polynomial Ring in x, y over Multivariate Polynomial Ring in a0, a1, a2, a3, a4, a5, a6 over Rational Field
sage: L.inject_variables()
Defining x, y

Now, you can do:

sage: f = x*y + a6*x + a4*y + x*y^-1 + x^-1*y + a3*y^-1 + a1*x^-1 + x^-1*y^-1 ; f
x*y + a6*x + a4*y + x*y^-1 + x^-1*y + a3*y^-1 + a1*x^-1 + x^-1*y^-1
sage: f.parent()
Multivariate Laurent Polynomial Ring in x, y over Multivariate Polynomial Ring in a0, a1, a2, a3, a4, a5, a6 over Rational Field

sage: g = f/(x^1*y^0) ; g
y + a6 + a4*x^-1*y + y^-1 + x^-2*y + a3*x^-1*y^-1 + a1*x^-2 + x^-2*y^-1
sage: g.parent()
Multivariate Laurent Polynomial Ring in x, y over Multivariate Polynomial Ring in a0, a1, a2, a3, a4, a5, a6 over Rational Field

sage: g.constant_coefficient()
a6

I used the field of rationals QQ for the base ring of the polynomial ring R, but if you want floating-point numbers (as you wrote 1.00000000000000), you replace it by the real double field RDF.

edit flag offensive delete link more

Comments

Thanks, this explains both how to fix and why it was not working which is what I wanted. I thought the fact that a6 was not a variable in my ring was implicit but evidently not. Thanks.

Ed Cal gravatar imageEd Cal ( 2016-11-28 09:28:50 +0200 )edit
2

answered 2016-11-27 12:23:33 +0200

castor gravatar image

You may try the following:

a = var(",".join( "a%i" %i for i in range(0, 7)))
R.<x,y> = LaurentPolynomialRing(SR,2)
f = x*y + a6*x + a4*y + x*y^-1 + x^-1*y + a3*y^-1 + a1*x^-1 + x^-1*y^-1
(f/(x^1*y^0)).constant_coefficient()

It gives a6 as you expect and e.g.

 (f/(x^0*y^1)).constant_coefficient()

is equal to a4. Also you can determine the coefficient of any monomial:

(f/(x^0*y^1)).coefficient(x^-1*y^-2)

is 1.

edit flag offensive delete link more

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: 2016-11-27 00:35:11 +0200

Seen: 610 times

Last updated: Nov 27 '16