www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@des_linearmod/vcalc.m

    function [psi,smod]=vcalc(smod,ReCalc)
% DES_LINEARMOD/VCALC  V-optimal value
%   PSI=VCALC(D) returns the v-optimality value for the
%   design object D.
%   See also: DCALC

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



% Created 8/11/99
[OK,smod]=rankcheck(smod);
if ~OK
   psi=[];
   return
end

% search store for a valid copy
if nargin==1
   ReCalc=0;
end
if ~ReCalc && isfield(smod.store,'vpsi')    
   % psi depends on design and candidate sets
   if (smod.store.vpsi.designstate==designstate(smod)) && (smod.store.vpsi.candstate==candstate(smod)) && ...
         (smod.store.vpsi.modelstate==modelstate(smod))
      psi=smod.store.vpsi.data;
      return
   end
end

% V-optimality is trace(Ainv*(sum(x'x)/nx))
fs=factorsettings(smod);

% calc it ourselves then
[smod,K]=sumxtx(smod);
m = InitStore(model(smod),fs);
Ai= cov(m);
psi=sum(Ai(:).*K(:));


% store result
smod.store.vpsi.data=psi;
smod.store.vpsi.designstate=designstate(smod);
smod.store.vpsi.candstate=candstate(smod);
smod.store.vpsi.modelstate=modelstate(smod);

if nargout<2
   nm=inputname(1);
   if ~isempty(nm)
      assignin('caller',nm,smod);
   end
end
return