Section 4.5.4: Frobenius norm diagonal scaling (GP)

% Boyd & Vandenberghe "Convex Optimization"
% Joelle Skaf - 01/29/06
% Updated to use GP mode by Almir Mutapcic 02/08/06
%
% Given a square matrix M, the goal is to find a vector (with dii > 0)
% such that ||DMD^{-1}||_F is minimized, where D = diag(d).
% The problem can be cast as an unconstrained geometric program:
%           minimize sqrt( sum_{i,j=1}^{n} Mij^2*di^2/dj^2 )
%

rs = randn( 'state' );
randn( 'state', 0 );

% matrix size (M is an n-by-n matrix)
n = 4;
M = randn(n,n);

% formulating the problem as a GP
cvx_begin gp
  variable d(n)
  minimize( sqrt( sum( sum( diag(d.^2)*(M.^2)*diag(d.^-2) ) ) ) )
  % Alternate formulation: norm( diag(d)*abs(M)*diag(1./d), 'fro' )
cvx_end

% displaying results
D = diag(d);
disp('The matrix D that minimizes ||DMD^{-1}||_F is: ');
disp(D);
disp('The minimium Frobenius norm achieved is: ');
disp(norm(D*M*inv(D),'fro'));
disp('while the Frobunius norm of the original matrix M is: ');
disp(norm(M,'fro'));
 
Successive approximation method to be employed.
   For improved efficiency, sedumi is solving the dual problem.
   sedumi will be called several times to refine the solution.
   Original size: 48 variables, 20 equality constraints
   16 exponentials add 128 variables, 80 equality constraints
-----------------------------------------------------------------
          Errors   
Act Centering    Conic    Status
-----------------------------------
16  6.060e+00  4.088e+00  Solved
16  8.722e-01  6.440e-02  Solved
16  2.485e-02  5.023e-05  Solved
16  6.876e-04  4.195e-08  Solved
16  8.622e-05  1.325e-08  Solved
16  1.071e-05  1.337e-08S Solved
16  1.254e-06  1.313e-08S Solved
16  1.403e-05S 0.000e+00  Solved
-----------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +3.25231
The matrix D that minimizes ||DMD^{-1}||_F is: 
    1.1160         0         0         0
         0    0.9369         0         0
         0         0    1.0000         0
         0         0         0    1.6706

The minimium Frobenius norm achieved is: 
    3.2523

while the Frobunius norm of the original matrix M is: 
    3.6126