LSQCURVEFIT Error When Trying To Optimize Parameters
Mostra commenti meno recenti
I am trying to optimize 5 parameters using lsqcurvefite. I keep getting "Array indices must be positive integers or logical values". "Error in @(c,xdata) c(0)+c(1)..." line. I know my two vectors/data (VarName1 and VarName2 attached) are not positive integers, but that is my data for which I am trying obtain c0, c1, c2, c3, and c4 so that I can then fit my data with the best curve. How can I do nonlinear least squares fitting when most data will not be integers and not necessarily positive?
xdata = VarName1;
ydata = VarName2;
predicted = @(c,xdata) c(0) + c(1)*cos(xdata) + c(2)*cos(xdata) + c(3)*cos(xdata) + c(4)*cos(xdata);
c0 = [-276.8401; -0.01386; 0.007231; 0.011035; 0.001128];
[ahat,resnorm,residual,exitflag,output,lambda,jacobian] = ...
lsqcurvefit(predicted,c0,xdata,ydata);
1 Commento
Kelly McGuire
il 1 Feb 2019
Modificato: Kelly McGuire
il 1 Feb 2019
Risposta accettata
Più risposte (1)
Alan Weiss
il 1 Feb 2019
0 voti
I think that you probably made a gross modeling error, because your predicted function is the same as
predicted = @(c,xdata) c(1) + (c(2) + c(3) + c(4) + c(5))*cos(xdata);
which makes it clear that you are really fitting to
predicted = @(c,xdata) c(1) + c(2)*cos(xdata);
In other words, you are trying to fit four parameters that are indistinguishable from one parameter.
I would guess (but don't know) that you meant
predicted = @(c,xdata) c(0) + cos(c(1)*xdata) + cos(c(2)*xdata) + cos(c(3)*xdata) + cos(c(4)*xdata);
or maybe
predicted = @(c,xdata) c(0) + c(5)*cos(c(1)*xdata) + c(6)*cos(c(2)*xdata) + c(7)*cos(c(3)*xdata) + c(8)*cos(c(4)*xdata);
One more thing: the problem as your wrote it is linear in the c variables, and if you keep it linear in those variables, then you should use a linear solver (backslash or lsqlin) instead of a nonlinear solver.
Alan Weiss
MATLAB mathematical toolbox documentation
2 Commenti
Kelly McGuire
il 1 Feb 2019
Modificato: Kelly McGuire
il 1 Feb 2019
Alex Sha
il 6 Mar 2020
Hi, Kelly, the fellow result can be get wiyhout effort, looks perfect:
Root of Mean Square Error (RMSE): 7.26715070782157E-5
Sum of Squared Residual: 1.00341810879364E-7
Correlation Coef. (R): 0.999871461575304
R-Square: 0.999742939672734
Adjusted R-Square: 0.999710807131826
Parameter Best Estimate
---------- -------------
c1 -276.838397020957
c2 -0.00624011143593994
c3 0.00535610180032774
c4 0.014121146620983
c5 0.000862234247990687

Categorie
Scopri di più su Linear Least Squares in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
