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

5 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

Torsten
Torsten il 18 Ago 2015
Modificato: Torsten il 18 Ago 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 Commento
Amaya
Amaya il 25 Mag 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

Accedi per commentare.

Più risposte (1)

Balan
Balan il 18 Ago 2015
Works perfect. Thanks a lot Torsten.

Categorie

Scopri di più su Linear and Nonlinear Regression in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by