LSQCURVEFIT Error When Trying To Optimize Parameters
古いコメントを表示
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 件のコメント
Kelly McGuire
2019 年 2 月 1 日
編集済み: Kelly McGuire
2019 年 2 月 1 日
採用された回答
その他の回答 (1 件)
Alan Weiss
2019 年 2 月 1 日
0 投票
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 件のコメント
Kelly McGuire
2019 年 2 月 1 日
編集済み: Kelly McGuire
2019 年 2 月 1 日
Alex Sha
2020 年 3 月 6 日
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

カテゴリ
ヘルプ センター および File Exchange で Linear Least Squares についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
