2013深圳杯数学建模B题(8)

2019-01-26 21:36

function std=cwstd(vector) %标准化矩阵 cwsum=sum(vector,1); [a,b]=size(vector); for i=1:a for j=1:b

std(i,j)=vector(i,j)/cwsum(j); end end

%cwfac.m 函数 计算特征根,按贡献率选择主要成分 function result=cwfac(vector); fprintf('相关系数矩阵:\\n')

std=CORRCOEF(vector); %计算相关系数矩阵 disp(std)

[vec,val]=eig(std) ; %求特征值(val)及特征向量(vec) fprintf('特征向量:\\n') disp(vec)

fprintf('特征值:\\n') disp(val)

newval=diag(val) ; %选取主对角线即构成特征向量序列

[y,i]=sort(newval); %对特征根进行排序,y为升序排序结果,i为原序号 fprintf('特征根排序:\\n') for z=1:length(y)

newy(z)=y(length(y)+1-z); %进行降序排列 end

fprintf('%g\\n',newy)

rate=y/sum(y); %计算贡献率(升序) fprintf('\\n贡献率:\\n')

newrate=newy/sum(newy) ;%计算新贡献率(降序) disp(newrate)

34

sumrate=0;newi=[]; for k=length(y):-1:1

sumrate=sumrate+rate(k); %计算累计贡献率 newi(length(y)+1-k)=i(k) ; if sumrate>0.85 break; end

end %记下累积贡献率达到85%的特征值的序号,放入newi

fprintf('主成分数:%g\\n',length(newi)); %序号数表示主成分数 for p=1:length(newi) newm(p)=newrate(p);

end %选取主成分的贡献率 fprintf('获得对应主成分序号及其权重值:\\n') disp(newi) %对应序号 result=newm/sum(newm); %得出权重 disp(result)

(2)用主层次分析所得权重求拥堵指数程序 %funydzs.m 拥堵指数求解程序 %直接运行

function ydzs=funydzs(zcf) %输入主成分数据 zcf=[ 390 420

0.406593407 0.581508876

7 4

4810 3931

5 4 4 4 4 4

3370 3671 4825 2546 879 654

35

-2.857142857 0.398816568 38.26086957 43.72093023 7.384615385 11.50413223 31.83673469

0.543047337 0.713757396 0.376627219 0.130029586 0.096745562

17.92207792 240

0.064497041

7

4 436

0.489433643 5790

3 4

1134 4104

413.6842105 13.46938776

0.223668639 0.607100592

4034

15 0.47739645 5 26.66666667 25.45454545 18.66666667 16.28571429 26.53846154 31.60305344

0.605621302 0.589792899 0.201923077 0.306952663 0.094674556 0.078846154

4 4 4 4 4 4

4094 3987 1365 2075 640 533 ]

[a,b]=size(zcf);

fprintf('主成分数据(已按权重高低左右排列):\\n') disp(zcf)

for j=1:b %求隶属度(纵向) for i=1:a o=1:a; lie=zcf(o,j); if j==3

lsd(i,j)=(zcf(i,j)-min(lie))/(max(lie)-min(lie)); %越大越优隶属度 else

lsd(i,j)=(max(lie)-zcf(i,j))/(max(lie)-min(lie));%越小越优隶属度 end end end

fprintf('隶属度矩阵:\\n')

lsd'; %隶属度矩阵应进行转置 disp(lsd')

fprintf('拥堵指数(权重向量×隶属度矩阵):\\n') W=[0.27 0.26 0.24 0.23];

36

ydzs=W*lsd' ; end

(3)迪杰斯特拉最短路算法程序 function [S,D]=minRoute(i,m,W)

%图与网络论中求最短路径的Dijkstra算法 M-函数 %格式 [S,D]=minroute(i,n,W)

% i为最短路径的起始点,m为图顶点数,W为图的带权邻接矩阵, % 不构成边的两顶点之间的权用inf表示。显示结果为:S的每 % 一列从上到下记录了从始点到终点的最短路径所经顶点的序号; % D是一行向量,记录了S中所示路径的大小; dd=[];tt=[];ss=[];ss(1,1)=i;V=1:m;V(i)=[];dd=[0;i];

% dd的第二行是每次求出的最短路径的终点,第一行是最短路径的值 kk=2;[mdd,ndd]=size(dd); while ~isempty(V)

[tmpd,j]=min(W(i,V));tmpj=V(j); for k=2:ndd

[tmp1,jj]=min(dd(1,k)+W(dd(2,k),V)); tmp2=V(jj);tt(k-1,:)=[tmp1,tmp2,jj]; end

tmp=[tmpd,tmpj,j;tt];[tmp3,tmp4]=min(tmp(:,1)); if tmp3==tmpd, ss(1:2,kk)=[i;tmp(tmp4,2)]; else,tmp5=find(ss(:,tmp4)~=0);tmp6=length(tmp5); if dd(2,tmp4)==ss(tmp6,tmp4)

ss(1:tmp6+1,kk)=[ss(tmp5,tmp4);tmp(tmp4,2)]; else, ss(1:3,kk)=[i;dd(2,tmp4);tmp(tmp4,2)]; end;end

dd=[dd,[tmp3;tmp(tmp4,2)]];V(tmp(tmp4,3))=[]; [mdd,ndd]=size(dd);kk=kk+1; end; S=ss; D=dd(1,:);

37


2013深圳杯数学建模B题(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:软件工程课程设计--研究生选课系统

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: