0001 function [out] = errorComputation2_grad(x,Prob)
0002
0003 model = Prob.user.model;
0004 f0 = errorComputation2(x,Prob);
0005 if length(x) == length(model.lb)
0006 method = 1;
0007 else
0008 method = 2;
0009 end
0010
0011 out = zeros(size(x));
0012
0013 if isfield(Prob.user, 'diff_interval')
0014 diff = Prob.user.diff_interval;
0015 else
0016 diff = 1e-5;
0017 end
0018 if isfield(Prob.user, 'useparfor')
0019 useparfor = Prob.user.useparfor;
0020 else
0021 useparfor = false;
0022 end
0023
0024
0025 if method == 2
0026 if useparfor
0027 parfor i = 1:length(x)
0028 xnew = x;
0029 tdiff = diff/norm(model.N(:,i));
0030 xnew(i) = xnew(i) + tdiff;
0031 f1 = errorComputation2(xnew, Prob);
0032 out(i) = (f1-f0)/tdiff;
0033 end
0034 else
0035 for i = 1:length(x)
0036 xnew = x;
0037 tdiff = diff/norm(model.N(:,i));
0038 xnew(i) = xnew(i) + tdiff;
0039 f1 = errorComputation2(xnew, Prob);
0040 out(i) = (f1-f0)/tdiff;
0041 end
0042 end
0043 elseif method == 1
0044 idxzero = false(size(x));
0045 for i = 1:length(model.isotopomer)
0046 if isempty(model.isotopomer{i})
0047 idxzero(i) = true;
0048 end
0049 end
0050
0051 if length(x) ~= length(model.lb)
0052 display('shoot');
0053 pause;
0054 end
0055
0056 out = NaN*ones(length(x),1);
0057 out(idxzero) = 0;
0058 else
0059 display('whoops');
0060 return;
0061 end
0062
0063 return;