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

📄 mtx2str.m

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

% Create strings of polynomials/exponentials from matrices
%-------------------------------------------------------------

strg='';

if place==1 | place==3
 vrb='x(';
else
 vrb='y(';
end

if place==1 | place==2
   temp=mtx;
   [r,n]=size(temp);
   mtx=[];
   power=zeros(r,1);
   for i=1:r
      if isempty(mtx)
         mtx=temp(i,:);
         power(i)=1;
      else
		   same=0;
         [l,m]=size(mtx);
         for j=1:l
            if temp(i,:)==mtx(j,:)
               same=1;
               power(j)=power(j)+1;
            end
         end
         if ~same
            mtx=[mtx;temp(i,:)];
            [l,m]=size(mtx);
            power(l)=1;
         end
      end
   end
   
[r,n]=size(mtx);

for i=1:r
 strow=[];
 for j=1:n
  if mtx(i,j)~=0
%   if strcmp(strow,[])
   if size(strow,1)==0
    if j<=n-2
      if real(mtx(i,j))==1
       strow=['s^' num2str(n-j)];
      elseif real(mtx(i,j))==-1
       strow=['-s^' num2str(n-j)];
      elseif imag(mtx(i,j)) > 0
       strow=[vrb num2str(imag(mtx(i,j))) ')*s^' num2str(n-j)];
      elseif imag(mtx(i,j)) < 0
       strow=['-' vrb num2str(-imag(mtx(i,j))) ')*s^' num2str(n-j)];
      else
       strow=[num2str(mtx(i,j)) '*s^' num2str(n-j)];
      end
     elseif j==n-1
      if real(mtx(i,j))==1
       strow='s';
      elseif real(mtx(i,j))==-1
       strow='-s';
      elseif imag(mtx(i,j)) > 0
       strow=[vrb num2str(imag(mtx(i,j))) ')*s'];
      elseif imag(mtx(i,j)) < 0
       strow=['-' vrb num2str(-imag(mtx(i,j))) ')*s'];
      else
       strow=[num2str(mtx(i,j)) '*s'];
      end
     elseif j==n
      if imag(mtx(i,j)) > 0
       strow=[vrb num2str(imag(mtx(i,j))) ')'];
      elseif imag(mtx(i,j)) < 0
       strow=['-' vrb num2str(-imag(mtx(i,j))) ')'];
      else
         strow=num2str(mtx(i,j));
      end
     end
   else
     if j<=n-2
      if real(mtx(i,j))==-1
       strow=[strow '-' 's^' num2str(n-j)];
      elseif real(mtx(i,j))<0
       strow=[strow num2str(mtx(i,j)) '*s^' num2str(n-j)];
      elseif imag(mtx(i,j)) > 0
      strow=[strow '+' vrb num2str(imag(mtx(i,j))) ')*s^' num2str(n-j)];
      elseif imag(mtx(i,j)) < 0
       strow=[strow '-' vrb num2str(-imag(mtx(i,j))) ')*s^' num2str(n-j)];
    else
       if j==1
       if real(mtx(i,j))==1
        strow=['s^' num2str(n-j)];
       else
        strow=[num2str(mtx(i,j)) '*s^' num2str(n-j)];
       end

       else  
       if real(mtx(i,j))==1
        strow=[strow '+' 's^' num2str(n-j)];
       else
        strow=[strow '+' num2str(mtx(i,j)) '*s^' num2str(n-j)];
       end
       end
      end
     elseif j==n-1
      if real(mtx(i,j))==-1
        strow=[strow '-' 's'];
      elseif real(mtx(i,j))<0
       strow=[strow num2str(mtx(i,j)) '*s'];
      elseif imag(mtx(i,j)) > 0
       strow=[strow '+' vrb num2str(imag(mtx(i,j))) ')*s'];
      elseif imag(mtx(i,j)) < 0
       strow=[strow '-' vrb num2str(-imag(mtx(i,j))) ')*s'];
      else
       if real(mtx(i,j))==1
        strow=[strow '+' 's'];
       else
        strow=[strow '+' num2str(mtx(i,j)) '*s'];
       end
      end
     elseif j==n
      if real(mtx(i,j))<0
       strow=[strow num2str(mtx(i,j))];
      elseif imag(mtx(i,j)) > 0
       strow=[strow '+' vrb num2str(imag(mtx(i,j))) ')'];
      elseif imag(mtx(i,j)) < 0
       strow=[strow '-' vrb num2str(-imag(mtx(i,j))) ')'];
      else
       strow=[strow '+' num2str(mtx(i,j))];
      end
     end
   end
  end  % if mtx<>0
 end  % for j

  if ~strcmp(strow,[])
   if nnz(mtx(i,:))>=2 |...
  ( min(mtx(i,:))<0 & ~strcmp(strg,[]) ) |...
  ( min(imag(mtx(i,:)))<0  & ~strcmp(strg,[]) ) 
		if power(i)==1
   		strow=['(' strow ')'];  
   	else
      	strow=['(' strow ')^' num2str(power(i))];
   	end
   end
   if strcmp(strg,[])
    strg=strow;
   else
    if i==1
       strg=[strow];
     else
        strg=[strg '*' strow];
     end
   end
  end

end  % for i

elseif place==3 | place==4      %if place

 if   ~isempty(mtx)& mtx~=0
    if imag(mtx) ~= 0
     strg=['exp(-' vrb num2str(abs(imag(mtx))) ')*s)'];
    else
     strg=['exp(-' num2str(abs(mtx)) '*s)'];
    end
 else
   strg='';
 end


end %if place

⌨️ 快捷键说明

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