Maximum volume inscribed ellipsoid in a polyhedron
n = 2;
px = [0 .5 2 3 1];
py = [0 1 1.5 .5 -.5];
m = size(px,2);
pxint = sum(px)/m; pyint = sum(py)/m;
px = [px px(1)];
py = [py py(1)];
A = zeros(m,n); b = zeros(m,1);
for i=1:m
A(i,:) = null([px(i+1)-px(i) py(i+1)-py(i)])';
b(i) = A(i,:)*.5*[px(i+1)+px(i); py(i+1)+py(i)];
if A(i,:)*[pxint; pyint]-b(i)>0
A(i,:) = -A(i,:);
b(i) = -b(i);
end
end
cvx_begin
variable B(n,n) symmetric
variable d(n)
maximize( det_rootn( B ) )
subject to
for i = 1:m
norm( B*A(i,:)', 2 ) + A(i,:)*d <= b(i);
end
cvx_end
noangles = 200;
angles = linspace( 0, 2 * pi, noangles );
ellipse_inner = B * [ cos(angles) ; sin(angles) ] + d * ones( 1, noangles );
ellipse_outer = 2*B * [ cos(angles) ; sin(angles) ] + d * ones( 1, noangles );
clf
plot(px,py)
hold on
plot( ellipse_inner(1,:), ellipse_inner(2,:), 'r--' );
plot( ellipse_outer(1,:), ellipse_outer(2,:), 'r--' );
axis square
axis off
hold off
Calling sedumi: 28 variables, 9 equality constraints
For improved efficiency, sedumi is solving the dual problem.
------------------------------------------------------------
SeDuMi 1.21 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, Adaptive Step-Differentiation, theta = 0.250, beta = 0.500
eqs m = 9, order n = 17, dim = 36, blocks = 8
nnz(A) = 41 + 0, nnz(ADA) = 57, nnz(L) = 33
it : b*y gap delta rate t/tP* t/tD* feas cg cg prec
0 : 5.52E+00 0.000
1 : 7.60E-01 1.60E+00 0.000 0.2901 0.9000 0.9000 2.82 1 1 1.2E+00
2 : 6.88E-01 4.18E-01 0.000 0.2608 0.9000 0.9000 1.51 1 1 3.2E-01
3 : 9.47E-01 2.65E-02 0.000 0.0634 0.9900 0.9900 0.87 1 1 2.2E-02
4 : 9.52E-01 8.73E-04 0.000 0.0330 0.9900 0.9900 1.01 1 1 7.4E-04
5 : 9.52E-01 2.15E-05 0.000 0.0246 0.9900 0.9900 1.00 1 1 1.8E-05
6 : 9.52E-01 9.94E-07 0.342 0.0462 0.9905 0.9900 1.00 1 1 7.0E-07
7 : 9.52E-01 2.42E-07 0.000 0.2438 0.9148 0.9000 1.00 1 1 1.8E-07
8 : 9.52E-01 3.89E-08 0.000 0.1607 0.9014 0.9000 1.00 1 1 3.3E-08
9 : 9.52E-01 1.96E-09 0.000 0.0503 0.9902 0.9900 1.00 1 1 2.0E-09
iter seconds digits c*x b*y
9 0.0 8.7 9.5230751275e-01 9.5230751078e-01
|Ax-b| = 2.6e-10, [Ay-c]_+ = 9.4E-10, |x|= 1.9e+00, |y|= 2.6e+00
Detailed timing (sec)
Pre IPM Post
1.000E-02 4.000E-02 0.000E+00
Max-norms: ||b||=1, ||c|| = 2.474874e+00,
Cholesky |add|=0, |skip| = 0, ||L.L|| = 1.48859.
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +0.952308