View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
A Collection of Fitting Functions

4.4 | 18 ratings Rate this file 31 Downloads (last 30 days) File Size: 23.6 KB File ID: #4222 Version: 1.0
image thumbnail

A Collection of Fitting Functions


Ohad Gal (view profile)


05 Dec 2003 (Updated )

A collection of fitting functions for various distributions.

| Watch this File

File Information

% This folder contains a collection of "fitting" functions.
% (Some has demo options - the third section)
% The GENERAL input to the functions should be samples of the distribution.
% for example, if we are to fit a normal distribution ('gaussian') with a mean "u" and varaince "sig"^2
% then the samples will distribute like:
% samples = randn(1,10000)*sig + u
%fitting with Least-Squares is done on the histogram of the samples.
% fitting with Maximum likelihood is done directly on the samples.
% Contents of this folder
% =======================
% 1) Maximum likelihood estimators
% 2) Least squares estimators
% 3) EM algorithm for estimation of multivariant gaussian distribution (mixed gaussians)
% 4) added folders: Create - which create samples for the EM algorithm test
% Plot - used to plot each of the distributions (parametric plot)
% Maximum likelihood estimators
% =============================
% fit_ML_maxwell - fit maxwellian distribution
% fit_ML_rayleigh - fit rayleigh distribution
% (which is for example: sqrt(abs(randn)^2+abs(randn)^2))
% fit_ML_laplace - fit laplace distribution
% fit_ML_log_normal- fit log-normal distribution
% fit_ML_normal - fit normal (gaussian) distribution
% NOTE: all estimators are efficient estimators. for this reason, the distribution
% might be written in a different way, for example, the "Rayleigh" distribution
% is given with a parameter "s" and not "s^2".
% least squares estimators
% =========================
% fit_maxwell_pdf - fits a given curve of a maxwellian distribution
% fit_rayleigh_pdf - fits a given curve of a rayleigh distribution
% NOTE: these fit function are used on a histogram output which is like a sampled
% distribution function. the given curve MUST be normalized, since the estimator
% is trying to fit a normalized distribution function.
% Multivariant Gaussian distribution
% ==================================
% for demo of 1D mixed-gaussian fitting, run: fit_mix_gaussian
% for demo of 2D mixed-gaussian fitting, run: fit_mix_2d_gaussian
% these routines fit and plot the results of the parameters of:
% random distribution of random amount of gaussians with random parameters

MATLAB release MATLAB 6.1 (R12.1)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (24)
23 Mar 2017 Michael Ricci

Do you have any insight on how to manipulate this code to plot two rayleigh curves on the same plot.

Comment only
12 Dec 2016 Navid Mahmoudian Bidgoli

Hi, Thank you very much for your great functions. I have noticed that for fit_ML_laplace you have used mean of the samples as the mean, but if you check wikipedia or similar docs you will see the ml estimator for mean is the sample median not the mean.

Comment only
07 Mar 2012 Josh Kempner

05 Feb 2009 c a

c a (view profile)

Had similar problem to John Finan above and used same fix. However have other problem with fit_mix_gaussian: it seems to be sensitive to magnitude to data. Using data scaled from appr. -0.7 to 5 it gives me a fit which is incorrect (data is skewed in some manner I have not identified). Changing the magnitude of the input vector via multiplication by some constants causes it to not converge for > 50k iterations.

Rather than systematically determine the failure modes, is there any info on requirements on input vector, such as normalization, etc.? I see normalization required for LSE's but for gaussian?


01 Nov 2008 Om Ken

Om Ken (view profile)

Guys, i use Randraw function to generate data randomly from a truncated normal distribution, but when i tested the generated data if they have come from a Normal distribution (not truncated), the hypothesis was rejected. which means that the data can not be assumed to have come from a Normal distribution, If I use the Normal distribution to fit my collected data using for example dfittool tool box, I get a mean and sigma values , when I use them to genera data from the randraw function with using (y = randraw('normaltrunc', [0, +inf, mu, sigma], 1, 1e5), the data obtained do not follw a normal distribution. so what i need is some kind of distribution fitting tool that can fit my original field collected data to a left Truncated normal distribution and give me the right parameters , i.e. mu and sigma

Comment only
18 Jun 2008 Elli Dolev

Hello there,
I found your application very usfull and I winder if it is possible to use it and to ask you one question please.
Thank you,

Comment only
04 Jun 2008 Harish Viswanathan

23 Dec 2007 mahdi poorakbari

13 Dec 2007 Thomas Clark

This submission requires the statistics toolbox, in order to use the 2D gaussian fit (line 32, build_mix_2D_gaussian.m)

Comment only
27 Nov 2007 Todd Arnold

The provided files are an excellent source for EM based Matlab work.

11 Sep 2007 Yong-Jun Cho


30 Jun 2007 venkatesh siva


06 Nov 2006 John Finan

I hit a snag that cost me an hour and I thought I would try to save someone else the time. Disclaimer: I have only been playing with this code for a few hours. I have NOT read it all and I don't fully understand it.

The snag involved plotting the output from a fit of mixed gaussians in one dimension. When I generated the data using build_mix_gaussian, a plot was created. Then, fit_mix_gaussian would plot into that figure without any trouble.

However, when I was using my own data, I didn't run build_mix_gaussian first and the output from fit_mix_gaussian got all messed up.

Here's the change I made in the very last line of fit_mix_gaussian to fix it.

% plot_mix_gaussian( u,sig,t );
plot_mix_gaussian( u,sig,t,X );

Comments from the author or other users are very welcome.

18 Oct 2005 pau soler

Thank you for such great routines.

13 Sep 2005 Leif Adelow

Missing subroutine or toolbox containing 'mvnrnd'.

??? Undefined function or variable 'mvnrnd'.

24 Jul 2005 J Lansey

Wow! thats perfect, the author is an EXPERT coder. Proffesionall i'd say.

10 Jan 2005 seth man

I'm finished my take home test with this stuff

Comment only
14 Nov 2004 Shane Lin

really good stuff. thanx

19 Oct 2004 Richard Xiao

great tools for gaussian 1D fittings, thanks.

29 Jul 2004 M C

Great stuff! Seems really usable, at least the 1D functions.

06 Jul 2004 Fabio Labra

Works great and has neat graphics. First time I find a function for ML fitting of laplace distribution.

15 Jun 2004 P Z

1D Gaussian works great. 2D Gaussian gives significantly different (and more poorly fit) results than other EM implementations I've tried, e.g., Netlab and Weka.

12 Mar 2004 Rafi Levi

29 Jan 2004 Aaron Clarke

Works great and the graphs are aesthetically pleasing.

Contact us