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

  1. % function [dleft,dright] = unwrapd(dvec,blk)
  2. %
  3. %   Unwraps the D scaling matrices in DVEC (from an
  4. %   upper bound MU calculation) into the block diagonal form.
  5. %
  6. %
  7. %   See also: MU and UNWRAPP.
  8.  
  9. function [dl,dr] = unwrapd(rvd,blk)
  10.  if nargin ~= 2
  11.    disp(['usage: [dleft,dright] = unwrapd(dvec,blk)'])
  12.    return
  13.  end
  14.  [nblk,dum] = size(blk);
  15.  if dum ~= 2
  16.    error('block data incorrect format')
  17.    return
  18.  end
  19.  wd = 0;
  20.  dimdr = 0;
  21.  dimdl = 0;
  22.  for i=1:nblk
  23.    dimdr = dimdr + blk(i,1);
  24.    if blk(i,2) == 0
  25.      wd = wd + blk(i,1)*blk(i,1);
  26.      dimdl = dimdl + blk(i,1);
  27.    else
  28.      dimdl = dimdl + blk(i,2);
  29.      wd = wd + 1;
  30.    end
  31.  end
  32.  [mtype,mrows,mcols,mnum] = minfo(rvd);
  33.  if mtype == 'vary'
  34.    if mrows == 1 & mcols == wd
  35.      [vd,rp,indv] = vunpck(rvd);
  36.      dl = zeros(dimdl*mnum+1,dimdl+1);
  37.      dl(dimdl*mnum+1,dimdl+1) = inf;
  38.      dl(dimdl*mnum+1,dimdl) = mnum;
  39.      dl(1:mnum,dimdl+1) = indv;
  40.      dr = zeros(dimdr*mnum+1,dimdr+1);
  41.      dr(dimdr*mnum+1,dimdr+1) = inf;
  42.      dr(dimdr*mnum+1,dimdr) = mnum;
  43.      dr(1:mnum,dimdr+1) = indv;
  44.      fl = (mnum+1)*dimdl;
  45.      fr = (mnum+1)*dimdr;
  46.      pl = 1:dimdl:fl;
  47.      pr = 1:dimdr:fr;
  48.      plm1 = pl(2:mnum+1) - 1;
  49.      prm1 = pr(2:mnum+1) - 1;
  50.      for i=1:mnum
  51.        [tl,tr] = mkdfrv(rvd(i,1:mcols),blk,dimdl,dimdr);
  52.        dl(pl(i):plm1(i),1:dimdl) = tl;
  53.        dr(pr(i):prm1(i),1:dimdr) = tr;
  54.      end
  55.    else
  56.      error('incompatible dimensions')
  57.      return
  58.    end
  59.  elseif mtype == 'cons'
  60.    if mrows == 1 & mcols == wd
  61.      [dl,dr] = mkdfrv(rvd,blk,dimdl,dimdr);
  62.    else
  63.      error('incompatible dimensions')
  64.      return
  65.    end
  66.  else
  67.   error('row vector should not be a SYSTEM matrix')
  68.   return
  69.  end
  70. %
  71. % Copyright MUSYN INC 1991,  All Rights Reserved
  72.