www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbccrosssectiongui/MBCModelInterface.m

    classdef MBCModelInterface < mbccrosssectiongui.AbstractMBCModelInterface
    %mbccrosssection.MBCModelInterface Class that interfaces with MBC Models
    % to evaluate models and boundaries
    
    %  Copyright 2015 The MathWorks, Inc.
    
    methods
        
        function [rLower,rUpper,rDist] = getRange(~,model)
            %getRange Get the range of models
            % Uses the first model
            if iscell(model)
                model = model{1};
            end
            [rLower,rUpper,rDist] = range(model);
        end
        
        function [modelVal, upperBound, lowerBound] = evaluateModelAt(~,currModel,inputValuesCell,alpha)
            %evaluateModelAt Evaluates a model at some values
            if nargin == 4 && canCalculatePEV(currModel)
                [PE,~,~,modelVal]= pevgrid(currModel,inputValuesCell);
                modelVal = modelVal(:);
                p = sqrt(PE(:));
                ni = calculateNI(currModel,alpha);
                upperBound = modelVal+ni*p;
                lowerBound = modelVal-ni*p;
            else
                modelVal = GenTable(currModel,inputValuesCell);
                modelVal = modelVal(:);
                upperBound = [];
                lowerBound = [];
            end
        end
        
        function constraintVals = evaluateConstraintAt(~,boundary,xcurrent)
            %evaluateConstraintAt Evaluates a constraint for some values
            constraintVals = constraintDistanceGrid(boundary,xcurrent);
            constraintVals = constraintVals(:);
        end
        
    end
end

function ni = calculateNI(model,alpha)
degFree1=dferror(model);
if ~isfinite(degFree1)
    degFree1= Inf;
    ni1 = norminv(alpha);
else
    ni1 = tinv(alpha,degFree1);
end

degFree= dferror(model);
if degFree~=degFree1
    if ~isfinite(degFree)
        ni = norminv(alpha);
    else
        ni = tinv(alpha,degFree);
    end
else
    ni=ni1;
end
end

function canPEV = canCalculatePEV(model)
canPEV = pevcheck(model);
end