diff --git a/matlab/check_consistency_covariances.m b/matlab/check_consistency_covariances.m new file mode 100644 index 000000000..e8245721d --- /dev/null +++ b/matlab/check_consistency_covariances.m @@ -0,0 +1,31 @@ +function correct_flag=check_consistency_covariances(Covariance_matrix) +% function check_consistency_covariances(Covariance_matrix) +% checks consistency of covariance matrices by checking whether the +% covariances imply correlations bigger than 1. +% +% Outputs: correct_flag [scalar] 0 if not consistent, 1 otherwise +% Inputs: Covariance_matrix [matrix] covariance matrix to be checked + +% Copyright (C) 2013 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +%compute theoretical bound by assuming correlation of 1 +bound=diag(sqrt(diag(Covariance_matrix)))*ones(size(Covariance_matrix))*diag(sqrt(diag(Covariance_matrix))); +correct_flag=1; +if any(any(tril(Covariance_matrix,-1)>bound)) || any(any(tril(Covariance_matrix,-1)<-bound)) + correct_flag=0; +end \ No newline at end of file diff --git a/matlab/check_model.m b/matlab/check_model.m index 3edf7b746..60cf7cba1 100644 --- a/matlab/check_model.m +++ b/matlab/check_model.m @@ -30,4 +30,13 @@ end if (DynareModel.exo_det_nbr > 0) && (DynareModel.maximum_lag > 1 || DynareModel.maximum_lead > 1) error(['Exogenous deterministic variables are currently only allowed in' ... ' models with leads and lags on only one period']) +end + +if ~check_consistency_covariances(DynareModel.Sigma_e) + error('The specified covariances for the structural errors are not consistent with the variances as they imply a correlation larger than +-1') +end +if ~isequal(DynareModel.H,0) + if ~check_consistency_covariances(DynareModel.H) + error('The specified covariances for the measurement errors are not consistent with the variances as they imply a correlation larger than +-1') + end end \ No newline at end of file