Section 4.5.4: Frobenius norm diagonal scaling (GP)
rs = randn( 'state' );
randn( 'state', 0 );
n = 4;
M = randn(n,n);
cvx_begin gp
variable d(n)
minimize( sqrt( sum( sum( diag(d.^2)*(M.^2)*diag(d.^-2) ) ) ) )
cvx_end
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