数学建模社区-数学中国

标题: gplot的用于画矩阵的结构图 [打印本页]

作者: ldydc    时间: 2009-8-27 15:28
标题: gplot的用于画矩阵的结构图
gplot的用于画矩阵的结构图

gplot的用法:
gplot(A,xy),A说的是相应点的邻接矩阵,而后面的xy是以相应点的坐标为元素的列向量。举个例子,A=[1 1 0;1 0 0;0 0 1];xy=[x(1) y(1);x(2) y(2);x(3) y(3)]。x(2) y(2)可以可以看成一个二维点的坐标,于是xy可以看成由两个三维列向量的对应点组成的三个点的坐标,前面的矩阵A可以看成对应三个点的联系。如果对应位置有关系则相应位置的元素不为零,否则为零。也就是说前面的邻接矩阵是逻辑的邻接矩阵,有关系对应一个非零数(任意非零数),没关系对应零。
例如:A=[0,1,0,1,1,1;0,0,0,1,1,1;1,1,0,1,0,0;0,0,0,0,1,1;0,0,1,0,0,1;0,0,1,0,0,0]
xy=[-0.5 1;0.5 1;1.5 0;0.5 -1;-0.5,-1;-1.5,0]
a=-max(abs(xy(:,1)))*1.1;b=max(abs(xy(:,1)))*1.1;
c=-max(abs(xy(:,2)))*1.1;d=max(abs(xy(:,2)))*1.1;
gplot(A,xy),axis([a b c d])

如果要给邻接矩阵的图画为有向图,则可使用如下程序:
function y=graphy_plot(A,xy,l,p)
       % Axyll=0      
       %l~=0,p
a=-max(abs(xy(:,1)))*1.1;b=max(abs(xy(:,1)))*1.1;
c=-max(abs(xy(:,2)))*1.1;d=max(abs(xy(:,2)))*1.1;
if l==0
   gplot(A,xy),axis([a b c d]),hold on,
elseif l~=0
   U=[];V=[];X=[];Y=[];
   n=length(A(:,1)) ;
   for i=1:n
      k=find(A(i,~=0);
      m=length(k);
      if(m~=0)
         for j=1:m
            u(1)=(xy(k(j),1)-xy(i,1)); v(1)=(xy(k(j),2)-xy(i,2));
            u(2)=eps;     v(2)=eps;     U=[u;U];V=[v;V];
            X=[[xy(i,1) xy(k(j),1)];X]; Y=[[xy(i,2) xy(k(j),2)];Y];
         end
          text(xy(i,1),xy(i,2),['\bullet\leftarrow\fontsize{16}\it{V}',...
          num2str(i)]);hold on,
       end
          end
   gplot(A,xy),axis([a b c d]),hold on,
   h=quiver(X,Y,U,V,p);set(h,'color','red');hold on,
   plot(xy(:,1),xy(:,2),'k.','markersize',12),hold on,
end  , hold off
作者: 建模迷    时间: 2009-8-28 21:48
很复杂,你一定花了不少心思吧!!!
作者: jingxingde    时间: 2010-6-13 17:27
恩 谢谢 学习了   
作者: zzx6155    时间: 2014-8-30 01:20
学不会。。。以后再研究




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5