function rho = Matrix_Norm(X,rho_ap,L)
%MATRIX_NORM
%
%     rho = Matrix_Norm(X,rho_ap,L)
%
% For a given complex interval matrix X and approximate value rho_ap,
% a verified upper bound of the 2-norm of matrix X is returned.
%

W = X'*X;                                       % adjoint operating
lambda = 1.1*rho_ap^2;                          % 10%-inflation 
     Z = lambda*eye(L) - W;                     % generate shifted matrix
     [Y,p] = chol(mid(Z));                      % approximate Cholesky factor
     while p~=0                                 %--+
        lambda = 1.1*lambda;                    %  + if Cholesky decomposition
        Z = lambda*eye(L) - W;                  %  | failes, set more inflated
        [Y,p] = chol(mid(Z));                   %  | singular values.
     end;                                       %--+ 
     W = intval(Y')*Y - Z;                      % residual term
     rho = sqrt(intval(lambda) + norm(W,inf));  % upper bound of 2-norm of X
