首页  >> 水信息共享平台  >> 资料共享
AHP判断矩阵的一致性检验与权重求解代码
作者 wbadmin   查看 1509   发表时间 2007/6/25 15:07  【论坛浏览】
层次分析法AHP的判断矩阵的一致性检验与特征向量(权重)求解igdpuz
调试通过但未全面检验,欢迎探讨!igdpuz
igdpuz
  代码:
int doAhpWeight(int n, double x[], double w[], double &CR)igdpuz
{igdpuz
//本函数根据叶义成教材P86和法算法igdpuz
//n:判断矩阵维数,输入值igdpuz
//x:判断矩阵,输入值igdpuz
//w:特征向量,即权重,返回值igdpuz
//CR:随机一致性比率CR=CI/RI,返回值igdpuz
//返回0为正常;返回-1为判断矩阵格式不合要求;返回-2为不满足一致性igdpuz
const double RI[16] = {0.0, 0.0, 0.0, 0.5149, 0.8931, 1.1185, 1.2494, 1.3450, 1.4200, igdpuz
1.4616, 1.4874, 1.5156, 1.5405, 1.5583, 1.5779, 1.5894};igdpuz
int i, j;igdpuz
double tmpSum1, tmpSum2;igdpuz
double rMax;igdpuz
double CI;igdpuz
double *q;igdpuz
double *c;igdpuz
q = new double[n*n];igdpuz
c = new double[n];igdpuz
if (n<=1 || n>=16)igdpuz
return -1;igdpuz
for (i=0; iigdpuz
{igdpuz
if ( fabs(x[i*n+i]-1.0) > 0.00001 )igdpuz
return -1;igdpuz
for (j=0; jigdpuz
{igdpuz
if (fabs(x[i*n+j]*x[j*n+i]-1.0) > 0.001)igdpuz
return -1;igdpuz
}igdpuz
}igdpuz
for (j=0; jigdpuz
{igdpuz
tmpSum1 = 0.0;igdpuz
for (i=0; iigdpuz
{igdpuz
tmpSum1 = tmpSum1 + x[i*n+j];igdpuz
}igdpuz
for (i=0; iigdpuz
{igdpuz
q[i*n+j] = x[i*n+j]/tmpSum1;igdpuz
}igdpuz
}igdpuz
for (i=0; iigdpuz
{igdpuz
tmpSum1 = 0.0;igdpuz
for (j=0; jigdpuz
{igdpuz
tmpSum1 = tmpSum1 + q[i*n+j];igdpuz
}igdpuz
c = tmpSum1;igdpuz
}igdpuz
tmpSum1 = 0;igdpuz
for (i=0; iigdpuz
{igdpuz
tmpSum1 = tmpSum1 + c;igdpuz
}igdpuz
for (i=0; iigdpuz
{igdpuz
w = c/tmpSum1;igdpuz
}igdpuz
tmpSum1 = 0;igdpuz
for (i=0; iigdpuz
{igdpuz
tmpSum2 = 0;igdpuz
for (j=0; jigdpuz
{igdpuz
tmpSum2 = tmpSum2 + x[i*n+j]*w[j];igdpuz
}igdpuz
tmpSum1 = tmpSum1 +tmpSum2/w;igdpuz
}igdpuz
rMax = tmpSum1/n;igdpuz
CI = (rMax-n)/(n-1);igdpuz
CR = CI/RI[n];igdpuz
if (CR>=0.1)igdpuz
return -2;igdpuz
delete []q; delete []c;igdpuz
}
igdpuz

序号 评论者 共有评论 1   【论坛浏览】  【发表评论】 评论时间
1 yesterday 看不懂 2007/6/25 15:10
 共有评论数 1  每页显示 10
页码 1/1  |<  <<   1   >>  >| 
登录信息  
文章列表  
Powered by DiY-Page 5.1.2 © 2005-2009