function [estimates, model, exitflag, sse] = exp_nooffset2(xdata, ydata,weights) % Call fminsearch with a random starting point. % start_point = rand(1, 3); if nargin<3 weights = ones(size(ydata)); end [~,s]=sort(ydata); f=find(ydata(s)/max(ydata)>0.5,1,'first'); start_point = [rand(1,1)/xdata(s(f))*5]; model = @exp_Yoffs_fun; options.MaxFunEvals = 10^6*length(start_point); options.MaxIter = 10^6; [estimates, sse, fval, exitflag] = fminsearch(model, start_point,options); % expfun accepts curve parameters as inputs, and outputs sse, % the sum of squares error for A + B*exp(-lambda*xdata)-ydata, % and the FittedCurve. FMINSEARCH only needs sse, but we want % to plot the FittedCurve at the end. function [sse, FittedCurve] = exp_Yoffs_fun(params) lambda = params(1); FittedCurve = exp(-lambda * xdata); ErrorVector = FittedCurve - ydata; sse = sum(ErrorVector .^ 2.*weights); end end