How to use multistart with 'fit' function
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
roni zidane
el 4 de En. de 2019
Respondida: Alex Sha
el 29 de Abr. de 2019
Hi There,
i want to use 'Multistart' to find the best solution for a bi-exponential decay function that i am fitting to my data with bounds.
Below is the code i am using.
% bi-exponential decay model
fparam = fittype(@(a,b,c,d,x)(a)*exp(-(1/b)*x)+abs(1-a)*(exp(-(1/c)*x))+d);
lb1 = [0,0,0,0];
ub1 = [1,30,200,80];
b0 = [0.3,0.2,20,10];
x = [3.39,8.59,13.8,19,24.2,29.4,34.6,39.81,45.0,50.21];
y = [1,0.2905,0.0894,0.0838,0.1173,0.1006,0.0782,0.0894,0.1061,0.0726]
opts = fitoptions('Display','Off','Method','NonlinearLeastSquares','Normalize','Off',...
'Startpoint',b0, 'Robust','On','Lower',lb1,'Upper',ub1,...
'TolFun',1e-3);
[estTmp,Goft,Out] = fit(x,y,fparam,opts);
Since i need to start somewhere i have randomly chosen 'b0' values. I want to avoid local minima, so i want to use 'Multistart' function for optimization and find the best solution within the 'bounds' (here given by 'lb1', 'ub1').
Can someone please help me bridge 'Multistart' with 'fit' ?
P.S. I know someone might suggest to use 'lsqnonlin' instead of 'fit'. The reason i am not using it is becasue i need the output 'stats' (e.g. goodness of fit and R^2 values) which i might have to compute manually in 'lsqnonlin'. So please suggest me only the ways to combine 'Multistart' and 'fit'
0 comentarios
Respuesta aceptada
Alan Weiss
el 4 de En. de 2019
As documented, the only local solvers available for MultiStart are fmincon, fminunc, lsqcurvefit, and lsqnonlin. Sorry, no other local solvers are supported.
Alan Weiss
MATLAB mathematical toolbox documentation
2 comentarios
Alan Weiss
el 7 de En. de 2019
As far as getting the curve to start from level 1 at x = 3.39, I suggest that you shift all x values by 3.39 (so x = 0 corresponds to your first data point) and then set d = 0 in your formula (fit parameters a, b, and c, but do not allow a nonzero value of d). Then your curve will start at the height 1 at x = 0.
I am not sure that calculating R^2 makes much sense in nonlinear fitting.
Alan Weiss
MATLAB mathematical toolbox documentation
Más respuestas (1)
Alex Sha
el 29 de Abr. de 2019
Multi-solutions (Parameter a is different):
1:
Root of Mean Square Error (RMSE): 0.109662308225183
Sum of Squared Residual: 0.12025821845275
Correlation Coef. (R): 0.948796774493673
R-Square: 0.900215319289597
Parameter Best Estimate
---------- -------------
a 0.057712785437929
b 7.20470183282193
c 7.20470183925339
d 0.0814111332963631
2:
Root of Mean Square Error (RMSE): 0.109662308225183
Sum of Squared Residual: 0.12025821845275
Correlation Coef. (R): 0.948796774685829
R-Square: 0.900215319654232
Parameter Best Estimate
---------- -------------
a 0.0035886762500919
b 7.20470208037725
c 7.20470182707246
d 0.0814111343856455
3:
Sum of Squared Residual: 0.12025821845275
Correlation Coef. (R): 0.948796775443418
R-Square: 0.900215321091827
Parameter Best Estimate
---------- -------------
a 0.176245451532707
b 7.20470187824529
c 7.20470176505555
d 0.0814111355698764
0 comentarios
Ver también
Categorías
Más información sobre Fit Postprocessing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!