[Master Index] [Index for PublicToolbox/regutools]

# bsvd

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

### Function Synopsis

    [U,s,V] = bsvd(B_k)

### Help Text

    BSVD SVD of a bidiagonal matrix stored in "compact form".

     s = bsvd(B_k)
     [U,s,V] = bsvd(B_k)

     Computes the singular values, or the compact SVD, of the
     bidiagonal matrix B stored in compact form in B_k.

     If the bottom right element of B_k is a NAN, then B_k repre-
     sents an upper bidiagonal matrix (such as produced by bidiag),
     stored with its diagonal and upper bidiagonal in the first and
     second columns of B_k, repsectively.

     Otherwise, B_k represents a lower bidiagonal matrix (such as
     produced by lanc_b), stored with its lower bidiagonal and its
     diagonal in the first and second columns of B_k, respectively.

### Cross-Reference Information

This function calls

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

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

    function [U,s,V] = bsvd(B_k)
    %BSVD SVD of a bidiagonal matrix stored in "compact form".
    %
    % s = bsvd(B_k)
    % [U,s,V] = bsvd(B_k)
    %
    % Computes the singular values, or the compact SVD, of the
    % bidiagonal matrix B stored in compact form in B_k.
    %
    % If the bottom right element of B_k is a NAN, then B_k repre-
    % sents an upper bidiagonal matrix (such as produced by bidiag),
    % stored with its diagonal and upper bidiagonal in the first and
    % second columns of B_k, repsectively.
    %
    % Otherwise, B_k represents a lower bidiagonal matrix (such as
    % produced by lanc_b), stored with its lower bidiagonal and its
    % diagonal in the first and second columns of B_k, respectively.

    % Per Christian Hansen, UNI-C, 03/11/92.

    % Initialization.
    [k,l] = size(B_k);
    if (l~=2), error('B_k does not represent a bidiagonal matrix'), end

    % Determine which bidiagonal form.
    if (B_k(k,2)==NaN)
      B = diag(B_k(:,1)) + diag(B_k(1:k-1,2),1);
    else
      B = diag(B_k(:,1),-1) + diag([B_k(:,2);0]);
      [k1,k1] = size(B); B = B(:,1:k1-1);
    end

    % Compute the SVD.
    if (nargout<=1)
      U = svd(B);
    else
      [U,s,V] = csvd(B);
    end

Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON