Re: Fitting function involving an integral



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

.



Relevant Pages

  • How to clean variable?
    ... I need that for the following reason. ... I fit it with one data. ... I noticed that after the first fitting I cannot ... the fitting parameters which was set during the firs fitting. ...
    (comp.graphics.apps.gnuplot)
  • Re: How to clean variable?
    ... I need that for the following reason. ... I fit it with one data. ... the fitting parameters which was set during the firs fitting. ... starting point for the second set of data. ...
    (comp.graphics.apps.gnuplot)
  • help in single exponential fitting
    ... I am kind new in using Matlab. ... I used 'fit', however the fitting result is not good. ... Can anybody recommend a fitting function or method that is good in ...
    (comp.soft-sys.matlab)
  • Re: Update Query; But keep rest of field...
    ... Left$ and Right$ act like a scissors, counting from left or right, and cutting the string at that point, returning just that portion of the string. ... Comparing "Fitting ABS" with Left$will tell you if the beginning matches the eleven characters in "Fitting ABS". ... Will take "Fit ABS", and add everything except the first eleven characters, of tblItem.to it. ... Using the Design View to create a query, ...
    (microsoft.public.access.queries)
  • Re: 3d contour and surface plots from z,y and z data
    ... Fitting Toolbox 2.0 which ships with the 9a release of MATLAB. ... Lets assume that I have three 200 x 1 vectors named BSFC, SPEED, and LOAD ... I can create a fit object named Surface using the following command ...
    (comp.soft-sys.matlab)