From 03641585e4141beea5400faf7de9d2c198d3b3f4 Mon Sep 17 00:00:00 2001
From: Willi Mutschler <willi@mutschler.eu>
Date: Thu, 26 Nov 2020 12:58:34 +0100
Subject: [PATCH] :white_check_mark: Fix lsqnonlin in Octave

---
 matlab/optimization/dynare_minimize_objective.m | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/matlab/optimization/dynare_minimize_objective.m b/matlab/optimization/dynare_minimize_objective.m
index 475392f593..512f3c8dc7 100644
--- a/matlab/optimization/dynare_minimize_objective.m
+++ b/matlab/optimization/dynare_minimize_objective.m
@@ -537,7 +537,13 @@ switch minimizer_algorithm
     if options_.silent_optimizer
         optim_options = optimset(optim_options,'display','off');
     end
-    [opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(objective_function,start_par_value,bounds(:,1),bounds(:,2),optim_options,varargin{:});
+    if ~isoctave        
+        [opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(objective_function,start_par_value,bounds(:,1),bounds(:,2),optim_options,varargin{:});
+    else
+        % Under Octave, use a wrapper, since lsqnonlin() does not have a 6th arg
+        func = @(x)objective_function(x,varargin{:});
+        [opt_par_values,Resnorm,fval,exitflag,OUTPUT,LAMBDA,JACOB] = lsqnonlin(func,start_par_value,bounds(:,1),bounds(:,2),optim_options);
+    end    
   otherwise
     if ischar(minimizer_algorithm)
         if exist(minimizer_algorithm)
-- 
GitLab