From 9a5fc0011e46655dffb9edc58411a32a319cc0cc Mon Sep 17 00:00:00 2001
From: Jacob Smith <jacob.smith@atl.frb.org>
Date: Thu, 5 Aug 2010 12:43:11 -0400
Subject: [PATCH] fixed csminwel to be able to take anonymous functions as well

---
 MatlabFiles/csminwel.m  |  6 +++++-
 MatlabFiles/numgradcd.m | 17 ++++++++++++++---
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/MatlabFiles/csminwel.m b/MatlabFiles/csminwel.m
index fd4c78f..2a954a8 100755
--- a/MatlabFiles/csminwel.m
+++ b/MatlabFiles/csminwel.m
@@ -40,7 +40,11 @@ snit=100;
 %   tailstr=[ ',P' num2str(i)  tailstr];
 %   stailstr=[' P' num2str(i) stailstr];
 %end
-f0 = eval([fcn '(x0,varargin{:})']);
+if ischar(fcn)
+	f0 = eval([fcn '(x0,varargin{:})']);
+else
+	f0 = fcn(x0,varargin{:});
+end
 %ARGLIST
 %f0 = feval(fcn,x0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13);
 % disp('first fcn in csminwel.m ----------------') % Jinill on 9/5/95
diff --git a/MatlabFiles/numgradcd.m b/MatlabFiles/numgradcd.m
index a7b6439..b922e97 100755
--- a/MatlabFiles/numgradcd.m
+++ b/MatlabFiles/numgradcd.m
@@ -26,7 +26,11 @@ x0 = x0(:);
 %for i=nargin-3:-1:1
 %   tailstr=[ ',P' num2str(i)  tailstr];
 %end
-f0 = eval([fcn '(x0,varargin{:})']);
+if ischar(fcn)
+    f0 = eval([fcn '(x0,varargin{:})']);
+else
+    f0 = fcn(x0,varargin{:});
+end
 %f0 = eval([fcn '(x0' tailstr]);
 
 % ** initializations
@@ -60,8 +64,15 @@ badg=0;
 i = 0;
 while i ~= n
    i = i+1;
-   fp = eval([fcn '(argplus(:,i),varargin{:})']);
-   fm = eval([fcn '(argminus(:,i),varargin{:})']);
+   if ischar(fcn)
+       
+    fp = eval([fcn '(argplus(:,i),varargin{:})']);
+    fm = eval([fcn '(argminus(:,i),varargin{:})']);
+   else
+    
+    fp = fcn(argplus(:,i),varargin{:});
+    fm = fcn(argminus(:,i),varargin{:});   
+   end
 %    fp = eval([fcn '(argplus(:,i)' tailstr]);
 %    fm = eval([fcn '(argminus(:,i)' tailstr]);
    g0  = fp - fm;
-- 
GitLab