nonlinear curve fit: how to optimize?
1 回表示 (過去 30 日間)
古いコメントを表示
I have a custom model which I want to fit to my data. The model works manually, i.e. when I know approximately the fit paramaters. But now I need to optimize this solution, so that it works for similar curves (the one that I will give here is only a perfect noise free data), so please consider this problem in a general case.
The fit model is:
function [x,errorfitted] = fit1d_ABCpara(q,psd1d)
x0 = [2e-10,6e-4, 2.4];
lb = [1e-11, 3e-04,2];
ub = [Inf,3e-3,3];
fun = @(x,xdata)0.5e14 * x(1) .* (1+((x(2).*q).^2)).^-((x(3)/2));
[x,errorfitted] = lsqcurvefit(fun,x0,q,psd1d,lb,ub);
This is the curve for original data points:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/150328/image.jpeg)
This is the fit I get from the code above for my data in log-log space:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/150330/image.jpeg)
But this is what I want and I could get the fit by manually changing my fit parameters:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/150332/image.jpeg)
How can I optimize my 3 parameters?
Thanks in advance!
6 件のコメント
Torsten
2015 年 10 月 16 日
function [x,errorfitted] = fit1d_ABCpara(q,psd1d)
x0 = [2e-10,6e-4, 2.4];
lb = [1e-11, 3e-04,2];
ub = [Inf,3e-3,3];
fun=@(x)(0.5 * x(1) .* (1+((x(2).*q).^2)).^-((x(3)/2))-psd1d)./psd1d;
[x,errorfitted]=lsqnonlin(fun,x0,lb,ub);
Best wishes
Torsten.
採用された回答
Torsten
2015 年 10 月 19 日
To get the curve you want, you will have to introduce different weights for different data points. Deviances between data and model for data with high x-values must be weighted more than deviances between data and model for data with low x-values.
Here is a suggestion on how to modify your code:
function [x,errorfitted] = fit1d_ABCpara(q,psd1d)
x0 = [2e-10,6e-4, 2.4];
lb = [1e-11, 3e-04,2];
ub = [Inf,3e-3,3];
fun=@(x)(0.5 * x(1) .* (1+((x(2).*q).^2)).^-((x(3)/2))-psd1d)./psd1d;
[x,errorfitted]=lsqnonlin(fun,x0,lb,ub);
Best wishes
Torsten.
P.S. Nice to hear that it worked :-)
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!