Skip to content
Numerical Method , home
Menu

Forum Numerical Method Linear Algebra

realEigenvalues

  1. 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.

  2. Haksun LiModerator 2010-12-16 at 10:03 am

    The property of an eigenvalue is returned in the structure

    Eigen.Property
    

    E.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>
    
  3. 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 />
    
  4. 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 />