home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 2.ddi / MUTOOLS1.DI$ / SCLOUT.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  1.3 KB  |  48 lines

  1. % function newsys = sclout(sys,outputs,fac)
  2. %
  3. %   Scale specified outputs (rows) of a SYSTEM (VARYING)
  4. %   matrix by a scalar number FAC.
  5. %
  6. %   See also: *, MMULT, MSCL, SCLOUT, SCLIV and SEL.
  7.  
  8. function newsys = sclout(sys,outputs,fac)
  9. if nargin < 3
  10.   disp('usage: newsys = sclout(sys,outputs,fac)');
  11.   return
  12.  end
  13.  [nro,nco] = size(outputs);
  14.  [mtype,mrows,mcols,mnum] = minfo(sys);
  15.  if max([nro,nco]) > mrows & min([nro,nco]) > 1
  16.    error('too many outputs (rows) specified')
  17.    return
  18.  end
  19.  [nrf,ncf] = size(fac);
  20.  if nrf == 1 & ncf == 1
  21.    if mtype == 'syst'
  22.      [a,b,c,d] = unpck(sys);
  23.      c(outputs,:) = fac*c(outputs,:);
  24.      d(outputs,:) = fac*d(outputs,:);
  25.      newsys = pck(a,b,c,d);
  26.    elseif mtype == 'cons'
  27.      newsys = sys;
  28.      newsys(outputs,:) = fac*sys(outputs,:);
  29.    elseif mtype == 'empt';
  30.      newsys = [];
  31.    else
  32.      [vd,rp,indv] = vunpck(sys);
  33.      newsys = sys;
  34.      tmp = reshape(vd,mrows,mnum*mcols);
  35.      tmp(outputs,:) = fac*tmp(outputs,:);
  36.      newsys(1:mrows*mnum,1:mcols) = reshape(tmp,mrows*mnum,mcols);
  37. %     mat1 = ones(mrows,1);
  38. %     mat1(outputs) = fac*mat1(outputs);
  39. %     tmp = diag(mat1) * reshape(vd,mrows,mnum*mcols);
  40. %     newsys = vpck(reshape(tmp,mrows*mnum,mcols),indv);
  41.    end
  42.  else
  43.    error('fac should be a scalar')
  44.    return
  45.  end
  46. %
  47. % Copyright MUSYN INC 1991,  All Rights Reserved
  48.