1function Y = cod_qmult (Q, X, method) 2%COD_QMULT computes Q'*X, Q*X, X*Q', or X*Q with Q from COD_SPARSE. 3% Q is a matrix or a struct representing the SPQR Householder form. An 4% additional column permutation matrix Q.Pc may be present in the Q struct. 5% 6% Usage: Y = cod_qmult (Q,X,method) 7% 8% method = 0: Y = Q'*X default if 3rd input argument is not present. 9% method = 1: Y = Q*X 10% method = 2: Y = X*Q' 11% method = 3: Y = X*Q 12% 13% Example: 14% 15% [U, R, V, r] = cod_sparse (A) ; 16% Y = cod_qmult (U, X, 0) ; % Y = U' * X 17% U = cod_qmult (U, speye (size (U.H,1)), 1) % convert U to matrix form 18% 19% See also cod_sparse, spqr, spqr_qmult 20 21% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com 22 23if (nargin < 3) 24 method = 0 ; 25end 26 27% multiply Q and X 28if (isstruct (Q)) 29 if (~isfield (Q, 'Pc')) 30 Y = spqr_qmult (Q, X, method) ; 31 else 32 switch method 33 case 0, Y = Q.Pc' * spqr_qmult (Q, X, method) ; 34 case 1, Y = spqr_qmult (Q, Q.Pc * X, method) ; 35 case 2, Y = spqr_qmult (Q, X * Q.Pc', method) ; 36 case 3, Y = spqr_qmult (Q, X, method) * Q.Pc ; 37 end 38 end 39else 40 switch method 41 case 0, Y = Q'*X ; 42 case 1, Y = Q*X ; 43 case 2, Y = X*Q' ; 44 case 3, Y = X*Q ; 45 end 46end 47