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

📄 ms2mtx1.m

📁 内模控制器(IMC)工具箱。包括参数整定、PID控制器参数转换等
💻 M
字号:
function [mtx,unid]=ms2mtx1(ms)

% Convert a matrix-string to a matrix
%-------------------------------------------------------------

if strcmp(ms,'Numerator')
   ms='';
end

% remove unwanted characters
%-------------------------------------------------------------

unc=0;
k=length(ms);
msabs=abs(ms);
for i=1:k
 if msabs(i)>=60 | msabs(i)<=44 | msabs(i)==47 | msabs(i)==58;
  if msabs(i)==117
   unc=unc+1;
  else
   ms(i)=' ';
  end
 end
end


% remove trailing and leading blanks
%-------------------------------------------------------------

ms = deblank(fliplr(deblank(fliplr(ms))));
if isempty(ms),
   mtx = [];
   strg='';
   unid=0;
   return
end

% add a space if length=1 (need a string of 2 characters)
%-------------------------------------------------------------

if length(ms)==1
 ms=[ms ' '];
end

temp='';
msabs=abs(ms);
k=length(ms);
if unc>=1

 for i=1:k
  if msabs(i)==117
      if (i~=k)
          if (msabs(i+1)>=48 & msabs(i+1)<=57)
		if (i==1)
	          temp=[temp ' ' 'u' msabs(i+1) ' ']; 
		else
		   if (msabs(i-1)==45)
		      temp=[temp 'u' msabs(i+1) ' '];
		   else
			   temp=[temp ' ' 'u' msabs(i+1) ' '];
		   end   
	     	end
	  else	
		if (i==1)
	          temp=[temp  ' u ' ]; 
		else
		  if (msabs(i-1)==45)
		   temp=[temp 'u '];
		  else
		   temp=[temp ' u ' ];
		  end 
		end
	 end
    	  
      else
	   if (i==1)
	          temp=[temp  ' u ' ]; 
		else
		  if (msabs(i-1)==45)
		   temp=[temp 'u '];
		  else
		   temp=[temp ' u ' ];
		  end 
	   end
     end
  else
       if (i~=1)
	   if (msabs(i-1)==117 & msabs(i)>=48 & msabs(i)<=57)
	        temp=[temp ''];
	   else  
	       temp=[temp ms(i)]; 
	   end
	else
	    temp=[temp ms(i)];
	end
 
  end
end

 ms=temp;
end

% identify coefficients
%-------------------------------------------------------------

k=length(ms);
msabs=abs(ms);
row=1;
col=1;
count(1)=0;
mtx=[];
mtx(1,1)=0;
unid(1,1)=0;
sms=[];

 for i=2:k

  if (msabs(i) <= 57 & msabs(i) >= 45 ) & msabs(i-1) == 32
   sms=ms(i);
   if i==k
    mtx(row,col)=str2num(sms);
    count(row)=count(row)+1;
   end
  elseif (msabs(i) <= 57 & msabs(i) >= 45 ) & (msabs(i-1) <= 57 & msabs(i-1) >= 45 )
   if size(sms,1)==0
    sms=[ms(i-1) ms(i)];
   else
    sms=[sms ms(i)];
   end
   if i==k
    mtx(row,col)=str2num(sms);
    count(row)=count(row)+1;
   end
  elseif (msabs(i-1) <= 57 & msabs(i-1) >= 45 ) & msabs(i) == 32	
   if (i>2)
	if msabs(i-2)==117
	 unid(row,col-1)=str2num(ms(i-1)); 
	else
	 if size(sms,1)==0
   	 sms=ms(i-1);
  	 end
  	 mtx(row,col)=str2num(sms);
  	 sms=[];
  	 count(row)=count(row)+1;
  	 col=col+1;
	end
    else
	if size(sms,1)==0
   	 sms=ms(i-1);
  	 end
  	 mtx(row,col)=str2num(sms);
  	 sms=[];
  	 count(row)=count(row)+1;
  	 col=col+1;	
   end    
  	
  elseif (msabs(i) <= 57 & msabs(i) >= 45 ) & msabs(i-1) == 59
   sms=ms(i);
   if i==k
    mtx(row,col)=str2num(sms);
    count(row)=count(row)+1;
   end
  elseif (msabs(i-1) <= 57 & msabs(i-1) >= 45 ) & msabs(i) == 59
   if size(sms,1)==0
    sms=ms(i-1);
   end
   mtx(row,col)=str2num(sms);
   sms=[];
   count(row)=count(row)+1;
   row=row+1;
   col=1;
   count(row)=0;
  elseif msabs(i-1) == 32  & msabs(i) == 59
   row=row+1;
   col=1;
   count(row)=0;
  elseif msabs(i-1) == 32  & msabs(i) == 117
   mtx(row,col)=sqrt(-1);
   count(row)=count(row)+1;   
   col=col+1;
  elseif msabs(i-1) == 45  & msabs(i) == 117
   mtx(row,col)=-sqrt(-1);
   count(row)=count(row)+1;   
   col=col+1;
  end    %if
 end   %for


% move rows to the right
%-------------------------------------------------------------

[m,n]=size(mtx);
[j,k]=size(unid);

if (m~=j|n~=k)
  unid(m,n)=0;
end

if n>1
 for i=1:m
  mov=n-count(i);
  if mov>0
   for j1=1:mov
    for j2=(n-1):-1:1
     mtx(i,j2+1)=mtx(i,j2);
     unid(i,j2+1)=unid(i,j2);
    end  % for j2
    mtx(i,j2)=0;
    unid(i,j2)=0;
   end % for j1
  end %if
 end
end


⌨️ 快捷键说明

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