First time here? Check out the FAQ!

Ask Your Question
5

Eigenvalues of matrix with entries in polynomial ring

asked 13 years ago

Anne Schilling gravatar image

updated 6 years ago

slelievre gravatar image

Hi!

I just wrote some code on the sage-combinat queue which computes a matrix with entries in a polynomial ring R = PolynomialRing(QQ, 'x', n)

sage: P = Poset(([1,2,3,4], [[1,3],[1,4],[2,3]]), linear_extension = True)
sage: L = P.linear_extensions()
sage: M = L.markov_chain_transition_matrix(labeling = 'source')
sage: M
[-x0 - x1 - x2            x3       x0 + x3             0             0]
[      x1 + x2 -x0 - x1 - x3             0            x1             0]
[            0            x1      -x0 - x3             0            x1]
[            0            x0             0 -x0 - x1 - x2       x0 + x3]
[           x0             0             0       x0 + x2 -x0 - x1 - x3]
sage: M.eigenvalues()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/Applications/sage-5.0.beta7/devel/sage-combinat/sage/combinat/posets/<ipython console> in <module>()

/Applications/sage-5.0.beta7/local/lib/python2.7/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.eigenvalues (sage/matrix/matrix2.c:26415)()

/Applications/sage-5.0.beta7/local/lib/python2.7/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.fcp (sage/matrix/matrix2.c:11089)()

/Applications/sage-5.0.beta7/local/lib/python2.7/site-packages/sage/rings/polynomial/polynomial_element.so in sage.rings.polynomial.polynomial_element.Polynomial.factor (sage/rings/polynomial/polynomial_element.c:22655)()

NotImplementedError:

Is it possible to compute this some other way or is this just not yet implemented (which would surprise me!).

Thanks,

Anne


Edit (originally posted as an answer by the original poster of the question)

Here is an easier example with the question:

sage: R = PolynomialRing(QQ, 'x', 2)
sage: x = R.gens()
sage: M = matrix([[x[0],x[1]],[x[1],x[0]]])
sage: M.eigenvalues()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/Applications/sage-5.0.beta7/devel/sage-combinat/sage/combinat/posets/<ipython console> in <module>()

/Applications/sage-5.0.beta7/local/lib/python2.7/site-packages/sage/matrix   /matrix2.so in sage.matrix.matrix2.Matrix.eigenvalues (sage/matrix/matrix2.c:26415)()

/Applications/sage-5.0.beta7/local/lib/python2.7/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.fcp (sage/matrix/matrix2.c:11089)()

/Applications/sage-5.0.beta7/local/lib/python2.7/site-packages/sage/rings/polynomial/polynomial_element.so in      sage.rings.polynomial.polynomial_element.Polynomial.factor (sage/rings/polynomial/polynomial_element.c:22655)()

NotImplementedError:
Preview: (hide)

Comments

Just for future reference, this site uses markdown for markup, so indenting everything four spaces makes it look like code (or highlighting and using the "code" button).

kcrisman gravatar imagekcrisman ( 13 years ago )

2 Answers

Sort by » oldest newest most voted
3

answered 13 years ago

DSM gravatar image

updated 6 years ago

nbruin gravatar image

Could you change the ring to SR as a workaround?

sage: R = PolynomialRing(QQ, 'x', 2)
sage: x = R.gens()
sage: M = matrix([[x[0],x[1]],[x[1],x[0]]])
sage: M.eigenvalues()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
[...]
sage: M.change_ring(SR)
[x0 x1]
[x1 x0]
sage: M.change_ring(SR).eigenvalues()
[x0 - x1, x0 + x1]

EDIT: You might want to use K=R.fraction_field() and then do something like M.characteristic_polynomial().change_ring(K).roots(). It doesn't get you the eigenvalues that aren't rational over R, but the answer you get back in SR will not be very useful either.

Preview: (hide)
link

Comments

Thank you! That works! Am I allowed to use this in sage source code?

Anne Schilling gravatar imageAnne Schilling ( 13 years ago )

If by that you mean for stuff getting committed to mainline, I'm not sure. Seems a little hacky, and it feels like there should be a way to do it while staying purely in some polynomial ring.

DSM gravatar imageDSM ( 13 years ago )
2

answered 6 years ago

nbruin gravatar image

Root finding of polynomials over function fields seems to be implemented, so this should work:

sage: M.change_ring(R.fraction_field()).characteristic_polynomial().roots()
[(x0 + x1, 1), (x0 - x1, 1)]

It has the advantage that it should also work in positive characteristic (where SR would not), and hopefully good use is made of specifics of the coefficient domain to provide efficient arithmetic.

Preview: (hide)
link

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: 13 years ago

Seen: 1,043 times

Last updated: Apr 27 '18