# MATLAB Petri Net Toolbox

### HAKIM SWANI (view profile)

08 Dec 2004 (Updated )

For analysis of hybrid system modeling.

[XX]=disp_gr(A,RM)
```function [XX]=disp_gr(A,RM)

% function [XX]=disp_gr(A,RM)
% Input parameters this function are matrix A and matrix RM, which are output parameters of function graph.m
% Output parameter this function is matrix XX, which  contains these items: state, parent,subs,trans,Xi,Yi,Xf,Yf,col
%
%  state -  number of state, which corresponds to number of column in matrix RM;
%  parent - parent of this state;
%  subs - the number of subsequent states (subs);
%  trans -  index of fired transition (trans)
%  Xi, Xf, Yi, Yf -  initial and final X,Y positions needful for displaying the graph of reachable markings
%  col -  number of column of XX matrix corresponding to parent of processing state
%
%
% colour solid lines determine direction from left to the right, dashdot white line determine
% direction from right to left.

k=1;
item=1;
rows_A=size(A,1);
pom=0;
pom1=0;
color=0;
colors=['y' 'm' 'c' 'r' 'g' 'b'];
vel_nula=0;

fig=figure;
axis('off');
hold;
% 1.uroven stromu dosazitelnosti
sub_1=size(find(A(1,:)),2);

XX([1 2 3 4 5 6 7 8 9],1)=[1 0 sub_1 0 0 0 0 0 0]';
text(-0.02,0,'x');
text(-0.1,-0.25,['m0']);

% next levels of graph of reachable markings

while k<=rows_A,

column_of_subs=find(A(k,:)); 	%finding of subsequent states
subs=size(column_of_subs,2);	% the number of subsequent states

for j=1:subs
item=item+1;
trans=A(k,column_of_subs(j));
if (isempty(trans))
trans=0;
end;
trans_str=int2str(trans);
transit=['T',trans_str];
parent= k;
number_subs_of_state=size(find(A(column_of_subs(j),:)),2);
if k>6
color=rem(k,6);
if rem(k,6)==0
color=6;
end;
else color=k;
end;

if number_subs_of_state==0				%finding of states whose subsequent states are null
nula=[nula column_of_subs(j)];
vel_nula=size(nula,2);
end;

for i=1:size(XX(1,:),2)

if (parent==XX(1,i)) & (pom1~=1)	%finding column of matrix XX, which contains parents of state we work with.
col=i;        		% coordinates of this state Xi, Yi equal  coordinates Xf,Yf of parent of this state
pom1=1;
Yi= XX(8,col);
Xi= XX(6,col);
uroven =Xi+2;
end;

if (column_of_subs(j)==XX(1,i)) & (pom~=1)   	% creating of row of matrix XX, when state already exists
Xf=XX(6,i);
Yf=XX(8,i);
pom=1;
end;
end;
pom1=0;

if pom~=1	 			% creating of row of matrix XX, when state doesn't exist
Yf= XX(8,col)+(j-1)*uroven;
Xf=Xi+1;
else pom=0;
end;

% displaying of state and its transition, which returns to some state (direction from right to the left

if column_of_subs(j)< k

XX(:,item)=[column_of_subs(j) parent number_subs_of_state trans Xi Xf Yi Yf col]';

if (Yi>1)  			% counting of coordinates of returning point ( we will go through this point)
max_Yi=max(XX(7,:));
max_Yf=max(XX(8,:));
max_yy=max(max_Yi,max_Yf);
plot([Xi Xf+1/2 Xf],[Yi max_yy+1 Yf],'w-.');
text(Xf+1/2,max_yy+1,transit)
else plot([Xi 1 Xf],[Yi -3 Yf],'w-.');text(1,-3,transit);
end;

else plot([Xi Xf],[Yi Yf],colors(color));text(Xf-0.02,Yf,'x'); XX(:,item)=[column_of_subs(j) parent number_subs_of_state trans Xi Xf Yi Yf col]';
text(Xf-0.1,Yf-0.25,['m',int2str(column_of_subs(j)-1)]);

end;

% displaying name of transitions to particular arcs
if column_of_subs(j)>= k
if (Yi>Yf)
text(Xi+1/2,(Yf+(Yi-Yf)/2)+0.1,transit)

else  text(Xi+1/2,(Yi+(Yf-Yi)/2)+0.07,transit);
end;
end;
end;  % end of cycle for

% protection of not processing row of matrix A which is null
k=k+1;
for i=1:vel_nula
if k==nula(i);
k=k+1;
end;
end;

end; 			% end of main cycle - while ```