more speeding up changes

git-svn-id: https://www.dynare.org/svn/dynare/trunk@2353 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
michel 2009-01-05 11:37:05 +00:00
parent 163b4461ec
commit 3a55016cf6
1 changed files with 24 additions and 22 deletions

View File

@ -70,29 +70,31 @@ while newRank && (t<smpl)
if Finf>kalman_tol && newRank if Finf>kalman_tol && newRank
icc=icc+1; icc=icc+1;
Kinf = Pinf*Zi'; Kinf = Pinf*Zi';
a = a + Kinf*(prediction_error/Finf); Kinf_Finf = Kinf/Finf;
Pstar = Pstar + Kinf*(Kinf'*(Fstar/(Finf*Finf))) - (Kstar*Kinf'+Kinf*Kstar')/Finf; a = a + Kinf_Finf*prediction_error;
Pinf = Pinf - Kinf*(Kinf'/Finf); Pstar = Pstar + Kinf*(Kinf_Finf'*(Fstar/Finf)) - Kstar*Kinf_Finf' ...
- Kinf_Finf*Kstar';
Pinf = Pinf - Kinf*Kinf_Finf';
lik(t) = lik(t) + log(Finf); lik(t) = lik(t) + log(Finf);
if ~isempty(options_.diffuse_d) % $$$ if ~isempty(options_.diffuse_d)
newRank = (icc<options_.diffuse_d); % $$$ newRank = (icc<options_.diffuse_d);
if newRank && (any(diag(Za*Pinf*Za')>kalman_tol)==0 & rank(Pinf,crit)==0); % $$$ if newRank && (any(diag(Za*Pinf*Za')>kalman_tol)==0 & rank(Pinf,crit)==0);
options_.diffuse_d = icc; % $$$ options_.diffuse_d = icc;
newRank=0; % $$$ newRank=0;
disp('WARNING: Change in OPTIONS_.DIFFUSE_D in univariate DKF') % $$$ disp('WARNING: Change in OPTIONS_.DIFFUSE_D in univariate DKF')
disp(['new OPTIONS_.DIFFUSE_D = ',int2str(icc)]) % $$$ disp(['new OPTIONS_.DIFFUSE_D = ',int2str(icc)])
disp('You may have to reset the optimisation') % $$$ disp('You may have to reset the optimisation')
end % $$$ end
else % $$$ else
newRank = (any(diag(Za*Pinf*Za')>kalman_tol) | rank(Pinf,crit)); % $$$ newRank = (any(diag(Za*Pinf*Za')>kalman_tol) | rank(Pinf,crit));
if newRank==0 % $$$ if newRank==0
P0= T*Pinf*T'; % $$$ P0= T*Pinf*T';
newRank = (any(diag(Za*P0*Za')>kalman_tol) | rank(P0,crit)); % $$$ newRank = (any(diag(Za*P0*Za')>kalman_tol) | rank(P0,crit));
if newRank==0 % $$$ if newRank==0
options_.diffuse_d = icc; % $$$ options_.diffuse_d = icc;
end % $$$ end
end % $$$ end
end % $$$ end
elseif Fstar>kalman_tol elseif Fstar>kalman_tol
lik(t) = lik(t) + log(Fstar) + prediction_error*prediction_error/Fstar; lik(t) = lik(t) + log(Fstar) + prediction_error*prediction_error/Fstar;
a = a + Kstar*(prediction_error/Fstar); a = a + Kstar*(prediction_error/Fstar);