function [pars, cosnJ] = ident_bruteforce(J, max_dim_cova_group, TeX, name_tex, tittxt, tol_deriv) % function [pars, cosnJ] = ident_bruteforce(J,n,TeX, pnames_TeX,tittxt) % ------------------------------------------------------------------------- % given the Jacobian matrix J of moment derivatives w.r.t. parameters % computes, for each column of J, the groups of columns from 1 to n that % can replicate at best the derivatives of that column % ========================================================================= % INPUTS % J [double] (normalized) Jacobian matrix of moment derivatives % max_dim_cova_group [scalar] maximum size of covariance groups tested % TeX [scalar] Indicator whether TeX-output is requested % pnames_TeX [char] list of tex names % tittxt [string] string indicating the title text for % graphs and figures % ------------------------------------------------------------------------- % OUTPUTS % pars : cell array with group of params for each column of J for 1 to n % cosnJ : cosn of each column with the selected group of columns % ------------------------------------------------------------------------- % This function is called by % * identification_analysis.m % ========================================================================= % Copyright © 2009-2019 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 . % ========================================================================= global M_ options_ OutputDirectoryName = CheckPath('identification',M_.dname); totparam_nbr = size(J,2); % number of parameters if nargin<2 || isempty(max_dim_cova_group) max_dim_cova_group = 4; % max n-tuple end if nargin<3 || isempty(TeX) TeX = 0; % no Tex output tittxt=''; end if nargin < 6 tol_deriv = 1.e-8; end tittxt1=regexprep(tittxt, ' ', '_'); tittxt1=strrep(tittxt1, '.', ''); cosnJ = zeros(totparam_nbr,max_dim_cova_group); %initialize pars{totparam_nbr,max_dim_cova_group}=[]; %initialize for ll = 1:max_dim_cova_group h = dyn_waitbar(0,['Brute force collinearity for ' int2str(ll) ' parameters.']); for ii = 1:totparam_nbr tmp = find([1:totparam_nbr]~=ii); tmp2 = nchoosek(tmp,ll); %find all possible combinations, ind16 could speed this up % One could also use a mex version of nchoosek to speed this up, e.g.VChooseK from https://de.mathworks.com/matlabcentral/fileexchange/26190-vchoosek cosnJ2=zeros(size(tmp2,1),1); b=[]; for jj = 1:size(tmp2,1) [cosnJ2(jj,1), b(:,jj)] = cosn([J(:,ii),J(:,tmp2(jj,:))]); end cosnJ(ii,ll) = max(cosnJ2(:,1)); if cosnJ(ii,ll)>tol_deriv if ll>1 && ((cosnJ(ii,ll)-cosnJ(ii,ll-1))