Forum Numerical Method Linear Algebra
realEigenvalues
-
lollielgelParticipant 2010-12-16 at 9:52 am
How does Eigen deal with multiple roots or complex eigenValues? Some examples would be great.
I’m trying to do something like this:
<br /> DenseMatrix sigma = new DenseMatrix(new double[][]{<br /> {1., 0.},<br /> {0., 1.}});<br /> Eigen sigmaEigen = new Eigen(sigma);<br /> double[] sigmaEigenvalues = sigmaEigen.realEigenvalues();<br />and would like sigmaEigenvalues to contain 2 identical real numbers {1, 1}.
Thanks.
-
Haksun LiModerator 2010-12-16 at 10:03 am
The property of an eigenvalue is returned in the structure
Eigen.PropertyE.g.,
<br /> Matrix A = new DenseMatrix(new double[][]{<br /> {1, 0},<br /> {0, 1}<br /> });<br /> Eigen eigen = new Eigen(A);<br /> <br /> assertTrue(eigen.eigenvalues().hasApproximately(1, 1));<br /> <br /> assertEquals(1, eigen.size());<br /> assertEquals(1, eigen.realEigenvalues().length);<br /> <br /> for (int i = 0; i < eigen.size(); ++i) {<br /> double eigenvalue = eigen.realEigenvalues()<i>;<br /> Property property = eigen.property(eigenvalue);<br /> assertEquals(eigenvalue, property.eigenvalue());<br /> assertEquals(eigen.eigenvalue(i), property.eigenvalue());<br /> assertEquals(eigen.property(eigen.eigenvalue(i)).algebraicMultiplicity(), property.algebraicMultiplicity());<br /> assertEquals(2, property.algebraicMultiplicity());<br /> }<br /> </i> -
osigrtoeltParticipant 2010-12-16 at 10:09 am
Thanks, Haksun. How about complex eigenvalues?
For instance,
Matrix A = new DenseMatrix(new double[][]{<br /> {1, -1},<br /> {0.5, 1}<br /> });<br /> -
Haksun LiModerator 2010-12-16 at 10:17 am
It is the same except that
<br /> eigen.eigenvalue(i)<br />returns a [tt:1r3zqrmz]Complex[/tt:1r3zqrmz] number.
E.g.,
<br /> Matrix A = new DenseMatrix(new double[][]{<br /> {1, -1},<br /> {0.5, 1}<br /> });<br /> Eigen eigen = new Eigen(A);<br /> <br /> String eigenvalue1 = "1-0.707107i";<br /> String eigenvalue2 = "1+0.707107i";<br /> assertTrue(eigen.eigenvalues().hasApproximately(1e-6, eigenvalue1, eigenvalue2));<br /> <br /> assertEquals(2, eigen.size());<br /> assertEquals(0, eigen.realEigenvalues().length);<br /> <br /> for (int i = 0; i < eigen.size(); ++i) {<br /> Number eigenvalue = eigen.eigenvalue(i);<br /> Property property = eigen.property(eigenvalue);<br /> assertEquals(eigenvalue, property.eigenvalue());<br /> assertEquals(eigen.eigenvalue(i), property.eigenvalue());<br /> assertEquals(eigen.property(eigen.eigenvalue(i)).algebraicMultiplicity(), property.algebraicMultiplicity());<br /> assertEquals(1, property.algebraicMultiplicity());<br /> }<br />