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

📄 mq_gen.m

📁 Software for design and tuninig of SISO and MIMO contol systems
💻 M
字号:
function [mq]=mq_gen(mnummt,mdenmt,mdeadmt,qnummt,qdenmt,order,y)
% This function generates mq varaible to be used by qd_mat function
% The two functions must be used together

mq=cell(1,3);
if isempty(mnummt) | isempty(mdenmt) | isempty(qnummt) |isempty(qdenmt)
   return
end
if iscell(mnummt)& length(mnummt) > 1
   numMs=mt2poly(mnummt{1},y);
   numMs=conv(numMs,mt2poly(mdenmt{2},y));
   num=conv(numMs,mt2poly(qdenmt,y));
   denMs=conv(mt2poly(mdenmt{1},y),mt2poly(mdenmt{2},y));
   den=conv(denMs,mt2poly(qnummt,y));
   [num1,den1]=zero_cancel(num,den);
   if length(den1)==1
      num1=num1/den1; den1=1;
      mq{1}= ['(' mtx2str(num1,2)];
      if length(num1)==1
         mq{2}='(';
      else
         mq{2}=['(' mtx2str(polyder(num1),2) '/' mtx2str(num1,2)];
      end
   else
      mq{1}=['(' mtx2str(num1,2) '/' mtx2str(den1,2) ];
      if length(num1)==1
         mq{2}=['(-' mtx2str(polyder(den1),2) '/' mtx2str(den1,2)];
      else
         mq{2}=['(' mtx2str(polyder(num1),2) '/' mtx2str(num1,2)];
         mq{2}=[mq{2} '-' mtx2str(polyder(den1),2) '/' mtx2str(den1,2)];
      end
   end   
   if ~isempty(mdeadmt{1})& mdeadmt{1}~=0
      mq{1}=[mq{1} '*' mtx2str(mdeadmt{1},4) ')'];
      mq{2}=[mq{2} '-' mtx2str(mdeadmt{1},2) ')'];
   else
      mq{1}=[mq{1} ')'];
      if length(num1)==1 & length(den1)==1
         mq{2}=[mq{2} '0)'];
      else
         mq{2}=[mq{2} ')'];
      end
   end
   mq{2}=[mq{2} '*' mq{1}];
   numMs=mt2poly(mnummt{2},y);
   numMs=conv(numMs,mt2poly(mdenmt{1},y));
   num=conv(numMs,mt2poly(qdenmt,y));
   [num2,den2]=zero_cancel(num,den);
   if length(den2)==1
      num2=num2/den2;
      tmp= ['(' mtx2str(num2,2)];
      if length(num2)==1
         tmp2='(';
      else
         tmp2=['(' mtx2str(polyder(num2),2) '/' mtx2str(num2,2)];
      end
   else
      tmp=['(' tmp mtx2str(num2,2) '/' mtx2str(den2,2)];
      if length(num1)==1
         tmp2=['(-' mtx2str(polyder(den2),2) '/' mtx2str(den2,2)];
      else
         tmp2=['(' mtx2str(polyder(num2),2) '/' mtx2str(num2,2)];
         tmp2=[tmp2 '-' mtx2str(polyder(den2),2) '/' mtx2str(den2,2)];
      end
   end
   if ~isempty(mdeadmt{2}) & mdeadmt{2}~=0
      tmp=[tmp '*' mtx2str(mdeadmt{2},4) ')'];
      tmp2=[tmp2 '-' mtx2str(mdeadmt{2},2) ')'];
   else
      tmp=[tmp ')'];
      if length(num2)==1 & length(den2)==1
         tmp2=[tmp2 '0)'];
      else
         tmp2=[tmp2 ')'];
      end
   end
   mq{1}=[mq{1} '+' tmp];
   mq{2}=[mq{2} '+' tmp2 '*' tmp];
   
else
   num=mt2poly(mnummt,y);
   num=conv(num,mt2poly(qdenmt,y));
   den=mt2poly(mdenmt,y);
   den=conv(den,mt2poly(qnummt,y));
   [num1,den1]=zero_cancel(num,den);
   if length(den1)==1
      num1=num1/den1;den1=1;
      mq{1}=['(' mtx2str(num1,2) ];
      if length(num1)==1
         mq{2}='(';
      else
         mq{2}=['(' mtx2str(polyder(num1),2) '/' mtx2str(num1,2)];
      end
   else
      mq{1}=['(' mtx2str(num1,2) '/' mtx2str(den1,2) ];
      if length(num1)==1
         mq{2}=['(-' mtx2str(polyder(den1),2) '/' mtx2str(den1,2)];
      else
         mq{2}=['(' mtx2str(polyder(num1),2) '/' mtx2str(num1,2)];
         mq{2}=[mq{2} '-' mtx2str(polyder(den1),2) '/' mtx2str(den1,2)];
      end
   end   
   if ~isempty(mdeadmt)& mdeadmt~=0
      mq{1}=[mq{1} '*' mtx2str(mdeadmt,4) ')'];
      mq{2}=[mq{2} '-' mtx2str(mdeadmt,2) ')'];
   else
      mq{1}=[mq{1} ')'];
      if length(num1)==1 & length(den1)==1
         mq{2}=[mq{2} '0)'];
      else
         mq{2}=[mq{2} ')'];
      end
   end
   keep=mq{2};
   mq{2}=[mq{2} '*' mq{1}];
   mq{3}='(';
   if length(num1)>2
      temp=polyder(polyder(num1));
      mq{3}=[mq{3} mtx2str(temp,2) '/' mtx2str(num1,2)];
   end
   if length(num1)>1
      temp=polyder(num1);
      mq{3}=[mq{3} '-(' mtx2str(temp,2) '/' mtx2str(num1,2) ')^2'];
   end
   if length(den1)>2
      temp=polyder(polyder(den1));
      mq{3}=[mq{3} '-' mtx2str(temp,2) '/' mtx2str(den1,2)];
   end
   if length(den1)>1
      temp=polyder(den1);
      mq{3}=[mq{3} '+(' mtx2str(temp,2) '/' mtx2str(den1,2) ')^2'];
   end
   mq{3}=[mq{3} '+' keep '^2)*' mq{1}];
end % if iscell   

function [a,b]=zero_cancel(a,b)
g=gcdpoly(a,b);
a=deconv(a,g);
b=deconv(b,g);

⌨️ 快捷键说明

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