数模实验报告-实验9-1 层次分析模型——正互反阵最大特征根和特征向量实用算法

  河北大学《数学模型》实验 实验报告

 班级专业

 计算机1班

 姓名

 张建华

 学号

 20144138021

 实验地点

 C1-229

 指导老师

 司建辉

 成绩

 实验项目

 层次分析模型

 实验9-1 层次分析模型——正互反阵最大特征根和特征向量的实用算法

 一、实验目的 1、了解层次分析模型;

  2、了解幂法函数及和法函数;

  3、掌握根法函数;

 二、实验要求

  1. 用给出的幂法函数求A的最大特征根和特征向量。调用命令和运行结果。

 2. 用给出的和法函数求A的最大特征根和特征向量。调用命令和运行结果。

 3. 编写根法函数,用该函数求A的最大特征根和特征向量。程序、调用命令和运行结果。

 三、实验内容

  1、幂法:

 %输入参数:A为正互反方阵,精度e

 %输出参数:lamda为最大特征根,w为其归一化特征列向量

 function [lamda w]=MIfun(A,e)

 if(nargin==1)%如果只输入一个变量(即A),则e取0.000001

 e=0.000001;

 end

 n=size(A,1);%取A的行数

 w0=ones(n,1)/n;%归一向量

 while 1

 ww=A*w0;

 w=ww/sum(ww);%归一化

 if all(abs(w-w0)<e)

 break;

 end

 w0=w;

 end

 lamda=sum(ww./w0)/n;

 2、和法:

  %输入参数:A为正互反方阵

 %输出参数:lamda为最大特征根,w为其归一化特征列向量

 function [lamda w]=HEfun(A)

 n=size(A,1);

 for k=1:n %a.将A的每一列向量归一化

 AA(:,k)=A(:,k)./sum(A(:,k));

 end

 ww=sum(AA,2); %b.对AA按行求和,ww为列向量

 w=ww./sum(ww); %c.归一化,得w为近似特征列向量

 lamda=sum(A*w./w)/n; %d.计算最大特征根的近似值λ

 3、根法:

  function [lamda w]=RTfun(A)

 n=size(A,1);

 for k=1:n

  AA(:,k)=A(:,k)./sum(A(:,k));

 end

 ww=prod(AA,2).^(1/n);

 w=ww./sum(ww);

 lamda=sum(A*w./w)/n;

 四、实验结果及其分析

  幂法:

 和法:

 根法:

 实验9-2 层次分析模型——旅游决策问题

 实验目的掌握层次分析法;

 实验要求

 1. 显示第2层的以下数据:

 最大特征根λ;特征向量(权向量)w;一致性指标CI;一致性比率CR。

 2. 显示第3层的以下数据:

 特征向量(权向量)w(3)k;最大特征根λk;一致性指标CIk。

 3. 显示最下层(第3层)对目标(第1层)的组合权向量。

 4. 显示第2层和第3层的组合一致性比率,以及最下层对第1层的组合一致性比率。

 实验内容

 1、脚本式M文件:

  format compact;

 A=[1 1/2 4 3 3 ;2 1 7 5 5 ;1/4 1/7 1 1/2 1/3 ;1/3 1/5 2 1 1;1/3 1/5 3 1 1];

 B1=[1 2 5 ; 1/2 1 2 ; 1/5 1/2 1];

 B2=[1 1/3 1/8; 3 1 1/3; 8 3 1];

 B3=[1 1 3 ; 1 1 3 ; 1/3 1/3 1];

 B4=[1 3 4 ; 1/3 1 1 ; 1/4 1 1];

 B5=[1 1 1/4; 1 1 1/4; 4 4 1];

 [lamda2 w2 CI2 CR2]=TRfun(A);

 if CR2>=0.1

  disp(['CR2=',num2str(CR2),'>0.1,A óDí¨1yòDì2é£?'])

  return;

 end

 [lamda3_1 w3_1 CI3_1 CR3_1]=TRfun(B1);

 if CR3_1>0.1

  disp(['CR3_1=',num2str(CR3_1),'>0.1,B1 óDí¨1yòDì2é£?'])

  return;

 end

 [lamda3_2 w3_2 CI3_2 CR3_2]=TRfun(B2);

 if CR3_2>0.1

  disp(['CR3_2=',num2str(CR3_2),'>0.1,B2 óDí¨1yòDì2é£?'])

  return;

 end

 [lamda3_3 w3_3 CI3_3 CR3_3]=TRfun(B3);

 if CR3_3>0.1

  disp(['CR3_3=',num2str(CR3_3),'>0.1,B3 óDí¨1yòDì2é£?'])

  return;

 end

 [lamda3_4 w3_4 CI3_4 CR3_4]=TRfun(B4);

 if CR3_4>0.1

  disp(['CR3_4=',num2str(CR3_4),'>0.1,B4 óDí¨1yòDì2é£?'])

  return;

 end

 [lamda3_5 w3_5 CI3_5 CR3_5]=TRfun(B5);

 if CR3_5>0.1

  disp(['CR3_5=',num2str(CR3_5),'>0.1,B5 óDí¨1yòDì2é£?'])

  return;

 end

 w3=[w3_1,w3_2,w3_3,w3_4,w3_5]*w2;

 CI3=[CI3_1 CI3_2 CI3_3 CI3_4 CI3_5]*w2;

 RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];

 RI3=[RI(3) RI(3) RI(3) RI(3) RI(3)]*w2;

 CR3=CI3/RI3;

 if CR3>0.1

  disp(['CR3=',num2str(CR3),'>0.1,μú 3 2óDí¨1y×éo?òDì2é£?'])

  return;

 end

 CR=CR2+CR3;

 if CR>0.1

  disp(['CR=',num2str(CR),'>0.1,óDí¨1y×éo?òDì2é£?'])

  return;

 end

 [lamda2 w2 CI2 CR2]=TRfun(A)

 [lamda3_1 w3_1 CI3_1]=TRfun(B1)

 [lamda3_2 w3_2 CI3_2]=TRfun(B2)

 [lamda3_3 w3_3 CI3_3]=TRfun(B3)

 [lamda3_4 w3_4 CI3_4]=TRfun(B4)

 [lamda3_5 w3_5 CI3_5]=TRfun(B5)

 w3

 CR2

 CR3

 CR

 2、函数式M文件:

  %输入参数:A为成对比较阵(正互反方阵)

 %输出参数:

 % lamda为最大特征根值

 % w为A的归一化特征列向量(权向量)

 % CI为一致性指标值

 % CR为一致性比率值

 function [lamda w CI CR]=TRfun(A)

 [lamda w]=HEfun(A); %求A的最大特征根及归一化特征列向量

 %随机一致性指标RI的数值(下标对应成对比较方阵的阶数):

 RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];

 n=size(A,1);

 CI=(lamda-n)/(n-1); %一致性指标,CI=0时A为一致阵;CI越大A的不一致程度越严重

 CR=CI/RI(n); %一致性比率,CR<0.1时认为A的不一致程度在容许范围之内

 实验结果及分析

推荐访问:特征 实验 数模 向量 算法