ISM的计算机实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ISM技术的计算机实现陈林艺1302011006辛全超1302011066学员二旅五营摘要:本文将解析结构模型(ISM)的传统算法利用MATLAB语言进行实现,应用矩阵的运算法则,把系统中的要素及要素之间的上下位关系用邻接矩阵表示,并做出系统的关系图,使复杂的系统分解成多级递阶结构形式。关键词:邻接矩阵、可达矩阵、级别划分、ISM引言:ISM法(InterpretativeStructuralModelingMethod,)是一种分析系统结构的方法。解析结构模型可将系统单元之间复杂、凌乱的关系分解成清晰的、多级递阶的结构形式。凡系统必有结构,系统的结构决定系统功能;破坏结构,就会完全破坏系统的总体功能,这说明了系统结构的普遍性与重要性。总之,要研究一个由大量单元组成的、各单元之间又存在这相互关系的系统,就必须了解系统的结构。20世纪70年代以来解析结构模型(ISM)和其他结构模型在社会经济系统中得到了广泛的应用,解析结构模型属于静态的定性模型,建立系统的递阶结构模型,是ISM技术的核心内容。如果用传统的矩阵算法来划分系统层次,其运算量之大是让任何人都难以承受的。因此采用一种简便的算法设计开发出一个ISM法系统的程序是很有必要的。一、ISM实现的算法思想系统中的要素及要素之间的上下位关系可用对应的矩阵表示,这种矩阵称为关系矩阵,其中最直接的一种是邻接矩阵,用来表示各要素之间的连接关系。由于邻接矩阵是布尔矩阵,所以矩阵元素按布尔运算(逻辑和、逻辑与、逻辑乘)的法则进行运算,将邻接矩阵转化为可达矩阵,再将矩阵进行级间分解,然后再通过人-机结合,使复杂的系统分解成多级递阶结构形式。二、ISM技术算法的功能设计算法以MATLAB软件运行后,在kedaxingjuzhen.m文件中将系统的关系矩阵输入,例如:A=[1000000;1100000;0011110;0001110;0000100;0001110;1100001];运行Guanxitu.m文件后,在CommandWindow界面中分别输入:A(邻接矩阵)、R(可达矩阵)、L(级别划分矩阵)。在.m文件中将系统的关系矩阵输入,例如:rel=[1000000;1100000;0011110;0001110;0000100;0001110;1100001];运行后在Figure1对话框中将会出现矩阵的关系图。三、ISM技术的算法代码Guanxitu.m文件代码%ISM解释型结构模型根据邻接矩阵求可达矩阵,进行级划分的算法%step1求可达矩阵%A是邻接矩阵,可以由用户输入A=[1000000;1100000;0011110;0001110;0000100;0001110;1100001];N=size(A,1);%N是矩阵的阶数,是所有要素的数目r=[N:N];r=A;for(n=1:1:N)for(i=1:1:N)for(j=1:1:N)sum=0.0;for(k=1:1:N)sum=sum+r(i,k)*A(k,j);%此处是采用普通的矩阵乘法,但是下面可以根据sum的值是否大于或等于1%来判断连通型,从而等价得到r(i,j)的实际值。endif(sum=1)r(i,j)=1;elser(i,j)=0;endendendendR=r;%R是可达矩阵%step2级别划分L=[N:N];%L是二维数组,存储级划分的结果,下面首先初始化为0for(i=1:1:N)for(j=1:1:N)L(i,j)=0;endendfor(p=1:1:N)%p是存储层次级数l的变量,也控制了总循环的次数k=1;%k是记录每一级(p)内要素,在L内存储下标的变量,形式为L(p,k)%下面是利用二重循环,求解p级内的要素for(i=1:1:N)sign=0;%是标志变量,初始为0,如果对某要素考察后,其值仍为0,则表明该要素是顶点要素。否则,不是顶点要素sum=0;%sum是计数器,用于判断当前考察的要素所在的矩阵行向量是否是值全为0的向量。因为本程序的算法是这样的,%即如果已经发现某要素是某级的顶点,则在求下一级顶点时,需要去除上面各级的要素。在本程序是通过变通的方法实现%相同的目的,即所有已经是顶点的要素的所在行和列的值全部重新置为0。这样就等价于删除了这些上级顶点。从而简化了%程序的算法。for(j=1:1:N)sum=sum+r(i,j);if(r(i,j)==1&&(r(i,j)~=r(j,i)))%算法的关键,R(i)=R(i)交A(i),只需要判断要素i所在的行中,%所有值为1的矩阵元素R(i,j),其对称矩阵元素R(j,i)的值如果也为1,则说明R(i)=R(i)交A(i)成立。否则%只要有一个元素不满足该条件(此时标志变量的值赋为1),就说明该要素i不是顶点。进行下一要素i+1的考察。sign=1;breakendendif(sum~=0)%sum不为0,说明该要素不是已经求出的上级的顶点,可能是新级别的顶点,如果sum为0,则说明是已经%求出的顶点if(sign==0)%sign为0,说明是新顶点L(p,k)=i;%在L内记录新顶点,p为级别k=k+1;endendend%已经对p级别的顶点计算完毕,下面的程序是把p级的顶点所在的行和列的矩阵元素全部置为0,以在后面的计算表示老顶点for(g=1:1:N)if(L(p,g)~=0)for(h=1:1:N)r(L(p,g),h)=0;r(h,L(p,g))=0;endendend%进行下一次循环,找出p+1级别的顶点元素enddisp('输入A即可获得邻接矩阵;输入R即可获得可达矩阵;输入L即可获得级别划分的矩阵:')kedaxingjuzhen.m文件代码functionguanxitu(~,control)%由邻接矩阵画图%输入为邻接矩阵,必须为方阵;%第二个输入为控制量,0表示无向图,1表示有向图,默认值为1rel=[1000000;1100000;0011110;0001110;0000100;0001110;1100001];r_size=size(rel);ifnargin2control=1;endifr_size(1)~=r_size(2)disp('WrongInput!Theinputmustbeasquarematrix!');return;endlen=r_size(1);rho=10;%限制图尺寸的大小r=2/1.05^len;%点的半径theta=0:(2*pi/len):2*pi*(1-1/len);[pointx,pointy]=pol2cart(theta',rho);theta=0:pi/36:2*pi;[tempx,tempy]=pol2cart(theta',r);point=[pointx,pointy];holdonfori=1:lentemp=[tempx,tempy]+[point(i,1)*ones(length(tempx),1),point(i,2)*ones(length(tempx),1)];plot(temp(:,1),temp(:,2),'r');text(point(i,1)-0.3,point(i,2),num2str(i));%画点endfori=1:lenforj=1:lenifrel(i,j)link_plot(point(i,:),point(j,:),r,control);%连接有关系的点endendendset(gca,'XLim',[-rho-r,rho+r],'YLim',[-rho-r,rho+r]);axisoffend%%functionlink_plot(point1,point2,r,control)%连接两点temp=point2-point1;if(~temp(1))&&(~temp(2))return;%不画子回路;endtheta=cart2pol(temp(1),temp(2));[point1_x,point1_y]=pol2cart(theta,r);point_1=[point1_x,point1_y]+point1;[point2_x,point2_y]=pol2cart(theta+(2*(thetapi)-1)*pi,r);point_2=[point2_x,point2_y]+point2;ifcontrolarrow(point_1,point_2);elseplot([point_1(1),point_2(1)],[point_1(2),point_2(2)]);end%%functionarrow(start,stop,l)%start,stop分别为起点和终点%l为箭头的线长度,默认为主线长的1/10t=0.1;ang=15/180*pi;temp=stop(1)-start(1)+1i*(stop(2)-start(2));L=abs(temp);P=angle(temp);ifnargin3l=t*L;endp1=P-ang;p2=P+ang;a=[stop(1)-l*cos(p1)stop(2)-l*sin(p1)];b=[stop(1)-l*cos(p2)stop(2)-l*sin(p2)];holdonplot([start(1)stop(1)],[start(2)stop(2)]);plot([a(1)stop(1)],[a(2)stop(2)]);plot([b(1)stop(1)],[b(2)stop(2)]);endend四、MATLAB运行界面矩阵关系图

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功