www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@des_multimod/acalc.m
function [psi,des]=acalc(des,ReCalc) % DES_MULTIMOD/ACALC A-optimal value % PSI=ACALC(D) returns the v-optimality value for the % design object D. % See also: DCALC, VCALC % Copyright 2000-2004 The MathWorks, Inc. and Ford Global Technologies, Inc. if ~rankcheck(des) psi=[]; return end % search store for a valid copy if nargin==1 ReCalc=0; end if ~ReCalc & isfield(des.store,'apsi') % psi depends on design if (des.store.apsi.designstate==designstate(des)) & ... (des.store.apsi.modelstate==modelstate(des)) psi=des.store.apsi.data; return end end if npoints(des) mmdl=model(des); % A-optimality is weighted sum of trace(inv(X'X)) mdls=get(mmdl,'models'); wts=get(mmdl,'weights'); % weights are already guaranteed to sum to 1 by the multimod object psi=0; fs=factorsettings(des); for n=1:length(wts) mdls{n} = InitStore(mdls{n},fs); Ai = cov(mdls{n}); psi = psi+wts(n).*sum(diag(Ai)); end else psi=[]; end % store result des.store.apsi.data=psi; des.store.apsi.designstate=designstate(des); des.store.apsi.modelstate=modelstate(des); if nargout<2 nm=inputname(1); if ~isempty(nm) assignin('caller',nm,des); end end return