[Master Index] [Index for PublicToolbox/regutools]

# gsvd

## (PublicToolbox/regutools/gsvd.m in BrainStorm 2.0 (Alpha))

### Function Synopsis

    [U,V,sm,X] = gsvd(A,L)

### Help Text

    GSVD Generalized SVD of a matrix pair.

     sm = gsvd(A,L)
     [U,V,sm,X] = gsvd(A,L) ,  sm = [sigma,mu]

     Computes the generalized SVD of the matrix pair (A,L):
        [ A ] = [ U  0 ]*[ diag(sigma)      0    ]*inv(X)
        [ L ]   [ 0  V ] [      0       eye(n-p) ]
                         [  diag(mu)        0    ]
     where
        U  is  m-by-n ,    sigma  is  p-by-1
        V  is  p-by-p ,    mu     is  p-by-1
        X  is  n-by-n .

     It is assumed that m >= n >= p .

### Cross-Reference Information

This function calls

    csd                                C:\BrainStorm_2001\PublicToolbox\regutools\csd.m

This function is called by

    regudemo                           C:\BrainStorm_2001\PublicToolbox\regutools\regudemo.m

### Listing of function C:\BrainStorm_2001\PublicToolbox\regutools\gsvd.m

    function [U,V,sm,X] = gsvd(A,L)
    %GSVD Generalized SVD of a matrix pair.
    %
    % sm = gsvd(A,L)
    % [U,V,sm,X] = gsvd(A,L) ,  sm = [sigma,mu]
    %
    % Computes the generalized SVD of the matrix pair (A,L):
    %    [ A ] = [ U  0 ]*[ diag(sigma)      0    ]*inv(X)
    %    [ L ]   [ 0  V ] [      0       eye(n-p) ]
    %                     [  diag(mu)        0    ]
    % where
    %    U  is  m-by-n ,    sigma  is  p-by-1
    %    V  is  p-by-p ,    mu     is  p-by-1
    %    X  is  n-by-n .
    %
    % It is assumed that m >= n >= p .

    % Reference: C. F. Van Loan, "Computing the CS and the generalized
    % singular value decomposition", Numer. Math. 46 (1985), 479-491.

    % Per Christian Hansen, UNI-C, 06/22/93.

    % Initialization.
    [m,n] = size(A); [p,n1] = size(L);
    if (n1 ~= n | m < n | n < p)   % orginal
      error('Incorrect dimensions of A and L')
    end

    % Compute the GSVD in compact form via the CS decomposition.
    [Q,d,X] = svd([full(A);full(L)]); Q = Q(:,1:n); d = diag(d);
    if (nargout > 1)
      [U,V,sm,Z] = csd(Q(1:m,:),Q(m+1:m+p,:));
      if (nargout==4)
        for j=1:n, X(:,j) = X(:,j)/d(j); end
        X = X*Z;
      end
    else
      U = csd(Q(1:m,:),Q(m+1:m+p,:));
    end

Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Nov 2 16:17:59 2004
Cross-Directory links are: ON