home *** CD-ROM | disk | FTP | other *** search
- function [lb,fulpert,rowp] = cheapl(mat,blk,blkp)
- [nblk dum] = size(blk);
- [nr nc] = size(mat);
- new = [];
- for i=1:nblk
- new = [new ; mat(blkp(i,2):blkp(i+1,2)-1,1:nc)];
- if blk(i,2) ~= 0
- if blk(i,1) > blk(i,2)
- zer = zeros(blk(i,1)-blk(i,2),nc);
- new = [new ; zer];
- end
- end
- end
- [nr nc]=size(new);
- out =[];
- for i=1:nblk
- out = [out new(1:nr,blkp(i,1):blkp(i+1,1)-1)];
- if blk(i,2) ~= 0
- if blk(i,2) > blk(i,1)
- zer = zeros(nr,blk(i,2)-blk(i,1));
- out = [out zer];
- end
- end
- end
- eigv=eig(out);
- lb = max(abs(eigv));
- if lb == 0
- disp(['LOWER BOUND FOR mu(M) is ZERO,']);
- disp([' OFFENDING PERTURBATION IS VERY']);
- disp([' LARGE TO INDICATE THIS']);
- fulpert = randel(blk,1e12);
- rowl = 0;
- for i=1:nblk
- if blk(i,2) == 0
- rowl = rowl + 1;
- else
- rowl = rowl + blk(i,1)*blk(i,2);
- end
- end
- rowp = 1e12*ones(1,rowl);
- else
- loc = find(lb==abs(eigv));
- llb = 1/eigv(loc(1));
- fulpert = [];
- rowp = [];
- for i=1:nblk
- if blk(i,2) == 0
- fulpert = daug(fulpert,(llb)*eye(blk(i,1)));
- rowp = [rowp llb];
- else
- tmp = (llb)*eye(blk(i,1),blk(i,2));
- fulpert = daug(fulpert,tmp);
- tmpp = reshape(tmp.',blk(i,1)*blk(i,2),1);
- rowp = [rowp tmpp.'];
- end
- end
- end
- %
- % Copyright MUSYN INC 1991, All Rights Reserved
-