www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/@mdev_local/LocalModel.m

    function [L,ok]= LocalModel(mdev,SweepNos)
%LOCALMODEL Return local model for given Sweep Number(s)
%
%  [L,ok]= LocalModel(mdev,SNo) returns a local model given a sweep number.

%  Copyright 2000-2007 The MathWorks, Inc. and Ford Global Technologies, Inc.


if nargin<2 || strcmp(SweepNos,':')
    SweepNos= 1:size(mdev.AllModels,2);
end

L= model(mdev);

if DatumType(L)==3
    % get datum link
    pdatum= datumlink(mdev);
    % get datum (no outliers)
    D= double(pdatum.getdata('Y',0));
end

selrf= SelectRF(L);
if mdev.IsLinearised && ~isempty(selrf) && allLinearRF(L) && isfield(mdev.MLE,'Sigma');
    quickPEV= true;
    L = EvalDelG(L);
    L2= SelFeat(L,selrf(1,:));
    dG= inv(delG(L2));
    [dz,dG2,zind] = EffectsMatrix(mdev.MLE.Model,dG);
    ri= zeros(size(L,1));
else
    quickPEV= false;
end

if isstruct(mdev.MLE)
    s2 = mdev.MLE.Pooled_MSE;
else
    s2 = [];
end


[X,Y]= getdata(mdev);
if length(SweepNos)==1
    ok= mdev.FitOK(SweepNos);
    if ok
        if DatumType(L)==3
            % use datum
            L= update(L,mdev.AllModels(:,SweepNos),[]);
            L= datum(L,D(SweepNos));
        else
            L= update(L,mdev.AllModels(:,SweepNos));
        end
        % update delG matrix
        selrf= SelectRF(L);
        if quickPEV;
            V= mdev.MLE.Sigma(selrf(1,:),selrf(1,:),SweepNos);
            [ri,pr] = chol(V);
            if pr
                ri= zeros(size(V));
            else
                ri= ri';
            end
            L= var(L,ri,s2,mdev.MLE.df(SweepNos));
        else
            % Full GTS
            L = EvalDelG(L);
            L= pevinit(L,X(:,:,SweepNos),Y(:,:,SweepNos),s2);
        end
    end
else
    AllModels= cell(1,length(SweepNos));
    SweepNos= SweepNos(:)';
    for i= SweepNos
        if mdev.FitOK(i)
            if DatumType(L)==3
                L= update(L,mdev.AllModels(:,i),D(i));
            else
                L= update(L,mdev.AllModels(:,i));
            end
            if quickPEV;
                V  = mdev.MLE.Sigma(selrf(1,:),selrf(1,:),i);
                [ri,pr] = chol(dG*V*dG');
                if pr
                    ri= zeros(size(V));
                else
                    ri= ri';
                end
                L  = var(L,ri,s2,mdev.MLE.df(i));
            else
                % Full GTS
                L = EvalDelG(L);
                L= pevinit(L,X(:,:,i),Y(:,:,i),s2);
            end
        end
        AllModels{i}= L;
    end
    L= AllModels;
    ok= mdev.FitOK(SweepNos);
    ok= ok(:)';
end