www.gusucode.com > rctutil 工具箱 matlab源码程序 > rctutil/+rctutil/ami2ynrow.m

    function [rowd,rowg] = ami2ynrow(Dcell,Gcell,blk,beta,dfFlag)
% Utility.

if nargin==4
   dfFlag = false;
end

%   Copyright 2010-2011 The MathWorks, Inc.

[nblk,~] = size(blk);
%     blkp = ptrs(abs(blk));
%     mcolp = blkp(:,1);
%     mrowp = blkp(:,2);
%     nc = mcolp(nblk+1)-1;
%     nr = mrowp(nblk+1)-1;
cds = [];
rds = [];
scalds = [];
gs = [];

for i=1:nblk
   if blk(i,1) < -1 && blk(i,2)==0
      bd = -blk(i,1);
      if dfFlag
         df = Dcell{i};
      else
         da = Dcell{i};
         df = sqrtm(da);
      end
      ga = Gcell{i};
      if all(ga(:)==0) % AKP, Feb 13, 2011
         gf = ga;  % extra conditional
      else
         gf = (1/beta)*(df\ga/df);
      end
      [evc,evl] = eig(gf);
      gp = real(evl);
      gpd = diag(gp);
      dp = diag(sqrt(sqrt(ones(bd,1)+gpd.*gpd)))*evc'*df;
      gs = [gs gpd.']; %#ok<*AGROW>
      rds = [rds (reshape(dp,bd*bd,1)).'];
   elseif blk(i,1)>1 && blk(i,2)==0
      bd = blk(i,1);
      if dfFlag
         df = Dcell{i};
      else
         da = Dcell{i};
         df = sqrtm(da);
      end
      dp = df;
      cds = [cds (reshape(dp,bd*bd,1)).'];
   elseif blk(i,1)>0 && blk(i,2)>0
      %             rdim = blk(i,2);
      %             cdim = blk(i,1);
      if dfFlag
         df = Dcell{i};
      else
         da = Dcell{i};
         df = sqrt(real(da));
      end
      dp = df;
      scalds = [scalds dp];
   elseif  blk(i,1)==1 && blk(i,2)==0
      if dfFlag
         df = Dcell{i};
      else
         da = Dcell{i};
         df = sqrt(real(da));
      end
      dp = df;
      scalds = [scalds dp];
   elseif  blk(i,1)==-1
      %             bd = -blk(i,1);
      if dfFlag
         df = Dcell{i};
         da = df*df;
      else
         da = Dcell{i};
         df = sqrt(real(da));
      end
      ga = real(Gcell{i});
      gf = (1/beta)*(ga/da);
      gp = real(gf);
      dp = sqrt(sqrt(1+gp*gp))*df;
      gs = [gs gp];
      rds = [rds dp];
   end
end
rowd = [rds cds scalds];
rowg = gs;