EzyFit Frequently Asked Questions

# EzyFit Frequently Asked Questions

If you have a question which is not answered here, or a suggestion on how you would improve this section, please feel free to send an e-mail to the author, moisy@fast.u-psud.fr.

1. Why using EzyFit instead of the standard Matlab's "Basic Fitting" tool?
2. Why using EzyFit instead of MathWorks' "Curve Fitting Toolbox"?
3. I have two curves in my figure, and I want to fit only the second one!
4. Why is there no EzyFit menu in my figure?
5. Can I change the fit color, width, etc.?
6. I want to fit only part of my data!
7. I want the fitted parameters of my data, but whithout drawing the curve!
8. How to change the default color/style of the fits?
9. What are the "initial guesses"?
10. What means "(lin)" or "(log)" in the equation box?
11. Can I extrapolate the fitted curve further than my data range?
12. Where are stored the values of the fitted parameters?
13. Can I save a fit equation?
14. Can I save my own settings configuration?
15. How does EzyFit work?
16. Why do I obtain the error 'Maximum number of function evaluations has been exceeded'?

1. Why using EzyFit instead of the standard Matlab's "Basic Fitting" tool?
   Well, the "Basic Fitting" looks nice, but it only fits polynomials!
2. Why using EzyFit instead of MathWorks' "Curve Fitting Toolbox"?
   MathWorks' "Curve Fitting Toolbox" does much more than EzyFit. But EzyFit is simpler (you can make it work in 1 minute), and it is free. For most usual problems, EzyFit will surely do the job.
3. I have two curves in my figure, and I want to fit only the second one!
   First select the curve you want to fit using the pointer (mouse), and then fit it.
4. Why is there no EzyFit menu in my figure?
   Type `efmenu` to have the EzyFit menu in your current and all subsequent figures. You may also type

   >     efmenu install

   to have the EzyFit menu by default in all your figures (this will automatically run `efmenu` at each Matlab restart).
5. Can I change the fit color, width, etc.?
   Yes, the fit properties and display settings (color, width, equation box...) can be changed by specifying directly some 'PropertyName/PropertyValue' pairs, when calling `showfit` or `selectfit`, e.g.

   >     plotsample power
   >     showfit('a*x^n; n=-1','fitcolor','red','fitlinestyle','--');
   >     showfit('a*x^n+c_0; n=-1','fitcolor','black','fitlinestyle','-.');
   >     legend show

   See the Settings page for details.
   You may also change the default settings, which are coded in the M-file `fitparam.m` (click here to open the M-file and follow the instructions).
6. I want to fit only part of my data!
   Use `selectfit` for this. First plot some sample data,

   >     plotsample powco

   (a power law with an exponential cutoff), then fit the upper part with a power law,

   >     selectfit power

   You now have to draw a polygon around the data points you want to fit

   You obtain something like:

   Type `undofit` if your are not satisfied. You may also work in the 'loop mode', by setting the parameter 'selectfitloopmode' to 'on' in the `fitparam` default settings file. In this mode, the polygon procedure is repeated until an empty polygon is drawn, and the last trial is kept.
7. I want to get the fitted parameters of my data, but whithout drawing the curve!
   If your data are `X,Y`, you just obtain the fitted parameters by

   >     f = ezfit(x,y,'a*ln(x/c)+k');

   See this question to see how to get the fitted values from `f`.
8. How to change the default color/style of the fits?
   See the options `fp.fitcolor`, `fp.fitlinestyle` and `fp.fitlinewidth` in `fitparam`.
9. What are the "initial guesses"?
   For nonlinear fits, you should provide initial guesses for the parameters of your fits to "help" the solver to converge towards the "good" values. The solver (the `fminsearch` function) starts from the initial guesses and then varies the coefficients in an attempt to find the best fit.
   For example, suppose you have the data

   >     x=1:10;
   >     y=[15 14.2 13.6 13.2 12.9 12.7 12.5 12.4 12.4 12.2];
   >     plot(x,y,'*')

   which you want to fit with an exponential decay,

   >     showfit('cste+a0*exp(-x/L)');

   You will obtain:

   which obvisouly is bad. By default, `showfit` has used `cste=1`, `a0=1` and `L=1`, which is too far away from the 'true' coefficients. To specify the intial guess:

   >     showfit('cste+a0*exp(-x/L); cste=10');

   you now obtain:

   which is clearly much better. In this example, the initial guesses for `a0` and `L`, which are omitted, are 1.
   You may also specify the initial guesses like this:

   >     showfit('cste+a0*exp(-x/L)',[10 1 1]);

   In this case, you should specify ALL the initial guesses, in the alphabetical order of the parameter names (here `L`, `a0` and `cste` because `L` is a capital letter).
10. What means "(lin)" or "(log)" in the equation box?
    It indicates whether the data itself, say `Y`, or its logarithm, `LOG(Y)`, has been fitted. By default the mean square procedure is applied to `Y` if the Y-axis of the current figure is linear, and it is applied `LOG(Y)` if the Y-axis is logarithmic. For instance, plot a power law in log scales,

    >     plotsample power

    If you try

    >     showfit('power')

    the logarithm of the data is fitted. If you turn the Y-axis in linear scale (you may use `swy` for this) and fit again, you will obtain different values.
    You may also force `ezfit` to fit `Y` or `LOG(Y)` whatever the Y-axis, by specifying the optional argument

    >     showfit('power;log','fitcolor','blue');
    >     showfit('power;lin','fitcolor','red');

    See the example:

    In this example, the fit with option `log` (blue line) "works better" when displayed with a logarithmic Y-axis.
11. Can I extrapolate the fitted curve further than my data range?
    Yes, see the option `fp.extrapol` in `fitparam`.
12. Where are stored the values of the fitted parameters?
    Fit your data using

    >     f = ezfit('a*x+b');

    The structure `f` contains all the informations about your fit. The strings 'a' and 'b' of the parameter names are stored in `f.param` and their values are in `f.m`. This works also with `showfit` and `selectfit`.
    You may also directly create in the current workspace a set of variables which contain the values of the fitted parameters:

    >     makevarfit(f);

    This will create two variables, 'a' and 'b'. You can also set the option 'automakevarfit = on' in fitparam: This will call `makevarfit` each time `ezfit` (or `showfit` or `selectfit`) is executed.
13. Can I save a fit equation?
    Yes. First, you may define your favorite fit equation as a user-defined fit, by typing

    >     editfit(3,'myspectrum','E(k) = C*k^(-n);  C=0.1; n=2; log');

    This will update the file `'userfit.mat'` in the EzyFit directory, so your fit equation may be re-used in a future session. You can now fit your data using this user-defined fit,

    >     showfit('myspectrum');

    Since a fit equation is a simple string, another way is to create a variable,

    >     myfit = 'E(k) = C*k^(-n);  C=0.1; n=2; log';

    and to save it in a Mat-file,

    >     save('myfits.mat','myfit');

    To fit your data with this fit definition, just type

    >     showfit(myfit);

14. Can I save my own settings configuration?
    Yes. The default settings (color, width, equation box etc.) are coded in the file `fitparam.m`. So you may create a copy of this file with your own settings, and you just have to rename the settings file you want to use `fitparam.m`.
15. How does EzyFit work?
    The core function of the EzyFit toolbox is `ezfit`, which is based on Matlab's built-in FMINSEARCH function (Nelder-Mead method). FMINSEARCH performs an unconstrained nonlinear minimization of the SSR (sum of squared residuals) with respect to the various parameters. The two additional functions `showfit` and `selectfit` simply call `ezfit` with graphical output.
16. Why do I obtain the error 'Maximum number of function evaluations has been exceeded'?
    This error means that FMINSEARCH could not converge towards a solution in a reasonable number of iterations. There is no way for the moment to change this number of iterations in EzyFit. Try to use initial guesses closer to the expected values.

2005-2008 EzyFit Toolbox