What would be the easiest way to get the charateristic polynomial roots?!

What I'm actually doing right now is...

Given a matrix $A$, I calculate $\det(A-\lambda I) = 0$ with Laplace Expansion, and then, expand all terms to get usually a third degree equation (depends on the size of my matrix $A$)... Then I try to find one value for $\lambda$ that is root of that expression... Then I make a polynomial division, with the first expression (third degree equation) divided by $(x-a)$ when $a$ is the root that I've found. Then I get a second degree equation and use bhaskara method to get the other two roots. That method works, but it takes a long time and I can have many algebraic mistakes during the proccess, and if my first equation has degree $>3$ I'll be lost.

What is the proccess that I should adopt after the Laplace Expansion at $\det(A-\lambda I) = 0$? How can I simplify what I am doing?!


  • $\begingroup$ There is essentially nothing you can do, unless you can somehow factor the polynomial because you guess how to do it from looking at it hard. Every polynomial is the characteristic polynomial of a matrix (google "companion matrix") so there is nothing special about characteristic polynomials. $\endgroup$ – Mariano Suárez-Álvarez Oct 20 '16 at 5:44
  • $\begingroup$ @MarianoSuárez-Álvarez So what I am doing is essentialy what needs to be done?! $\endgroup$ – Bruno Reis Oct 20 '16 at 5:50

As Mariano says in the comments, finding the roots of a characteristic polynomial is no easier than finding the roots of an arbitrary polynomial: you can try to factor it, or try the usual tricks to check for "easy" roots (i.e. the rational root test), but it could well be that a high-degree characteristic polynomial's roots can't be expressed in closed form.

In practice, if you want the approximate roots, you can find them using numerical codes like the Jenkins-Traub algortihm (https://github.com/sweeneychris/RpolyPlusPlus). Or you can skip forming the characteristic polynomial entirely and find the eigenvalues using eigs in Matlab, or a standard linear algebra package like Eigen (http://eigen.tuxfamily.org/index.php?title=Main_Page) in C/C++.

  • $\begingroup$ thank you for the answer! From what you and Mariano answered, what I really need right now is practice haha... Do you think that the way i'm doing it is good enough? Because since I can't visually get more than one root to simplify it, I need to divide it and do what I said... $\endgroup$ – Bruno Reis Oct 20 '16 at 6:02
  • $\begingroup$ @BrunoReis Yes, finding one root and dividing works fine, if you can't immediately factor the polynomial completely. $\endgroup$ – user7530 Oct 20 '16 at 6:07
  • $\begingroup$ In exercises is common to low natural numbers as roots... So I always check if low intergers are roots haha! That's a good practice right?! $\endgroup$ – Bruno Reis Oct 20 '16 at 6:10
  • $\begingroup$ Sure? In case you're not aware, the rational root test can save you some time by narrowing down which natural numbers you need to check. $\endgroup$ – user7530 Oct 20 '16 at 6:33
  • $\begingroup$ I was not aware of that! I'll check it later. Thanks mate $\endgroup$ – Bruno Reis Oct 20 '16 at 6:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.