计算N阶矩阵的随机一致性指标RI

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告(一)

课程名称数学建模

实验项目Matlab基本操作及其实际应用实验环境PC机、Matlab

学院/班级

学号/姓名

指导教师

实验日期

成绩

一、实验名称:

随机一致性指标求解

二、实验目的:

1)掌握用matlab求解随机一致性指标的方法

2)加深对随机一致性指标概念的理解

三、实验内容:

用matlab或C++编写程序分别计算n=3-30时的n阶矩阵的随机一致性检验指标的值RI。

//本组实验随机数产生正互反矩阵,这个数目必须取的相当大(超过1000000,所以此程序跑起来比较费时),才比较接近标准答案

#include

#include

#include

#include

#include

using namespace std;

int getNameta(double a[],int n); //获取当前随机正互反矩阵的最大λ

void createMatrix(double a[],int n); //建立随机正互反矩阵

int getMax(double b[],int n); //获取b矩阵中的最大值

void Mifa(double a[],double b[],int n); //幂法过程

void main()

{

int n; //矩阵阶数

int m = 3000; //建立的随机正互反矩阵个数

int all = 0; //所有最大λ的和

int tem = 0;

int ri = 0; //最终的RI(为了计算方便,将实际的RI扩大了100倍进行计算了)

cout << "Please enter the size of the matrix:" << endl;

cout << "n = " ;

cin >> n;

if(n > 2&& n <= 30){

for(int i =0;i

double *a = new double[n*n]; //声明n*n的随机正互反矩阵

for(int j =0;j

{

a[j] = 1;

}

createMatrix(a,n); //建立n*n的随机正互反矩阵

all += getNameta(a,n); //获得最大λ}

tem = all/m;

//计算得RI

ri = (tem - n*100);

ri = ri/(n-1); //计算得到的RI (乘以100后的结果)

int baiwei = ri/100;

int shiwei = (ri-100*baiwei)/10;

int gewei = ri-100*baiwei-10*shiwei;

cout << "The RI of the " << n <<" size matrix is " << baiwei << "." << shiwei << gewei

<< endl;

}

else if(n ==1)

{

cout << "The RI of the " << n <<" size matrix is " << 0 << endl;

}

else

cout << "The size of n you input is wrong" << endl;

}

void createMatrix(double a[],int n)

{

double

sample[17]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/ 5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0};

for(int i=0;i

for(int j=i;j

{

int t;

t = rand()%17;

if( j == i){

a[n*i+j]=1.0;

}

else{

a[n*i+j] = sample[t];

a[n*j+i] = 1.0/sample[t];

}

}

}

int getNameta(double a[],int n)

{

int tem=0;

double *b=new double[n];

for(int i=0;i

b[i]=1.0/n;

}

Mifa(a,b,n);

int max=getMax(b,n);

while(tem != max)

{

tem = max;

for(int d = 0;d

{

b[d] = b[d]*100/max;

}

Mifa(a,b,n);

max = getMax(b,n);

}

int nameta;

nameta = tem;

return nameta;

}

相关文档
最新文档