diff --git a/matlab/dynare_solve.m b/matlab/dynare_solve.m
index 3527659419e43e63613ab7fed8090e3d3650b142..82d96d0c36602edb771c90b5d1ea3a4cb15b707d 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