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 }