4.8 | 13 ratings Rate this file 62 Downloads (last 30 days) File Size: 2.05 KB File ID: #9542
image thumbnail

Minimum Volume Enclosing Ellipsoid


Nima Moshtagh (view profile)


06 Jan 2006 (Updated )

Computes the minimum-volume covering ellipoid that encloses N points in a D-dimensional space.

| Watch this File

File Information

[A , c] = MinVolEllipse(P, tolerance)

Finds the minimum volume enclosing ellipsoid (MVEE) of a set of data points stored in matrix P. The following optimization problem is solved:

minimize log(det(A))
s.t. (P_i - c)'*A*(P_i - c)<= 1
in variables A and c, where P_i is the i-th column of the matrix P.
The solver is based on Khachiyan Algorithm, and the final solution is different from the optimal value by the pre-specified amount of 'tolerance'.

c : D-dimensional vector containing the center of the ellipsoid.

A : This matrix contains all the information regarding the shape of the ellipsoid. To get the radii and orientation of the ellipsoid take the Singular Value Decomposition ( svd function in matlab) of the output matrix A:
[U Q V] = svd(A);

the radii are given by:

r1 = 1/sqrt(Q(1,1));
r2 = 1/sqrt(Q(2,2));
rD = 1/sqrt(Q(D,D));

and matrix V is the rotation matrix that gives you the orientation of the ellipsoid.

For plotting in 2D or 3D, use MinVolEllipse_plot.m (see the link bellow)


This file inspired Plot An Ellipse In "Center Form", Approximate Lowner Ellipsoid, and Amvidc.

MATLAB release MATLAB 6.5 (R13)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (23)
14 Aug 2014 David

David (view profile)

det(A) = pi^2 / area^2,

so it seems the optimization for minimum area is to maximize, rather than minimize, log(det(A)).

Also, for small d, it may be easier to obtain semi major/minor lengths (a, b) by finding the eigenvalues/vectors of A (eigenvalues are 1/a^2, 1/b^2, etc, rotation matrix columns are the eigenvectors).

I'm finding this algorithm gives me det(A) < 0 (a hyperbola) for some point sets. Also, A should be invariant under translation of all the input points (which should just result in a translation of c), but I find it is quite sensitive.

Comment only
12 Jun 2014 Anton Semechko

sweet, thanks!

10 Jun 2014 Pengju

Pengju (view profile)

17 Mar 2013 Javier

Javier (view profile)


thanks for sharing the code it's really good. One question, please could you explain me which it's the differente between this method and least squares?

Thank you very much

11 Jun 2012 banjo

banjo (view profile)

thanks. This is good.

Comment only
08 Mar 2012 Sepehr Farhand  
15 Nov 2011 Glib

Glib (view profile)

03 Jun 2010 Nima Moshtagh

Nima Moshtagh (view profile)

Here is a link to the (unpublished) paper describing the algorithm and math behind the code:


Comment only
05 May 2010 Reza Jafari

I would like to thank you the author for the useful code which he developed. It solved many of my problems. The only problem which I faced was due to the singularity of Matrix X in line 76 and singularity of Matrix P * U * P' - (P * u)*(P*u)' in line 96. Do you have any suggestion to avoid singularity for these two matrices?



Comment only
26 Jan 2010 Rashed

Rashed (view profile)


I have a problem in 3D. Say, I have an 3D array of P(5,5,5) and how can I make this to work? Please suggest. Or, do I need to produce a matrix P containing the coordinates of the region?

Comment only
25 Jan 2010 Rashed

Rashed (view profile)

Thanks a lot. I was looking for something like this.

18 Jun 2009 Nima Moshtagh

Nima Moshtagh (view profile)

Here is a paper describing the algorithm and math behind the code: http://www.seas.upenn.edu/~nima/papers/Mim_vol_ellipse.pdf

Comment only
08 Feb 2009 Avinash Uppuluri

Can you also provide a good journal reference for this algorithm. Thanks!

Comment only
08 Feb 2009 Avinash Uppuluri

Hello Nima Moshtagh, The code posted was very useful. Is there a way to add a weight to the points, giving the importance of each point to be included within the ellipse. (Instead of using the tolerance which excludes points through the periphery). With the idea that points that are of less significance need not be included in the ellipse. Where can I include such a weighing parameter. I can probably do it in the pre-processing stage but is there a way to include it within your code. Thanks!

18 Oct 2008 Lien Kuqn Hua

THank you

Comment only
04 Sep 2008 Santanu Ghorai

Very good program. It has helped me a lot to do with the matlab. Thanks to Nima Moshtagh for submitting the code.

15 Nov 2007 nima moshtagh

Dear Ondrej Danko,
Thank you for bringing this point to my attention. The outcome that a number of points fall outside of the ellipsoid is expected, because we are truncating the algorithm before reaching its optimal value. The amount of error that we will get by doing this, is of the order of parameter 'tolerance', which represents the amount of error you can tolerate in the final result. For example for t=0.001 the average distance of an outside point is of the order of 10^-3.

Comment only
15 Nov 2007 Ondrej Danko

"Computes the minimum-volume covering ellipoid that encloses N points in a D-dimensional space"...

I would expect that resulting ellipsoid COVERS all points, I mean no points are outside of the resulting ellipsoid...

I had ran a small test if it is so... and surprisingly not all points are necessarily inside.

P = rand(3,N);
[A , C] = MinVolEllipse(P, t);
for j = 1:N
if ((P(:,j)-C)'*A*(P(:,j)-C) > 1)
disp('Point is outside...');

I am missing something, or it is expected? If expected, any suggestions to modify the algorithm to output ellipsoid strictly covering all points?

07 Feb 2007 Iram Weinstein

I find that the run time can be radically improved by recognizing that the only points that determine the bounding ellipsoid are on the convex hull, as used by John D'Errico in his minboundsphere. Given points P, the following code finds the reduced set of points lying on the hull.


for P=randn(3,500)
my computer runs MinVolEllipse(P, .001) in 12.54 seconds

and finds Q followed by MinVolEllipse(Q, .001) in 0.08 seconds

16 Sep 2006 M Doug k Vandenberg

This is a very good program for doing minimum volume ellipsoids. it has been very helpful and the author has as well.

29 Aug 2006 Carl Miller

Excellent stuff! This was exactly what I was looking for and works quite well. Although the math behind it all was a bit beyond me, the author was more than helpful in helping me make the most of what the code has to offer, thanks again Nima!

15 Jan 2006 nima moshtagh

For tolerance=0.01 in 2D here is how long it takes (approximatly) to find the covering ellipse on a 2.4GHz computer:

#point time(sec)
------ --------
100 0.03
500 1.24
1000 5.20
1500 13.26
2000 25.27

Comment only
09 Jan 2006 John D'Errico

This could be useful IF you have small sets of data.

I tested this for several problems, in 1, 2 and 5 dimensions. All seemed to work. The only downside is data of even moderate size. The author gives an example with 100 points, solved fairly quickly. But expand that to only 500 points (in 2-d) and it takes 140 seconds to run on my computer.

16 Jan 2007

To explain the outputs of the function.

20 Jan 2009

A sample code is provided in the help section that shows a method to reduce the computation time drastically.

Contact us