public static void main(String args[])
{
Caltest1 ct=new Caltest1();
Caltest1 ct1=new Caltest1();
Caltest1 ct2=new Caltest1();
Caltest1 ct3=new Caltest1();
//目标层比较矩阵
double Cal[][]={{1,4,3},{0.25,1,2},{0.33333333,0.5,1}};
double Cal1[][]={{1,4,3},{0.25,1,2},{0.33333333,0.5,1}};
//准则层(元素1)比较矩阵
double Cal2[][]={{1,5,2},{0.2,1,0.5},{0.5,2,1}};
double Cal3[][]={{1,5,2},{0.2,1,0.5},{0.5,2,1}};
//准则层(元素2)比较矩阵
double Cal4[][]={{1,0.2,0.5},{5,1,2},{2,0.5,1}};
double Cal5[][]={{1,0.2,0.5},{5,1,2},{2,0.5,1}};
//准则层(元素3)比较矩阵
double Cal6[][]={{1,2,0.25},{0.5,1,0.125},{4,8,1}};
double Cal7[][]={{1,2,0.25},{0.5,1,0.125},{4,8,1}};
ct.setN(3);//矩阵的阶数,共享
int n=ct.getN();
double arr[]=new double[n];//原始比较矩阵的每列和,目标层
double arr1[]=new double[n];//单层权重,目标层
double arr2[]=new double[n];//A*w,目标层
double arr11[]=new double[n];//原始比较矩阵的每列和,准则层(元素一)
double arr1_1[]=new double[n];//单层权重,准则层(元素一)
double arr2_1[]=new double[n];//A*w,准则层(元素一)
double arr22[]=new double[n];//原始比较矩阵的每列和,准则层(元素二)
double arr1_2[]=new double[n];//单层权重,准则层(元素二)
double arr2_2[]=new double[n];//A*w,准则层(元素二)
double arr33[]=new double[n];//原始比较矩阵的每列和,准则层(元素三)
double arr1_3[]=new double[n];//单层权重,准则层(元素三)
double arr2_3[]=new double[n];//A*w,准则层(元素三)
ct.cal=Cal;
ct.cal1=Cal1;
ct1.cal=Cal2;
ct1.cal1=Cal3;
ct2.cal=Cal4;
ct2.cal1=Cal5;
ct3.cal=Cal6;
ct3.cal1=Cal7;
Caltest1.setHm();//各矩阵共享
double CI,nameda,RI,CR;
double CI1,nameda1,CR1;
double CI2,nameda2,CR2;
double CI3,nameda3,CR3;
Double ri=new Double(0);
ri=(Double)ct.hm.get(3);//ct.hm.get(3)返回的是一个对象
RI=ri.doubleValue();//得到RI,共享
//计算目标层相关系数
ct.colvectortoone(arr);
arr1=ct.rowsum(arr1);
nameda=ct.getnamda(arr1, arr2);
System.out.println("最大特征值是 :"+nameda);//打印最大特征值
CI=(nameda-n)/(n-1);
System.out.println("计算的一致性指标CI:"+CI);
System.out.println("查出的平均随机一致性指标RI:"+RI);
CR=CI/RI;
System.out.println("一致性比率CR :"+CR);
if(CR<0.1)
{
System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
}
else
{
System.out.println("请重新构造比较矩阵");
}
//计算准则层元素一相关系数
ct1.colvectortoone(arr11);
arr1_1=ct1.rowsum(arr1_1);
nameda1=ct1.getnamda(arr1_1, arr2_1);
System.out.println("最大特征值是 :"+nameda1);//打印最大特征值
CI1=(nameda1-n)/(n-1);
System.out.println("计算的一致性指标CI1 :"+CI1);
System.out.println("查出的平均随机一致性指标RI :"+RI);
CR1=CI1/RI;
System.out.println("一致性比率CR1 :"+CR1);
if(CR1<0.1)
{
System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
}
else
{
System.out.println("请重新构造比较矩阵");
}
//计算准则层元素二相关系数
ct2.colvectortoone(arr22);
arr1_2=ct2.rowsum(arr1_2);
nameda2=ct2.getnamda(arr1_2, arr2_2);
System.out.println("最大特征值是 :"+nameda2);//打印最大特征值
CI2=(nameda2-n)/(n-1);
System.out.println("计算的一致性指标CI2 :"+CI2);
System.out.println("查出的平均随机一致性指标RI :"+RI);
CR2=CI2/RI;
System.out.println("一致性比率是CR2 :"+CR2);
if(CR2<0.1)
{
System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
}
else
{
System.out.println("请重新构造比较矩阵");
}
//计算准则层元素三相关系数
ct3.colvectortoone(arr33);
arr1_3=ct3.rowsum(arr1_3);
nameda3=ct3.getnamda(arr1_3, arr2_3);
System.out.println("最大特征值是 :"+nameda3);//打印最大特征值
CI3=(nameda3-n)/(n-1);
System.out.println("计算的一致性指标CI3 :"+CI3);
System.out.println("查出的平均随机一致性指标RI :"+RI);
CR3=CI3/RI;
System.out.println("一致性比率CR3 :"+CR3);
if(CR3<0.1)
{
System.out.println("比较矩阵不一致程度在容许范围内,可用其特征向量作为权向量");
}
else
{
System.out.println("请重新构造比较矩阵");
}
//组合权向量的计算
double corvector[][] = new double[3][3];
//构造准则层的权向量矩阵
System.out.println("****************构造准则层的权向量矩阵开始****************");
for(int j=0;j<n;j++)
{
for(int i=0;i<n;i++)
{
if(j==0)
{
corvector[i][j]=arr1_1[i];
}
if(j==1)
{
corvector[i][j]=arr1_2[i];
}
if(j==2)
{
corvector[i][j]=arr1_3[i];
}
}
}
System.out.println("****************构造准则层的权向量矩阵结束****************");
//打印准则层矩阵
System.out.println("****************打印准则层的权向量矩阵开始****************");
for(int j=0;j<n;j++)
{
for(int i=0;i<n;i++)
{
System.out.print(corvector[j][i]+"\t");
}
System.out.println();
}
System.out.println("****************打印准则层的权向量矩阵结束****************");
//打印目标层矩阵
System.out.println("****************打印目标层的权向量矩阵开始****************");
for(int j=0;j<n;j++)
{
System.out.println(arr1[j]);
}
System.out.println("****************打印目标层的权向量矩阵结束****************");
//求组合权重
System.out.println("****************求组合权重开始****************");
double arr3[]=new double[3];//保存组合权重的数据
for(int j=0;j<n;j++)
{
for(int i=0;i<n;i++)
{
arr3[j]+=corvector[j][i]*arr1[i];//得到组合权重
}
}
System.out.println("****************求组合权重结束****************");
//打印组合权重
System.out.println("****************打印组合权重开始****************");
for(int j=0;j<n;j++)
{
System.out.println(arr3[j]);
}
System.out.println("****************打印组合权重结束****************");
}
}
层次分析法java实现续
最新推荐文章于 2022-08-03 11:57:33 发布