001    // GraphLab Project: http://graphlab.sharif.edu
002    // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
003    // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
004    
005    package graphlab.plugins.reports.basicreports;
006    
007    import Jama.EigenvalueDecomposition;
008    import graphlab.platform.lang.CommandAttitude;
009    import graphlab.plugins.main.GraphData;
010    import graphlab.plugins.reports.extension.GraphReportExtension;
011    
012    import java.util.ArrayList;
013    
014    /**
015     * @author Mohammad Ali Rostami
016     */
017    
018    @CommandAttitude(name = "eig_values", abbreviation = "_evs")
019    public class AdjMatrixEigenValues implements GraphReportExtension {
020    
021        double round(double value, int decimalPlace) {
022            double power_of_ten = 1;
023            while (decimalPlace-- > 0)
024                power_of_ten *= 10.0;
025            return Math.round(value * power_of_ten)
026                    / power_of_ten;
027        }
028    
029        public Object calculate(GraphData gd) {
030            try {
031                EigenvalueDecomposition ed = gd.getGraph().getAdjacencyMatrix().eig();
032                double rv[] = ed.getRealEigenvalues();
033                double iv[] = ed.getImagEigenvalues();
034    
035                ArrayList<String> eigvs = new ArrayList<String>();
036                for (int i = 0; i < rv.length; i++)
037                    if (iv[i] != 0)
038                        eigvs.add("" + round(rv[i], 3) + " + " + round(iv[i], 3) + "i");
039                    else
040                        eigvs.add("" + round(rv[i], 3));
041                return eigvs;
042            } catch (Exception e) {
043            }
044            return "";
045        }
046    
047        public String getName() {
048            return "Eigen Values";
049        }
050    
051        public String getDescription() {
052            return "adjacency matrix eigen values";
053        }
054    }