break;
end
w0=w;
end
lambda=sum(ww./w0)/n;
☆
(2)用幂法函数求A的最大特征根和特征向量。
调用及运行结果(见[264]):
(3)和法(见[264])
A为n×n正互反矩阵,算法步骤如下:
a.将A的每一列向量归一化得
;
b.对
按行求和得
;
c.将
归一化
即为近似特征向量;
d.计算
,作为最大特征根的近似值。
函数式m文件如下:
function[lambdaw]=p264HE(A)
%和法——求正互反阵最大特征根和特征向量
%A正互反方阵
%lambda最大特征根
%w归一化特征列向量
AA=A/diag(sum(A));%a.将A的每一列向量归一化
ww=sum(AA,2);%b.对AA按行求和,ww为列向量
w=ww./sum(ww);%c.归一化,得w为近似特征列向量
lambda=sum(A*w./w)/length(A);%d.计算最大特征根的近似值λ
☆(3)用和法函数求A的最大特征根和特征向量。
调用及运行结果(见[264]):
(4)根法(见[264])
A为n×n正互反矩阵,算法步骤如下:
a.将A的每一列向量归一化得
;
b.对
按行求积并开n次方得
;
c.将
归一化
即为近似特征向量;
d.计算
,作为最大特征根的近似值。
★(4)编写根法函数,用该函数求A的最大特征根和特征向量。
[提示:
sum,prod,diag]
对矩阵A按行求和的调用为sum(A,2)。
对矩阵A按行求积的调用为prod(A,2)。
diag(V),用向量V构造对角矩阵。
nargin,存放函数输入自变量的数目。
编写的程序和调用及运行结果(见[264]):
function[lambdaw]=p264GEN(A)
%根法——求正互反阵最大特征根和特征向量
%A正互反方阵
%lambda最大特征根
%w归一化特征列向量
n=length(A);
AA=A/diag(sum(A));%a.将A的每一列向量归一化
ww=(prod(AA,2)).^(1/n);%b.对AA按行求积并开n次方,ww为列向量
w=ww./sum(ww);%c.归一化,得w为近似特征列向量
lambda=sum(A*w./w)/n;%d.计算最大特征根的近似值λ
1.2(验证,编程)旅游决策问题p250~256
在下面程序中,脚本式m文件p250.m调用函数式m文件p250fun.m(求A的最大特征根及归一化特征列向量、一致性指标值CI、一致性比率值CR),p250fun.m中调用另一个函数式m文件p264HE.m(求A的最大特征根及归一化特征列向量)。
(1)脚本式m文件如下:
%旅游决策问题
%文件名:
p250.m
clear;clc;formatcompact;
%层次分析法的基本步骤:
%1.建立层次结构模型
%见p250图1选择旅游地的层次结构
%2.构造成对比较阵
%第2层为准则层:
景色、费用、居住、饮食和旅途5个准则
A=[11/2433;...
21755;...
1/41/711/21/3;...
1/31/5211;
1/31/5311];
%第3层为方案层:
P1、P2和P3等3个供选择地点
B1=[125;1/212;1/51/21];
B2=[11/31/8;311/3;831];
B3=[113;113;1/31/31];
B4=[134;1/311;1/411];
B5=[111/4;111/4;441];
B=['B1';'B2';'B3';'B4';'B5'];
%3.计算权向量并做一致性检查
%第2层
[lambda2w2CI2CR2]=p250fun(A);
ifCR2>=0.1%成对比较阵A的一致性检验
disp(['CR2=',num2str(CR2),'>0.1,A没有通过一致性检查!
'])
return;
end
%第3层
lambda3=zeros(1,5);w3k=zeros(3,5);CI3k=zeros(1,5);CR3k=zeros(1,5);
fork=1:
5
[lambda3(k)w3k(:
k)CI3k(k)CR3k(k)]=p250fun(eval(B(k,:
)));
ifCR3k(k)>0.1%成对比较阵B1的一致性检验
disp(['CR3k(k)=',num2str(CR3k(k)),'>0.1,B',num2str(k),'没有通过一致性检查!
'])
return;
end
end
%4.计算组合权向量并做组合一致性检验
w3=w3k*w2;%最下层(第3层)对目标(第1层)的组合权向量
%第3层组合一致性检验(从第3层开始)
CI3=CI3k*w2;
%随机一致性指标RI的数值(下标对应成对比较方阵的阶数):
RI=[000.580.901.121.241.321.411.451.491.51];
RI3=RI([3,3,3,3,3])*w2;%标量
CR3=CI3/RI3;
ifCR3>0.1
disp(['CR3=',num2str(CR3),'>0.1,第3层没有通过组合一致性检查!
'])
return;
end
%最下层(第3层)对第1层的组合一致性比率为
CR=CR2+CR3;
ifCR>0.1
disp(['CR=',num2str(CR),'>0.1,没有通过组合一致性检查!
'])
return;
end
%添加命令用于显示有关结果:
(2)函数式m文件如下:
function[lamdawCICR]=p250fun(A)
%求A的最大特征根及归一化特征列向量、一致性指标值CI、一致性比率值CR
%A成对比较阵(正互反方阵)
%lamda最大特征根值
%wA的归一化特征列向量(权向量)
%CI一致性指标值
%CR一致性比率值
[lamdaw]=p264HE(A);%求A的最大特征根及归一化特征列向量
%随机一致性指标RI的数值(下标对应成对比较方阵的阶数):
RI=[000.580.901.121.241.321.411.451.491.51];
n=length(A);
CI=(lamda-n)/(n-1);%一致性指标,CI=0时A为一致阵;CI越大A的不一致程度越严重
CR=CI/RI(n);%一致性比率,CR<0.1时认为A的不一致程度在容许范围之内
要求:
请仔细阅读以上程序,完成以下实验:
在脚本式m文件后面添加命令,使
★①显示第2层的数据。
包括:
最大特征根λ;特征向量(权向量)w;一致性指标CI;一致性比率CR。
添加的命令和运行结果(见[254]):
lambda2,w2,CI2,CR2
★②显示第3层的数据。
包括:
特征向量(权向量)w;最大特征根λ;一致性指标CI。
添加的命令和运行结果(见[255]表3):
w3k,lambda3,CI3k
★③显示最下层(第3层)对目标(第1层)的组合权向量。
添加的命令和运行结果(见[255]):
w3
★④显示第2层和第3层的组合一致性比率,以及最下层对第1层的组合一致性比率。
添加的命令和运行结果(见[256]):
CR2,CR3,CR
2.循环比赛的名次
2.1(编程,验证)双向连通竞赛图(4顶点)的名次排序p270,271~272
4个顶点的竞赛图(教材p270中图3(4))如下:
4个队得分(获胜场数)为(2,2,1,1)由得分排名为{(1,2),(3,4)},该竞赛图是双向连通图,属于第2种类型,可通过以下方法给出名次排序。
该图的邻接矩阵为:
★
(1)编写一个程序,求出1~8级得分向量,并依据8级得分向量给出排名。
给出程序和运行结果(比较[272]):
clear;clc;formatcompact;formatshortg;
A=[0110;0011;0001;1000];%邻接矩阵
n=length(A);%方阵A的阶数
s=A*ones(n,1);disp(s');
fork=2:
8
s=A*s;disp(s');
end
[~,k]=sort(s,'descend');%降序
k'%排名
(2)求元素互不相等的得分向量法
得分向量为
s=A*ones
其中,
记s
(1)=s
s(k)=A*s(k-1)=Ak*ones,k=2,3,…(s(k)称为k级得分向量)
程序如下:
%双向连通竞赛图的名次排序(求元素不等的得分向量)
%文件名:
p272_1.m
clear;clc;formatcompact;formatshortg;
A=[0110;0011;0001;1000];%邻接矩阵
n=length(A);%方阵A的阶数
s=A*ones(n,1);k=1;
whilelength(unique(s))s=A*s;k=k+1;
end
k%k级得分向量
s'%元素不等的得分列向量
[~,kk]=sort(s,'descend');%降序
kk'%排名
☆
(2)运行求元素互不相等的得分向量法程序。
运行结果(比较[272]):
(3)特征根法
对于n≥4个顶点的双向连通竞赛图,其邻接矩阵A为素阵(存在正整数r,使Ar>0),且有
其中,1为全1列向量,λ为最大实特征根且为正,s为其特征列向量。
%双向连通竞赛图的名次排序(特征根法)
%文件名:
p272_2.m
clear;clc;formatcompact;formatshortg;
A=[0110;0011;0001;1000];%邻接矩阵
[V,D]=eig(A);%返回A的特征值和特征向量。
%其中D为A的特征值构成的对角阵,每个特征值
%对应的V的列为属于该特征值的一个特征向量。
D=diag(D);%返回矩阵D的对角线元素构成列向量。
D=D.*(imag(D)==0);%复数特征值用0代替,实数的则不变
[lamda,k]=max(D);
lamda
s=V(:
k)/sum(V(:
k));%最大特征根对应的特征列向量(归一化)
[~,k]=sort(s,'descend');%降序
s',k'
☆(3)运行特征根法程序。
给出运行结果(比较[272]):
2.2(验证)双向连通竞赛图(6顶点)的名次排序p270,272~273
6个顶点的竞赛图(教材p270中图1)如下:
该图的邻接矩阵为:
要求:
使用上题的程序。
☆
(1)求出1~4级得分向量,并依据4级得分向量给出排名。
运行结果(比较[272]):
☆
(2)运行求元素互不相等的得分向量法程序。
运行结果:
☆(3)运行特征根法程序。
运行结果(比较[273]):
3.公平的席位分配
3.1(验证)参照惯例的席位分配方法p278~279
某学校有甲乙丙三个系共有200名学生,其中甲系有103人,乙系有63人,丙系有34人。
(1)有20个代表席位,采用参照惯例的席位分配方法,分别求出甲乙丙系的“席位分配结果”。
(2)有21个代表席位,采用参照惯例的席位分配方法,分别求出甲乙丙系的“席位分配结果”。
下面是参照惯例的席位分配方法的求解函数:
function[qi,ni]=p278fun(p,n)
%p各单位人数(列向量)
%n总席位(标量)
%qi按比例分配的席位(列向量)
%ni参照惯例的结果(列向量)
qi=n*p/sum(p);%按比例各单位所得席位(可能含小数)
ni=fix(qi);%各单位所得席位取整
m=n-sum(ni);%可能有没分配完的席位
ifm>0%席位没分完
[~,k]=sort(qi-ni,'descend');%按降序排序(缺省为升序)
ni(k(1:
m))=ni(k(1:
m))+1;%排在前m个,加1
end
要求:
①在命令窗口分别调用以上函数求解(使用最佳定点或浮点格式(5位数字)控制命令formatshortg)。
②两个结果比较,合理吗?
☆题
(1)(20个代表席位)的调用及结果(比较[279]表1)。
☆题
(2)(21个代表席位)的调用及结果(比较[279]表1)。
3.2(验证)Q值方法p280~281
(教材:
8.4公平的席位分配)
某学校有甲乙丙三个系共有200名学生,其中甲系有103人,乙系有63人,丙系有34人。
(1)有20个代表席位,采用Q值法分别求出甲乙丙系的“席位分配结果”。
(2)有21个代表席位,采用Q值法分别求出甲乙丙系的“席位分配结果”。
下面是Q值法的求解函数:
function[qi,ni]=p280fun(p,n)
%p各单位人数(列向量)
%n总席位(标量)
%qi按比例分配的席位(列向量)
%ni参照惯例的结果(列向量)
qi=n*p/sum(p);
ni=fix(qi);
whilesum(ni)Qi=p.^2./(ni.*(ni+1));%ni>0
[~,i]=max(Qi);%求最大值元素及下标
ni(i)=ni(i)+1;
end
要求:
①在命令窗口分别调用以上函数求解(使用最佳定点或浮点格式(5位数字)控制命令formatshortg)。
②两个结果比较,合理吗?
☆题
(1)(20个代表席位)的调用及结果(见[281])。
☆题
(2)(21个代表席位)的调用及结果(见[281])。
附1:
实验提示
附2:
第8章离散模型
[249]8.1层次分析模型
[254]题1.2①答案
[255]题1.2②③答案
[256]题1.2④答案
[263]题1.1
(2)幂法
[264]题1.1(3)(4)和法、根法,答案
[269]8.2循环比赛的名次
[272]题2.1、2.2
(1)答案
[273]题2.2(3)答案****本节完****
[278]8.4公平的席位分配
[279]题3.1答案
[281]题3.2答案
[286]****本节完****