MATLAB Answers


simultaneous fitting of two plots with two functions

Asked by Arun Kumar Bar on 16 Sep 2018
Latest activity Commented on by Arun Kumar Bar on 25 Sep 2018
I have two sets of dependent variable column vectors (y1, y2) for a set of independent variable column vectors (x). I want to fit the (x, y1) plot with the function f1(ca. f1 = (a + (b-a)*(1 + c*x^d))) and the (x, y2) plot with the function f2(ca. f2 = (b-a)*c*x^d)) simultaneously. Could anyone please help?
Many thanks, in advance! Arun


What do you mean by simultaneous? Based on your equations, the transformation from x to y_1 is independent of y_2 and likewise x -> y_2 is independent of y_1. So you can just fit the two functions separately.
The parameters a, b, c and d are to be same for both the fits. If I fit separately, it will not guarantee same values of the parameters for both the fits. Anyway, thank you.

Sign in to comment.




2 Answers

Answer by Torsten
on 17 Sep 2018
 Accepted Answer

Use "lsqcurvefit" with the data set xdata = (x,x),ydata = (y1,y2).
Best wishes


Hi Torsten, Thanks a lot for your help! Could you please help me out from the associated following problem?
As I mentioned earlier, for the set of independent vectors x1, there are two sets of vectors, y1 and y2. So essentially, I should be able to fit them separately, ca. (x1 vs y1) and (x1 vs y2) plots. When I use APP in MATLAB, it works fine with the following custom equation:
But, it does not work in CommandWindow when I use the same equation in the function:
fun=@(m,x1) (m(1)+((m(2)-m(1)).*(1+(((2.*pi.*x1.*m(3)).^(1-m(4))).*sin(m(4).*pi/2)))/(1+(2.*((2.*pi.*x1.*m(3)).^(1-m(4)).*sin(m(4).*pi/2)))+((2.*pi.*x1.*m(3)).^((2-(2.*m(4))))))));
The error is a bit surprising to me! Both the x1 and y1 are 24x1 matrices (column vectors). While, the fun is returning a 24x24 matrix, with all identical elements.
Suppose, if I use, m0=[1.1; 17; 1.85; 0.54]; % these are the parameters obtained from the best fit using APP with the above custom equation; fun(m0,x1) returns a 24x24 matrix with all identical elements. Could you please suggest where I am going wrong ?
Kind regards, Arun
... .*pi/2)))./(1+(2.* ...
instead of
... .*pi/2)))/(1+(2.* ...
Best wishes
That's great! Thanks a lot, Torsten!
Kind regards, Arun

Sign in to comment.

Answer by Torsten
on 17 Sep 2018

xdata=[x(:,1); x(:,1)];
ydata=[y1(:,1); y2(:,1)];
fun=@(x,xdata) [f1(xdata(1:numel(xdata)/2),x(1),x(2),x(3),x(4)); f2(xdata(1:numel(xdata)/2),x(1),x(2),x(3),x(4))];
x0=[- - - -];
where f1(...),f2(...) must be column vectors each of the same size as x.


Sign in to comment.