How to do parameter fitting for a system of equations with 3 independent variables?

5 views (last 30 days)
I have a system of 3 equations with 3 independent variables( x1,x2,x3) and correspondingly 3 dependent variables( y1,y2,y3) as follows:
  • y1=((b1*x1)/(1+(b1*x1)+(b2*x2)+(b3*x3))) + ((b4*x1)/(1+(b1*x1)+(b2*x2)+(b3*x3)));
  • y2=((b2*x2)/(1+(b1*x1)+(b2*x2)+(b3*x3))) + ((b5*x2)/(1+(b1*x1)+(b2*x2)+(b3*x3)));
  • y3=((b3*x3)/(1+(b1*x1)+(b2*x2)+(b3*x3))) + ((b6*x3)/(1+(b1*x1)+(b2*x2)+(b3*x3)));
x and y data are available.
I need to fit 6 parameters( b1,b2,b3,b4,b5,b6) in this system.
I tried using nlinfit but couldn't make it work for this case. Suggest me how to solve this problem. Thank you.

Accepted Answer

Torsten
Torsten on 18 Aug 2015
Edited: Torsten on 18 Aug 2015
xdata = horzcat(x1,x2,x3);
ydata = horzcat(y1,y2,y3);
fun=@(b,xdata) horzcat((b(1)+b(4))*x1./(1+b(1)*x1+b(2)*x2+b(3)*x3),(b(2)+b(5))*x2./(1+b(1)*x1+b(2)*x2+b(3)*x3),(b(3)+b(6))*x3./(1+b(1)*x1+b(2)*x2+b(3)*x3));
b0=[1 ; 1 ; 1 ; 1 ; 1 ; 1];
[x,resnorm] = lsqcurvefit(fun,b0,xdata,ydata);
Best wishes
Torsten.
  1 Comment
Amaya
Amaya on 25 May 2017
I tried doing this on a similar problem and the extimated x output changes with the initial guess, even when setting a very low tolerance:
% code
opts = optimset('TolX',1e-15);
[vestimated,resnorm] = lsqcurvefit(fun,x0,xdata,ydata,[],[],opts);%
how does lsqcurvefit pass x1,x2 and x3 into fun?, shouldn't fun be expressed in terms of
xdata(initial_index:final_index).
rather than in terms of x1,x2 and x3?
Thanks

Sign in to comment.

More Answers (1)

Balan
Balan on 18 Aug 2015
Works perfect. Thanks a lot Torsten.

Categories

Find more on Linear and Nonlinear Regression in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!