首页   java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)

  java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)

举报
开通vip

  java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码) 这几天做一个项目,需要用到 求矩阵的特征值特征向量。我c++学的不好,所以就去网站找了很多java的源代码,来实现这个功能。很多都不完善,甚至是不准确。所以自己参考写了一个。这个用于我一个朋友的毕业设计。结果肯定正确。话不多说,贴源代码! import java.math.BigDecimal; import java.util.Arrays; /** * AHP层次分析法计算权重 * * @since jdk1.6 *...

  java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)
java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码) 这几天做一个项目,需要用到 求矩阵的特征值特征向量。我c++学的不好,所以就去网站找了很多java的源代码,来实现这个功能。很多都不完善,甚至是不准确。所以自己参考写了一个。这个用于我一个朋友的毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 。结果肯定正确。话不多说,贴源代码! import java.math.BigDecimal; import java.util.Arrays; /** * AHP层次分析法计算权重 * * @since jdk1.6 * @author 刘兴 * @version 1.0 * @date 2012.05.25 * */ public class AHPComputeWeight { /** * @param args */ public static void main(String[] args) { /** a为N*N矩阵 */ //double[][] a= {{1,1,1},{1,1,1},{1,1,1}}; double[][] a ={{1,3,5},{2,3,1,},{4,7,3}}; //double[][] a = {{1 ,1/5, 1/3},{5, 1, 1},{3,1,1}}; //double[][] a ={{1, 1/2, 2, 1},{2, 1, 3, 4},{1/2 ,1/3, 1, 1},{1 ,1/4, 1, 1}}; //double[][] a = {{1 ,0.5, 0.5},{2 ,1, 1},{2 ,1, 1}}; //double[][] a = {{1, 1/4, 1/3, 1},{4, 1 ,3 ,5},{3, 1/3, 1, 4},{1, 1/5, 1/4, 1}}; // double[][] a= {{1,2,3,5},{0.5,1,2,3},{0.33,0.5,1,2},{0.2,0.33,0.5,1}}; int N = a[0].length; double[] weight = new double[N]; AHPComputeWeight instance = AHPComputeWeight.getInstance(); instance.weight(a, weight, N); System.out.println(Arrays.toString(weight)); } // 单例 private static final AHPComputeWeight acw = new AHPComputeWeight(); // 平均随机一致性指针 private double[] RI = { 0.00, 0.00, 0.58, 0.90, 1.12, 1.21, 1.32, 1.41, 1.45, 1.49 }; // 随机一致性比率 private double CR = 0.0; // 最大特征值 private double lamta = 0.0; /** * 私有构造 */ private AHPComputeWeight() { } /** * 返回单例 * * @return */ public static AHPComputeWeight getInstance() { return acw; } /** * 计算权重 * * @param a * @param weight * @param N */ public void weight(double[][] a, double[] weight, int N) { // 初始向量Wk double[] w0 = new double[N]; for (int i = 0; i < N; i++) { w0[i] = 1.0 / N; } // 一般向量W(k+1) double[] w1 = new double[N]; // W(k+1)的归一化向量 double[] w2 = new double[N]; double sum = 1.0; double d = 1.0; // 误差 double delt = 0.00001; while (d > delt) { d = 0.0; sum = 0; // 获取向量 int index = 0; for (int j = 0; j < N; j++) { double t = 0.0; for (int l = 0; l < N; l++) t += a[j][l] * w0[l]; // w1[j] = a[j][0] * w0[0] + a[j][1] * w0[1] + a[j][2] * w0[2]; w1[j] = t; sum += w1[j]; } // 向量归一化 for (int k = 0; k < N; k++) { w2[k] = w1[k] / sum; // 最大差值 d = Math.max(Math.abs(w2[k] - w0[k]), d); // 用于下次迭代使用 w0[k] = w2[k]; } } // 计算矩阵最大特征值lamta,CI,RI lamta = 0.0; for (int k = 0; k < N; k++) { lamta += w1[k] / (N * w0[k]); } double CI = (lamta - N) / (N - 1); if (RI[N - 1] != 0) { CR = CI / RI[N - 1]; } // 四舍五入处理 lamta = round(lamta, 3); CI = Math.abs(round(CI, 3)); CR = Math.abs(round(CR, 3)); for (int i = 0; i < N; i++) { w0[i] = round(w0[i], 4); w1[i] = round(w1[i], 4); w2[i] = round(w2[i], 4); } // 控制台打印输出 System.out.println("lamta=" + lamta); System.out.println("CI=" + CI); System.out.println("CR=" + CR); // 控制台打印权重 System.out.println("w0[]="); for (int i = 0; i < N; i++) { System.out.print(w0[i] + " "); } System.out.println(""); System.out.println("w1[]="); for (int i = 0; i < N; i++) { System.out.print(w1[i] + " "); } System.out.println(""); System.out.println("w2[]="); for (int i = 0; i < N; i++) { weight[i] = w2[i]; System.out.print(w2[i] + " "); } System.out.println(""); } /** * 四舍五入 * * @param v * @param scale * @return */ public double round(double v, int scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b = new BigDecimal(Double.toString(v)); BigDecimal one = new BigDecimal("1"); return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /** * 返回随机一致性比率 * * @return */ public double getCR() { return CR; } }
本文档为【  java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_261329
暂无简介~
格式:doc
大小:31KB
软件:Word
页数:5
分类:互联网
上传时间:2012-05-25
浏览量:130