⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minbool.m

📁 please approve for me..so that i can download for the Quine-McCluskey in C language.thank you.
💻 M
字号:
function [result]=minimize(numbers, resulttype)
home
% Cuain-MacClaski method of boolean function minimization
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% Andrey Popov              Technical University - Sofia
% popov_andrey@abv.bg               http://potopi.hit.bg
%
% USE:
% R=minimize(N,V)
% R - result matrix
% N - input arguments. N should be vector row with integers
% V - visualization type
%     1) 1=normal; -1=inverse; NaN=not used
%     2) 1=normal; -1=inverse; 0=not used
% 
% 
% EXAMPLE:
% R=minimize([5 13 14 26 30],1)
% R =
%    1     2     3     4     5
%   -1   NaN     1    -1     1
%  NaN     1     1     1    -1
%    1     1   NaN     1    -1
%
% Minimize ver. 1.2    release September 2002

disp(' ');
disp('       Cuain-MacClaski method or minimizing boolen function');
disp('     -------------------------------------------------------');
disp('     Andrey Popov               Technical University - Sofia');
disp(' ');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Input data check
%-------------------------------------------------------
if (nargin==0)
	disp('  No input data');disp('  ');
else
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
format compact;

numbers=round(abs(numbers));
[u,v]=size(numbers);

% 
%--------------------------------------------------------------------------------
% 

S=zeros(1,1);
i=1;
S(1,1)=numbers(1,1);
for g=1:v
	p=0;
	for k=1:i
		if S(1,k)==numbers(1,g)
			p=p+1;			
		end;
	end;
	if(p==0) 			% 
		S=[S numbers(1,g)];
		i=i+1;
	end;
end;

numbers=sort(S);
S=[];
v=i;

%
%----------------------------------------------------------------------------------
Maximum=max(numbers);
n=1;
while (Maximum>2^n-1)
n=n+1;
end;

% 
%----------------------------------------------------------------------------------
W=zeros(v,n);

% 
%----------------------------------------------------------------------------------
for i=1:v
	k=numbers(i);				%
	for j=1:n				
		if  k>=2^(n-j)			%
			k=k-2^(n-j);		%
			W(i,j)=1;
		end;
	end;
end;

%
%----------------------------------------------------------------------------------

G=zeros(v,n);	%
G1=zeros(v,1);

broi=0;		% 
m=1;
while(m<=v)
   for i=1:v
	curb=0;		% 
	for j=1:n
		if( W(i,j)==1 )		% 
			curb=curb+1;
		end;
	end;
	if( curb==broi )			% 
		G(m,:)=W(i,:);
		G1(m,1)=numbers(i);
		m=m+1;
		W(i,:)=zeros(1,n);
	end;
   end;
broi=broi+1;
end;

W=[];
G=[G G1];

% 
%----------------------------------------------------------------------------------
y=v;				% 
razsh=1;			% 
slepeni=1;			% 
F=G;				% 

while (slepeni~=0 & v>1)
  F=[];
  slepeni=0;			% 

  M=zeros(v,1);
  G=[G M];			% 
  m=0;

  for i=1:v
     if (G(i,1)==inf | G(i,1)==nan) 		% 
     else

	suedineno=0;				% 
	for j=(i+1):v				% 
	   k=0;
	   p=0;
   	   if (G(j,1)==inf | G(j,1)==nan) 	% 
	   					% 
	   else
	
		for g=1:n			% n 
			if G(i,g)~=G(j,g)	%
				k=k+1;		%  
				p=g;		% 
			end;
		end;
		if (k==1)				% 
			L=G(i,1:(n+razsh));		% 
			L(1,p)=-1;			%
			L=[L G(j,(n+1):(n+razsh))];     %
			F=[F;L];
			m=m+1;			% 
			slepeni=slepeni+1;	% 
			suedineno=suedineno+1;	%
			G(i,n+razsh+1)=1;       % 
			G(j,n+razsh+1)=1;
		elseif (k==0)			% 
						% 
			G(j,1)=inf;
		end;

	   end;			
	end;% 

	if (suedineno==0 & G(i,n+razsh+1)==0)
							% 
							% 
		L=G(i,1:(n+razsh));			% 
		for l=1:razsh
			L=[L inf];			% 
		end;
		F=[F;L];
		m=m+1;				% 
	end;

     end;
  end;% 
  
  if(slepeni==0)				% 
	F=F(:,1:(n+razsh));			% 
	N=razsh;
  else;
  razsh=2*razsh;
  end;
  
  G=F;

  v=m;
end;% 

N=razsh;					
G=[];

[l,y]=size(numbers);

E=zeros(v+2,y+3);			
for i=1:y
	E(1,i+3)=numbers(1,i);
end;

for i=1:v
	E(i+2,1)=i;
end;

%----------------------------------------------------------------------------------
for g=1:v							
	p=0;							
	for j=(n+1):(n+N)				
								
		if (F(g,j)~=inf & F(g,j)~=nan) 		
			for i=1:y				
								
				if E(1,i+3)==F(g,j)
					E(g+2,i+3)=1;		%
				end;
			end;
		end;
	end;
end;


%----------------------------------------------------------------------------------
otbeliazani=0;
for j=1:y				% y
   if E(2,j+3)~=1			%
	p=0;				%  
	w=0;				% 
	for g=1:v
		if E(g+2,j+3)==1	% 
			p=p+1;
			w=g;
		end;
	end;
	if(p==1)					%
		E(2,j+3)=1;
		otbeliazani=otbeliazani+1;
		E(w+2,3)=1;				% 
		for h=1:y
			if E(w+2,h+3)==1		% 
							% 
				if E(2,h+3)==0; 	% 
					E(2,h+3)=1;	%
					otbeliazani=otbeliazani+1;
				end;
			end;
		end;
	end;
   end;
end;


% 
%----------------------------------------------------------------------------------
while (otbeliazani<y)
   for g=1:v
	E(g+2,2)=0;
   end;

   for g=1:v
	if E(g+2,3)==0
		p=0;				% 
		q=0;				% 
		c=0;				% 
		for j=1:y
			if ( E(g+2,j+3)==1 & E(2,j+3)==0 ) 	% 
								%  
				p=p+1;
			end;
		end;
		for k=1:n			% 
						% 
						% 
			if ( F(g,k)<0 )
				q=q+1;
			elseif (F(g,k)==0)
				c=c+1;
			end;
		end;
		E(g+2,2)=p+q/(n+1)+c/(10*n);	% 
						% 1) 
						% 2) 
						% 3) 
	end;
   end;

   maks=max(E(:,2));

   g=1;
   while( E(g+2,2)<maks )
	g=g+1;
   end;
   
   E(g+2,3)=1;
   for h=1:y
	if E(g+2,h+3)==1		
		if E(2,h+3)==0; 	% 
			E(2,h+3)=1;
			otbeliazani=otbeliazani+1;
		end;
	end;
   end;

end;
		
% 
%-----------------------------------------------------------------------------------
Z=[];		% 

izhodni=0;
for g=1:v
	if E(g+2,3)==1			% 
		Z=[Z;F(g,:)];
		izhodni=izhodni+1;
	end;
end;

%=====================================================================================

result=[];
if (nargin==2 & resulttype==2)
    for i=1:izhodni     % 1;-1;NaN
		dat=[];
		for j=1:n
			if Z(i,j)==1
				dat=[dat 1];
			elseif Z(i,j)==0
				dat=[dat -1];
			else
				dat=[dat 0];
			end;
		end;
		result=[result;dat];
	end;
	result=[1:n;result];
	disp(' ');
	disp(' 1  -  normal'); 
	disp('-1  - inverted');
	disp(' 0 - not used');
	disp(' ');
else
	for i=1:izhodni     % 1;-1;NaN
		dat=[];
		for j=1:n
			if Z(i,j)==1
				dat=[dat 1];
			elseif Z(i,j)==0
				dat=[dat -1];
			else
				dat=[dat nan];
			end;
		end;
		result=[result;dat];
	end;
	result=[1:n;result];
	disp(' ');
	disp(' 1  -  normal'); 
	disp('-1  - inverted');
	disp('NaN - not used');
	disp(' ');
end;

end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%			
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -