File Exchange

image thumbnail

Fit 2D gaussian function to data

version 1.5 (3.56 KB) by

Fits a 2D Gaussian function to simulated data.



View License

The program generates a 2D Gaussian. The program then attempts to fit the data using the MatLab function “lsqcurvefit “ to find the position, orientation and width of the two-dimensional Gaussian.
Execute “mainD2GaussFitRot.m” with not input parameters.
The two-dimensional Gaussian function is defined by the function “D2GaussFunctionRot.m” and “D2GaussFunction.m”

Comments and Ratings (17)

Hello! I'm really interested in using this code, but am having trouble using it. I've posted a question on MATLAB Answers if anyone is willing to help. Thanks!

warren hong


grüne Sonne

Martin Ahrens

Neema Prakash

Thank you for this code.


ZY (view profile)

Thank you for the code. What are the errors associated with the the fitting parameters?

Bin Xu

Bin Xu (view profile)

Good work . I would glad to know how the code work


Great work Gero! I also would like to know how the code might be adapted for 3D system...

Jozsef Orbán

Could you please provide the code with dependencies (as lsqncommon, lsqcurvefit, ...)

YuTing Huang

I would like to know the x(6) in the script of D2GaussFunctionRot function. I know it means the angle(in rad), however, I don't understand what the angle exactly based on?

Jan Simon's criticism is misplaced, only minor changes are needed to plot real data. If you have a regular grid of points, all you must do is:
change line 29 to the appropriate initial guesses
change line 30 to xs=x0;
change line 31 to noise=0;
change line 38 to [X,Y] = meshgrid(x,y);
where x and y a vectors with your x an y axis points
change line 47 to Z = zdata;
where zdata is a length(x) by length(y) matrix with the data you wish to fit such that zdata(i,j)=z(x_i,y_j).
Line 48 should be commented out.

If your grid points are not regular, you must set up the X, Y, and Z matrices so that they are all the same size and element i of X, Y and Z all correspond to the point (X(i),Y(i),Z(i)). There might be additional restrictions on the size and shape (I think it must be a matrix and not an array), but I'm not certain.

At any rate, thank you very much Gero. This is very helpful. :)


Leo (view profile)


xavier (view profile)



Jan (view profile)

What a pity that this is a script, which generates the data by a random function. Before it can be used for real problems, substantial changes are required.

It would increase the usability, if the calculations are move to a function and separated from the generation of test data.

Gar Waterman

Works well for 2D system...any chance of broadening it to 3D?



file was renamed and the definition of the gaussian width was changed.
Also a screenshot was added.

MATLAB Release
MATLAB 7.12 (R2011a)

Inspired: Fit 1D and 2D gaussian to noisy data

MATLAB Online Live Editor Challenge

Win cash prizes and have your live script featured on our website

Learn more

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

» Watch video