MATLAB: Fit two data sets with 3 fit parameters, one parameter is the same

fit two data sets

I have 2 data sets: x1,y1 & x2,y2 (different lengths).
% k is a constant
I want to fit:
f1 = @ (p,x1) p(1)./sqrt((x1-k).^2+p(2)^2)+p(3);
f2 =@ (p, x2) p(4)./sqrt((x2-k).^2+p(5)^2)+p(3);
Both data sets should be fit to the same p(3). I would like the fitting to return [p(1) p(2) p(3) p(4) p(5)]
Can I do this with lsqcurvefit?
I hope this makes sense,
Luke

Best Answer

As far as I'm aware, you can only fit a single function at once, so you can try something like this:
f1 = @ (p,x1) p(1)./sqrt((x1-k).^2+p(2)^2)+p(3);
f2 =@ (p, x2) p(4)./sqrt((x2-k).^2+p(5)^2)+p(3);
cost_function=@(p) sum((f1(p,x1) - y1).^2) + sum((f2(p,x2) - y2).^2);
Now you can minimize cost_function, which will find the optimal values of p.
Alternatively (and that is probably a better idea), you can just concatenate the two:
L=[true(numel(x1),1);false(numel(x2),1)]
f_=@(p,x)[f1(p,x(L));f2(p,x(~L))];