当前位置:文档之家› 数学建模实验答案离散模型

数学建模实验答案离散模型

实验09 离散模型(2学时)(第8章 离散模型)1. 层次分析模型1.1(验证,编程)正互反阵最大特征根和特征向量的实用算法p263~264已知正互反阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=14/16/1412/1621A 注:[263]定理2 n 阶正互反阵A 的最大特征根 ≥ n 。

★(1) 用MATLAB 函数求A 的最大特征根和特征向量。

(2) 幂法(见[263])A 为n×n 正互反矩阵,算法步骤如下:a. 任取n 维非负归一化初始列向量(分量之和为1)(0)w ;b. 计算(1)(),0,1,2,k k wAw k +==%L ; c. (1)k w +%归一化,即令(1)(1)(1)1k k n k i i ww w+++==∑%%; d. 对于预先给定的精度ε,当(1)()||(1,2,,)k k ii w w i n ε+-<=L 时,(1)k w +即为所求的特征向量;否则返回到步骤b ; e. 计算最大特征根(1)()11k n i k i iw n w λ+==∑%。

注:()()(1)()(1)()1,2,,k k k k k i k i Aw w w w w i n w λλλ++≈⇒≈⇒∴≈=%%L函数式m 文件如下:n=length(A);%取方阵A 的阶数w0=rand(n,1); w0=w0/sum(w0);%任取归一化初始列向量while 1ww=A*w0;w=ww/sum(ww); %归一化if all(abs(w-w0)<d)break ;endw0=w;endlambda=sum(ww./w0)/n;☆(2) 用幂法函数求A 的最大特征根和特征向量。

(3) 和法(见[264])A 为n×n 正互反矩阵,算法步骤如下:a. 将A 的每一列向量归一化得∑==n i ijij ij a a w 1~; b. 对ijw ~按行求和得∑==nj ij i w w 1~~;c. 将i w ~归一化T n n i i ii w w w w ww w ),,,(,~~211Λ==∑=即为近似特征向量;d. 计算∑==n i ii w Aw n 1)(1λ,作为最大特征根的近似值。

函数式m 文件如下:function [lambda w]=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 的每一列向量归一化得∑==n i ijij ij a a w 1~; b. 对ij w ~按行求积并开n 次方得∏==n j n iji w w 11)~(~;c. 将i w ~归一化T n n i ii i w w w w w w w ),,,(,~~211Λ==∑=即为近似特征向量; d. 计算∑==n i ii w Aw n 1)(1λ,作为最大特征根的近似值。

★(4) 编写根法函数,用该函数求A 的最大特征根和特征向量。

[提示:sum, prod, diag]对矩阵A 按行求和的调用为sum(A, 2)。

对矩阵A 按行求积的调用为prod(A, 2)。

diag(V),用向量V 构造对角矩阵。

nargin ,存放函数输入自变量的数目。

1.2(验证,编程)旅游决策问题p250~256在下面程序中,脚本式m文件p250.m调用函数式m文件p250fun.m(求A的最大特征根及归一化特征列向量、一致性指标值CI、一致性比率值CR),p250fun.m中调用另一个函数式m文件p264HE.m(求A的最大特征根及归一化特征列向量)。

(1) 脚本式m文件如下:%旅游决策问题%文件名:p250.mclear; clc; format compact;%层次分析法的基本步骤:%1.建立层次结构模型% 见p250 图1 选择旅游地的层次结构%2.构造成对比较阵%第2层为准则层:景色、费用、居住、饮食和旅途5个准则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];%第3层为方案层:P1、P2和P3等3个供选择地点要求:请仔细阅读以上程序,完成以下实验:在脚本式m文件后面添加命令,使★①显示第2层的数据。

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

添加的命令和运行结果(见[254]):lambda2,w2,CI2,CR2★②显示第3层的数据。

包括:特征向量(权向量)w;最大特征根λ;一致性指标CI。

w3k,lambda3,CI3k★③显示最下层(第3层)对目标(第1层)的组合权向量。

添加的命令和运行结果(见[255]):w3★④显示第2层和第3层的组合一致性比率,以及最下层对第1层的组合一致性比率。

添加的命令和运行结果(见[256]):CR2,CR3,CR2. 循环比赛的名次2.1(编程,验证)双向连通竞赛图(4顶点)的名次排序p270, 271~2724个顶点的竞赛图(教材p270中图3(4))如下:4个队得分(获胜场数)为(2,2,1,1)由得分排名为{(1,2),(3,4)},该竞赛图是双向连通图,属于第2种类型,可通过以下方法给出名次排序。

该图的邻接矩阵为:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0001100011000110A★(1) 编写一个程序,求出1~8级得分向量,并依据8级得分向量给出排名。

给出程序和运行结果(比较[272]):clear; clc; format compact ; format short g ; A=[0 1 1 0;0 0 1 1;0 0 0 1;1 0 0 0]; %邻接矩阵1342n=length(A);%方阵A 的阶数 s=A*ones(n,1); disp(s'); for k=2:8s=A*s; disp(s'); end[~,k]=sort(s,'descend'); %降序 k' %排名(2) 求元素互不相等的得分向量法 得分向量为 s=A*ones其中,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=1111ones记s (1)=ss (k)=A*s (k-1)=A k *ones, k=2, 3, … (s (k)称为k 级得分向量)程序如下:%双向连通竞赛图的名次排序(求元素不等的得分向量) %文件名:p272_1.mclear; clc; format compact ; format short g ; A=[0 1 1 0;0 0 1 1;0 0 0 1;1 0 0 0]; %邻接矩阵 n=length(A);%方阵A 的阶数 s=A*ones(n,1); k=1;while length(unique(s))<n %unique(s)去掉s 中的重复元素 s=A*s; k=k+1; endk % k 级得分向量s' %元素不等的得分列向量 [~,kk]=sort(s,'descend'); %降序 kk' %排名☆(2) 运行求元素互不相等的得分向量法程序。

运行结果(比较[272])(3) 特征根法对于n≥4个顶点的双向连通竞赛图,其邻接矩阵A 为素阵(存在正整数r ,使A r >0),且有1limk kk A s λ→∞=其中,1为全1列向量,λ为最大实特征根且为正,s 为其特征列向量。

%双向连通竞赛图的名次排序(特征根法)%文件名:p272_2.mclear; clc; format compact; format short g;A=[0 1 1 0;0 0 1 1;0 0 0 1;1 0 0 0];%邻接矩阵[V,D]=eig(A); %返回A的特征值和特征向量。

%其中D为A的特征值构成的对角阵,每个特征值%对应的V的列为属于该特征值的一个特征向量。

D=diag(D); %返回矩阵D的对角线元素构成列向量。

D=D.*(imag(D)==0); %复数特征值用0代替,实数的则不变[lamda,k]=max(D);lamdas=V(:,k)/sum(V(:,k)); %最大特征根对应的特征列向量(归一化)[~,k]=sort(s,'descend'); %降序s', k'运行特征根法程序。

给出运行结果(比较[272])2.2(验证)双向连通竞赛图(6顶点)的名次排序p270,272~2736个顶点的竞赛图(教材p270中图1)如下:该图的邻接矩阵为:010111000111110100000011001001001000A ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦要求:使用上题的程序。

☆(1) 求出1~4级得分向量,并依据4级得分向量给出排名。

运行结果(比较[272])6 435运行特征根法程序。

运行结果(比较[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); %可能有没分配完的席位if m>0 %席位没分完[~,k]=sort(qi-ni,'descend'); %按降序排序(缺省为升序)ni(k(1: m))=ni(k(1: m))+1; %排在前m个,加1end要求:①在命令窗口分别调用以上函数求解(使用最佳定点或浮点格式(5位数字)控制命令format short g)。

相关主题