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

2020-02-27 其他范文 下载本文

java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ahp层次分析法例题”。

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

import java.math.BigDecimal;import java.util.Arrays;/** * AHP层次分析法计算权重

*

* @since jdk1.6 * @author 刘兴

* @version 1.0 * @date 2012.05.25 *

*/ public cla 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

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

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

} // 最大差值

d = Math.max(Math.abs(w2[k]N)/(N1]!= 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

System.out.println(“lamta=” + lamta);System.out.println(“CI=” + CI);System.out.println(“CR=” + CR);// 控制台打印权重

System.out.println(“w0[]=”);for(int i = 0;i

*

* @param v

} * @param scale * @return */ public double round(double v, int scale){ if(scale

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层次分析法计算权重)(附源代码).docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)
点击下载文档
相关专题 ahp层次分析法例题 特征值 向量 权重 ahp层次分析法例题 特征值 向量 权重
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文