About implementation of lsqnonlin
3 ビュー (過去 30 日間)
古いコメントを表示
Hi
I have time-course data variable 'prodconcnumbers', size 18000X22 meaning 18000 data points for each of the 22 molecules in my model.
I have 30 parameters to be fit.
I invoke fitting using lsqnonlin as follows:
karbitraryvalues (My initial value parameters)=row vector of some 30 starting values.
lb and ub were again assigned bounds.
lsqnonlinoptions=optimset('Algorithm','Levenberg-Marquardt');
[kestimates,errorperspecies]= lsqnonlin(@lsqnonlin_fun, karbitraryvalues,lb,ub,lsqnonlinoptions);
So, first I built my objfunction as follows:
for eachspecies from 1 to 22
errorpermolecule(eachspecies)=prodconcnumbers(:,eachspecies)-estimatedconcnumbers(:,eachspecies);
end
So, in conclusion, my obj.function I want to minimize errorperspecies is of length 22 where as I have 30 parameters to b estimated using this lsqnonlin.
I am getting the following error:
??? Error using ==> lsqncommon at 102
Levenberg-Marquardt and Gauss-Newton algorithms do not handle bound constraints and trust-region-reflective algorithm requires at least as
many equations as variables; aborting.
What mistake am I doing? Appreciate your time and help.
2 件のコメント
Matt J
2014 年 5 月 11 日
lsqcurvefit might be simpler here than lsqnonlin. Your data comparison is simple subtraction.
Matt J
2020 年 5 月 12 日
Abdelwahab Afifi's comment moved here:
How you define your objective function interms of the variables' vector of length 30 ?
採用された回答
Matt J
2014 年 5 月 11 日
Since you have bound constraints, there was no point choosing the Levenberg-Marquardt algorithm, since it will not handle those. When it saw that you were applying bounds, lsqnonlin defaulted back to the trust-region-reflective algorithm.
The other problem was that you are trying to fit 30 parameters with only 22 data points. The trust-region-reflective algorithm cannot process under-determined problems, but even if it could, you would get poor results because your problem is undetermined.
Find more data points with which to do the fit.
4 件のコメント
Matt J
2014 年 5 月 12 日
The code you've shown suggests that your objective function is only generating one error term per molecule for a total of 22 error measurements. If you really have 18000*22 measurements, couldn't you be returning the error for each of those?
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Nonlinear ARX Models についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!