# Combining fsolve and lsqcurvefit

2 views (last 30 days)
Sergio Quesada on 6 Jun 2018
Edited: Sergio Quesada on 7 Jun 2018
Good evening,
I have a collection of experimental data (xi, yi) called (texp, rexp). I know that 'texp' must be derived from 'rexp' following:
t(i)=k(1)*integral(@(x) exp(-k(2)./(x.*log(x))), 1, r(i))
, being k(1) and k(2) parameters. So 'r(i)' is the upper integration limit. I need to find the values of k(1) and k(2) that best fits my model. My strategy is solving the equations 't(i)-texp=0' in 'r' with fsolve and fitting k(1) and k(2) with lsqcurvefit. I am trying this:
rteor=@(k,r) fsolve(@(r) arrayfun(@(T) k(1).*integral(@(x) exp(-k(2)./(x.*log(x))), 1, r)-T, texp), 1.0001);
x0=[2,6.12750];
k = lsqcurvefit(rteor, x0, texp, rexp)
which results on the following errors:
Error using lsqcurvefit (line 251)
Function value and YDATA sizes are not equal.
Thank you for your help!
##### 6 CommentsShow 5 older commentsHide 5 older comments
Sergio Quesada on 7 Jun 2018
Edited: Sergio Quesada on 7 Jun 2018
well, taking your comment into account, I have made some advances. I changed the name of the variable in fsolve, with no effect. But i have changed the initial points to 8:
inpts=[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8];x0=[10 8];
rteor=@(k, r) arrayfun(@(p) fsolve(@(r) arrayfun(@(T) k(1).*integral(@(x) exp(-k(2)./(x.*log(x))), 1, r)-T, texp), p), inpts)
k = lsqcurvefit(rteor, x0, texp, rexp)
and matlab gives a result (after new 20-orange Levenberg-Marquardt warning messages):
k =
8.8155 9.8131
I am hopeful, but when trying to plot rteor with this values using
plot(texp,rexp,'ko',texp,rteor(k,texp),'x');
, 'rteor' appers as an horizontal line... Am i wrong now in 'plot' ?
(thanks !!!)

Sign in to comment.

### Categories

Find more on Systems of Nonlinear Equations 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!