www.gusucode.com > rctobsolete 工具箱 matlab源码程序 > rctobsolete/mutools/subs/mamilc.m

    function [mth,lmat,rmat,pmat,qmat,ma,wmat,smat,...
            mr, hmat,jmat,sizecd,cmat,dmat,tmat] = ...
         mamilc(mthA,lmatA,rmatA,pmatA,qmatA,maA,wmatA,smatA,...
            mrA,hmatA,jmatA,sizecdA,cmatA,dmatA,tmatA,...
            mthB,lmatB,rmatB,pmatB,qmatB,maB,wmatB,smatB,...
            mrB,hmatB,jmatB,sizecdB,cmatB,dmatB,tmatB,...
            lambda,vardata)

%   Copyright 1991-2004 MUSYN Inc. and The MathWorks, Inc.

mth=[]; lmat=[]; rmat=[]; pmat=[]; qmat=[]; ma=[]; wmat=[]; smat=[];
mr=[]; hmat=[]; jmat=[]; sizecd=[]; cmat=[]; dmat=[]; tmat=[];

% forms new AMI: lambda B + A
            [mthB,lmatB,rmatB,pmatB,qmatB,maB,wmatB,smatB,...
                    mrB,hmatB,jmatB,sizecdB,cmatB,dmatB,tmatB] = ...
                mamiscl(mthB,lmatB,rmatB,pmatB,qmatB,maB,wmatB,smatB,...
                    mrB,hmatB,jmatB,sizecdB,cmatB,dmatB,tmatB,lambda);


[nx,ny,nz,nv,sizex,nvarx,xvp,tnvarx,...
            sizey,nvary,yvp,tnvary,...
            sizez,nvarz,zvp,tnvarz,...
            tnvar] = var2sep(vardata);

pdim = size(tmatA,1);

            if nx>0
                lad = mthA(:,1).*sizex;
                lap = cumsum([1;lad]);
                lbd = mthB(:,1).*sizex;
                lbp = cumsum([1;lbd]);
                lrp = cumsum([1;lad+lbd]);
                rad = mthA(:,2).*sizex;
                rap = cumsum([1;rad]);
                rbd = mthB(:,2).*sizex;
                rbp = cumsum([1;rbd]);
                rrp = cumsum([1;rad+rbd]);
                pqad = mthA(:,3).*sizex;
                pqap = cumsum([1;pqad]);
                pqbd = mthB(:,3).*sizex;
                pqbp = cumsum([1;pqbd]);
                pqrp = cumsum([1;pqad+pqbd]);
                lmat = zeros(sum(lad)+sum(lbd),pdim);
                rmat = zeros(sum(rad)+sum(rbd),pdim);
                pmat = zeros(sum(pqad)+sum(pqbd),pdim);
                qmat = zeros(sum(pqad)+sum(pqbd),pdim);
                mth = mthA + mthB;
                for i=1:nx
                    if mth(i,1)>0
                        lmat(lrp(i):lrp(i+1)-1,:) = ...
                            [lmatA(lap(i):lap(i+1)-1,:);lmatB(lbp(i):lbp(i+1)-1,:)];
                    end
                    if mth(i,2)>0
                        rmat(rrp(i):rrp(i+1)-1,:) = ...
                            [rmatA(rap(i):rap(i+1)-1,:);rmatB(rbp(i):rbp(i+1)-1,:)];
                    end
                    if mth(i,3)>0
                        pmat(pqrp(i):pqrp(i+1)-1,:) = ...
                            [pmatA(pqap(i):pqap(i+1)-1,:);pmatB(pqbp(i):pqbp(i+1)-1,:)];
                        qmat(pqrp(i):pqrp(i+1)-1,:) = ...
                            [qmatA(pqap(i):pqap(i+1)-1,:);qmatB(pqbp(i):pqbp(i+1)-1,:)];
                    end
                end
            end
            if ny>0
                wsad = maA.*sizey;
                wsap = cumsum([1;wsad]);
                wsbd = maB.*sizey;
                wsbp = cumsum([1;wsbd]);
                wsrp = cumsum([1;wsad+wsbd]);
                smat = zeros(sum(wsad)+sum(wsbd),pdim);
                wmat = zeros(sum(wsad)+sum(wsbd),pdim);
                ma = maA + maB;
                for i=1:ny
                    if ma(i)>0
                        wmat(wsrp(i):wsrp(i+1)-1,:) = ...
                            [wmatA(wsap(i):wsap(i+1)-1,:);wmatB(wsbp(i):wsbp(i+1)-1,:)];
                        smat(wsrp(i):wsrp(i+1)-1,:) = ...
                            [smatA(wsap(i):wsap(i+1)-1,:);smatB(wsbp(i):wsbp(i+1)-1,:)];
                    end
                end
            end
            if nz>0
                had = mrA.*sizez(:,1);
                hap = cumsum([1;had]);
                hbd = mrB.*sizez(:,1);
                hbp = cumsum([1;hbd]);
                jad = mrA.*sizez(:,2);
                jap = cumsum([1;jad]);
                jbd = mrB.*sizez(:,2);
                jbp = cumsum([1;jbd]);
                hrp = cumsum([1;had+hbd]);
                jrp = cumsum([1;jad+jbd]);
                hmat = zeros(sum(had)+sum(hbd),pdim);
                jmat = zeros(sum(jad)+sum(jbd),pdim);
                mr = mrA + mrB;
                for i=1:nz
                    if mr(i)>0
                        hmat(hrp(i):hrp(i+1)-1,:) = ...
                            [hmatA(hap(i):hap(i+1)-1,:);hmatB(hbp(i):hbp(i+1)-1,:)];
                        jmat(jrp(i):jrp(i+1)-1,:) = ...
                            [jmatA(jap(i):jap(i+1)-1,:);jmatB(jbp(i):jbp(i+1)-1,:)];
                    end
                end
            end
            if nv>0
                cap = cumsum([1;sizecdA(:,1)]);
                dap = cumsum([1;sizecdA(:,2)]);
                cbp = cumsum([1;sizecdB(:,1)]);
                dbp = cumsum([1;sizecdB(:,2)]);
                cp = cumsum([1;sizecdA(:,1)+sizecdB(:,1)]);
                dp = cumsum([1;sizecdA(:,2)+sizecdB(:,2)]);
                sizecd = sizecdA + sizecdB;
                cmat = zeros(pdim,sum(sizecd(:,1)));
                dmat = zeros(pdim,sum(sizecd(:,2)));
                for i=1:nv
                    cmat(:,cp(i):cp(i+1)-1) = ...
                        [cmatA(:,cap(i):cap(i+1)-1) cmatB(:,cbp(i):cbp(i+1)-1)];
                    dmat(:,dp(i):dp(i+1)-1) = ...
                        [dmatA(:,dap(i):dap(i+1)-1) dmatB(:,dbp(i):dbp(i+1)-1)];
                end
            end
            tmat = tmatA+tmatB;