Re: Fitting function involving an integral
- From: Randy Poe <poespam-trap@xxxxxxxxx>
- Date: Fri, 28 Sep 2007 08:19:27 -0700
On Sep 28, 10:27 am, "Raffaello Ferone"
<raffaello.ferone.nos...@xxxxxxxxxxxxx> wrote:
Hello
I have a problem in fitting data with a
function involving an integral.
The function I have is:
G(exdata)=INTEGRAL[((f(1)./0.296).*(((f(3).^2)./(((x+f(4).*exdata(i)-f(2)).^2)+((f(3)).^2))).*((sech((1./(2*0.296)).*x)).^2)))
dx]
where f(i)s are the fitting parameters, x is the variable I
want to integrate over. exdata contains my experimental data.
I defined in an m-file the function in the following way:
function y=fitfunction(f,exdata)
for i=1:length(exdata)
t(i)=quad(@(x)((f(1)./0.296).*(((f(3).^2)./(((x+f(4).*exdata(i)-f(2)).^2)+((f(3)).^2))).*((sech((1./(2*0.296)).*x)).^2))),-15,15,1.0e-10);
y=t';
end
I stress that I wrote exdata(i) and t(i) because exdata is a
vector of several points, and Matlab needs a scalar to
perform the integral. In this way, it performs the integral
for each value of exdata. In this way, the vector y is built.
Then I use the previous function to fit my data by means of
the command: lsqcurvefit(@fitfunctionLorentzian, x0, xdata,
ydata,[],[],options) which appears in an another m-file.
The problem is that when I try to perform the fit, the value
I get for the fitting parameters are completely meaningless.
The experimental data represent a peak, and the Matlab for
some reason is not able at all to recognize even the center
of the peak.
This sounds familiar, like the variables are diverging far
away from where you think they should be, and the fit
function is essentially flat and unchanging (hence the gradient
is near zero and the procedure exits). I've seen this, but I
can't recall what I did about it. Sorry.
And not even the order of magnitude. I do not
know whether I make some mistakes or not. Generally, I got
very good results for the fits thanks to Matlab.
Could someone help me, please?
Thanks a lot for your help.
Raffaello
If you plot fitfunction( x0, xdata ), does it look reasonable? That
would be a check as to whether your function is doing what
you expect it to, and that x0 is reasonable.
Perhaps you could try using the bound constraints that
LSQCURVEFIT allows.
You might also try fixing some of your parameters
and only optimizing a subset.
- Randy
.
- Follow-Ups:
- References:
- Fitting function involving an integral
- From: Raffaello Ferone
- Fitting function involving an integral
- Prev by Date: Re: newff
- Next by Date: Re: Weird publish behavior
- Previous by thread: Fitting function involving an integral
- Next by thread: Re: Fitting function involving an integral
- Index(es):
Relevant Pages
|