经济信息学里面的(社会调查)层次分析法的计算

原创 2003年12月19日 23:20:00

如果大家很熟悉层次分析里面的那些判断矩的话,应该很容易懂我以下的这个程序的了!!
老师给的那个程序一次只能算一个判断矩阵,这样的话,如果碰到底下有很多层的那种检验的时候你就要一个一个来,算出那个总的CR来了,这样真的是麻烦死了.这个程序为你解决了这个烦恼.你可以在这个程序里面输入这些矩阵的内容和信息,然后就可以得到各个小的CI值,
也可以得到总的CI值,从而算出总的CR值,最终为你判断做好了准备,其实也方便了你构造那些本命的判断矩阵了(有时候如果真的碰到CR>0.1)的话,如果用老师的那个程序的话,你可真的要气死了,用这个程序完全不会有这个顾虑了!!请看
贡献原码:


#include <iostream.h>
void main()
{
int count;
cout<<"请输入这层的总数:";
cin>>count;
double *por;
por=new double[count];
int c;
cout<<"请输入他们各自的权重:";
for(c=0;c<count;c++)
cin>>por[c];
int q;
int *ncount;
ncount=new int[count];
double *cicount;
cicount=new double[count];
for(q=0;q<count;q++)
{int n;
int i,j;
cout<<"请输入矩阵的阶数:";
cin>>n;
double **martrix;
double **copy;
martrix=new double * [n];
copy=new double *[n];
for( i=0;i<n;i++)
{martrix=new double[n];
copy=new double[n];
}

for(i=0;i<n;i++)
for(j=0;j<n;j++)
martrix[j]=0;

cout<<"请输入矩阵:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ cin>>martrix[j];
copy[j]=martrix[j];
}
double *m;
m=new double [n];
for(i=0;i<n;i++)
m=0;
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
m[j]+=martrix[j];
for(i=0;i<n;i++)
copy[j]=martrix[j]/m[j];
}
for(i=0;i<n;i++)
m=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
m+=copy[j];
double total=0;
for(i=0;i<n;i++)
total+=m;
for(i=0;i<n;i++)
m/=total;
double *ano;
ano=new double[n];
int k;
for(i=0;i<n;i++)
ano=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
{ if(k==j) { ano+=m[k]*martrix[j];break;}}
double lamda=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j) {lamda+=ano/(n*m[j]);break;}
double ci;
ci=(lamda-(double)n)/((double)n-1);
cout<<"这就是传说中的λmax:"<<lamda<<endl;
cout<<"这就是那个比较关键的CI:"<<ci<<endl;
cout<<"这就是那个传说中的特征向量:"<<endl;
for(i=0;i<n;i++)
cout<<ano<<" ";
cout<<endl;
ncount[q]=n;
cicount[q]=ci;
cout<<endl;
}
int i,j;
double CI=0;
for(i=0;i<count;i++)
for(j=0;j<count;j++)
if(i==j) { CI+=cicount*por[j];break;}
double ai[7];
ai[0]=0;ai[1]=0;ai[2]=0.58;ai[3]=0.89;ai[4]=1.12;ai[5]=1.24; ai[6]=1.32;
double RI=0;
double *ri;
ri=new double[count];
for(i=0;i<count;i++)
for(j=0;j<7;j++)
if(ncount==(j+1)) {ri=ai[j];break;}

for(i=0;i<count;i++)
for(j=0;j<count;j++)
if(i==j) RI+=ri*por[j];
cout<<"最终的CR是:";
double CR;
CR=CI/RI;
cout<<CR<<endl;

}

可执行程序上传不了,气死我也!!
以下是我用一个例子实际运行的结果:
请输入这层的总数:5
请输入他们各自的权重:0.18 0.18 0.16 0.18 0.16
请输入矩阵的阶数:7
请输入矩阵:
1 1 1 1 1 4 3
1 1 1 1 1 4 4
1 1 1 1 1 3 4
1 1 1 1 1 4 4
1 1 1 1 1 4 4
0.25 0.25 0.3333 0.25 0.25 1 1
0.3333 0.25 0.25 0.25 0.25 1 1
这就是传说中的λmax:7.01692
这就是那个比较关键的CI:0.0028207
这就是那个传说中的特征向量:
1.24005 1.28806 1.24005 1.28806 1.28806 0.336736 0.336736

请输入矩阵的阶数:3
请输入矩阵:
1 1 0.5
1 1 1
2 1 1
这就是传说中的λmax:3.05366
这就是那个比较关键的CI:0.026828
这就是那个传说中的特征向量:
0.794444 1 1.26111

请输入矩阵的阶数:5
请输入矩阵:
1 1 2 3 2
1 1 2 3 2
0.5 0.5 1 1 1
0.3333 0.3333 1 1 0.5
0.5 0.5 1 2 1
这就是传说中的λmax:5.03944
这就是那个比较关键的CI:0.00986095
这就是那个传说中的特征向量:
1.50659 1.50659 0.701317 0.522066 0.80527

请输入矩阵的阶数:5
请输入矩阵:
1 1 1 2 2
1 1 1 2 2
1 1 1 2 2
0.5 0.5 0.5 1 2
0.5 0.5 0.5 0.5 1
这就是传说中的λmax:5.05898
这就是那个比较关键的CI:0.0147447
这就是那个传说中的特征向量:
1.25667 1.25667 1.25667 0.738889 0.555278

请输入矩阵的阶数:3
请输入矩阵:
1 2 1
0.5 1 1
1 1 1
这就是传说中的λmax:3.05366
这就是那个比较关键的CI:0.026828
这就是那个传说中的特征向量:
1.26111 0.794444 1

最终的CR是:0.0169949

在这里,我们只用看这个CR就可以了,它明显是<0.1的,
所以,一致性检验通过.

YEAH.

经济信息学里面的(社会调查)层次分析法的计算

如果大家很熟悉层次分析里面的那些判断矩的话,应该很容易懂我以下的这个程序的了!!老师给的那个程序一次只能算一个判断矩阵,这样的话,如果碰到底下有很多层的那种检验的时候你就要一个一个来,算出那个总的CR...
  • beixs
  • beixs
  • 2004年12月22日 22:07
  • 957

层次分析法入门笔记

在看到2012美赛数模的O奖论文< A CLose Look at Leaves>的模型一中的分析时,初次接触层次分析法,看上去是一个多指标的层次权重分析方法,经过学习,整理成为本文。我将以该论文中的...
  • Suspect_1412
  • Suspect_1412
  • 2015年11月20日 16:17
  • 2270

MATLAB实现层次分析法计算权重的代码函数实现

function Q=AHP(A) [m,n]=size(A); RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51]; R=rank(A)...
  • u014484715
  • u014484715
  • 2014年10月18日 13:35
  • 6509

Matlab 层次分析法 求解权重矩阵

注:应用程序时,只需要将评判矩阵,也就是判断矩阵,输入到程序中即可,即修改A矩阵,其他地方都不需要修改。         首先进行对矩阵一致性的判断,只有通过一致性检验的矩阵,得到的权重才更可靠,涉及...
  • wyh7280
  • wyh7280
  • 2015年07月20日 13:29
  • 2847

层次分析法(AHP)—matlab实现

层次分析法是一种主观的决策方法,可以用来确定一些指标权重,辅助决策依据的一种定性分析方法,层次分析法运用前需要构造层次模型:决策层,中间层(指标层),底层(选择层);形成等级层次;然后构造两两对比矩阵...
  • u014484715
  • u014484715
  • 2014年10月17日 18:21
  • 4052

层次分析法的matlab的实现

层次分析法的matlab的实现: 【实例】市政部门管理人员需要对修建一项市政工程项目进行决策,可选择的方案是修建通往旅游区的高速路(简称建高速路)或修建城区地铁(简称建地铁)。除了考...
  • shao1996
  • shao1996
  • 2016年09月10日 20:12
  • 2555

【MATLAB · 代码】数学建模(一)层次分析法使用的代码

程序一: %对A矩阵一致性检验 A=[1 3 5 7; 1/3 1 3 5; 1/5 1/3 1 2;1/7 1/5 1/2 1 ] [X,Y]=eig(A) eigenvalue=dia...
  • ZongZi_XS
  • ZongZi_XS
  • 2017年04月17日 22:43
  • 2056

层次分析法(AHP)的Matlab实现

层次分析法(AHP)的Matlab是实现clc; clear; A = [1 5 3 7 1/5 1 1/3 3 1/3 3 1 5 1/7 1/3 1/5 1]; [m,n]...
  • RicheyLee
  • RicheyLee
  • 2016年01月08日 20:30
  • 13060

层次分析法(AHP)

层次分析法(AHP)问题的提出日常生活中有许多决策问题。决策是指在面临多种方案时需要依据一定的标准选择某一种方案。 购物:买钢笔,一般要依据质量、颜色、实用性、价格等方面的因素来选择某一只钢笔。 ...
  • qq547276542
  • qq547276542
  • 2017年08月30日 15:54
  • 2819

AHP-层次分析法(C++源码,附详细注释和样例)

算法简介 AHP-层次分析法是数学建模中的常用算法,其适用于一批非常广泛的问题,综合来说,它是一个“层次权重决策分析方法”。客观地讲,它适用于一些有限制条件的决策选择问题: 1. ...
  • NIeson2012
  • NIeson2012
  • 2015年06月12日 14:07
  • 1969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经济信息学里面的(社会调查)层次分析法的计算
举报原因:
原因补充:

(最多只允许输入30个字)