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