From 6ef4d483b21c7eba4c9b4f07ad0ab22e102647ed Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer <jpfeifer@gmx.de> Date: Sun, 27 Aug 2023 13:37:16 +0200 Subject: [PATCH] dynare_solve.m: fix logic of initial guess randomization which forgot case of imaginary numbers (cherry picked from commit 7df3ff50599dc086f5d7bd14ab4c0cfbc7d48ba8) --- matlab/dynare_solve.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/matlab/dynare_solve.m b/matlab/dynare_solve.m index 3527659419..82d96d0c36 100644 --- a/matlab/dynare_solve.m +++ b/matlab/dynare_solve.m @@ -105,7 +105,7 @@ if jacobian_flag tentative_number = tentative_number+1; x(idx) = rand(in0, 1)*10; [fvec, fjac] = feval(f, x, args{:}); - wrong_initial_guess_flag = ~all(isfinite(fvec)) || any(isinf(fjac(:))) || any(isnan((fjac(:)))); + wrong_initial_guess_flag = ~all(isfinite(fvec)) || any(isinf(fjac(:))) || any(isnan((fjac(:)))) || any(~isreal(fvec)) || any(~isreal(fjac(:))); end % If all previous attempts failed, try with real numbers. tentative_number = 0; @@ -113,7 +113,7 @@ if jacobian_flag tentative_number = tentative_number+1; x(idx) = randn(in0, 1)*10; [fvec, fjac] = feval(f, x, args{:}); - wrong_initial_guess_flag = ~all(isfinite(fvec)) || any(isinf(fjac(:))) || any(isnan((fjac(:)))); + wrong_initial_guess_flag = ~all(isfinite(fvec)) || any(isinf(fjac(:))) || any(isnan((fjac(:)))) || any(~isreal(fvec)) || any(~isreal(fjac(:))); end % Last tentative, ff all previous attempts failed, try with negative numbers. tentative_number = 0; @@ -121,7 +121,7 @@ if jacobian_flag tentative_number = tentative_number+1; x(idx) = -rand(in0, 1)*10; [fvec, fjac] = feval(f, x, args{:}); - wrong_initial_guess_flag = ~all(isfinite(fvec)) || any(isinf(fjac(:))) || any(isnan((fjac(:)))); + wrong_initial_guess_flag = ~all(isfinite(fvec)) || any(isinf(fjac(:))) || any(isnan((fjac(:)))) || any(~isreal(fvec)) || any(~isreal(fjac(:))); end end else -- GitLab