nonlinear curve fit: how to optimize?
Ältere Kommentare anzeigen
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:

This is the fit I get from the code above for my data in log-log space:

But this is what I want and I could get the fit by manually changing my fit parameters:

How can I optimize my 3 parameters?
Thanks in advance!
6 Kommentare
Torsten
am 16 Okt. 2015
Try what happens if you multiply your ydata and your function by a factor of, say, 1e14.
Best wishes
Torsten.
Mona Mahboob Kanafi
am 16 Okt. 2015
Torsten
am 16 Okt. 2015
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.
Use lsqnonlin instead of lsqcurvefit, define the F_i as
F_i = (y_func(xdata(i))-ydata(i))/ydata(i)
and see what you get.
Best wishes
Torsten.
Mona Mahboob Kanafi
am 16 Okt. 2015
Torsten
am 16 Okt. 2015
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.
Mona Mahboob Kanafi
am 19 Okt. 2015
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu Get Started with Curve Fitting Toolbox finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!