ism模型的matlab实现
ISM模型的 matlab实现张文龙、赵洋、张强、滕凤君程序设计思路:1、可达矩阵的求解A:邻接矩阵E=zeros( A);通过布尔运算求出 A^2、 A^3… 直至 A^n=A^n-1,停止运算,此时的 A^n便是要求的可达矩阵。具体实施:通过将上次循环得出来的 A赋给 E,并判断新一轮循环得出的 A是否与 E相等,决定是否终止循环。循环终止意味着此时的 A就是最终的可达矩阵。具体程序如下:n=( 请输入矩阵维数 : );A=( 请输入邻接矩阵 : );E=zeros(n);B=A;while(norm(A-E)>0)E=A;for i=1:nfor j=1:nfor k=1:nif A(i,k)endendendendendA2、区域划分找出各个元素相对应的可达集 P、先行集 Q以及两者的交集 S求解 P:找出每一行中元素为 1对应的列求解 Q:找出每一列中元素为 1对应的行求解 S:套用 Matlab本身自带的函数S=intersect(P,Q);或者编写 M文件函数,如下所示:具体程序如下:for i=1:nP=find(A(i,:));Q=find(A(:,i));S=intersect(P,Q);P;Q;S;3、级别划分因为 S是 P与 Q的交集,所以只需判断 P与 S的长度是否相等便可进行级别划分。M=zeros( n);r=1; r为第几级求出每个元素的 P、 Q、 S,再将相应的对角线元素 A( i, i)赋予 0,通过查找对角线为 0的元素位置将所对应的行列均赋值 0。每次循环 r自增 1,再进行循环,求出每一级的元素,直至 A==M。具体程序如下:r=1;M=zeros(n);while(~isequal(A,M))for i=1:nP=find(A(i,:));Q=find(A(:,i));S=intersect(P,Q);P;Q;S;if(~isempty(P)endendfor i=1:nif A(i,i)==0A(i,:)=0;A(:,i)=0;endendr=r+1;end4.课本例题程序验证请输入矩阵维数 :7请输入邻接矩阵 :1 1 1 0 1 1 00 1 0 0 1 1 00 1 1 0 1 1 00 1 1 1 1 1 00 0 0 0 1 0 00 1 0 0 1 1 00 1 1 0 1 1 1