1function test_disp 2%TEST_DISP test the display method of the factorize object 3% 4% Example 5% test_disp 6% 7% See also factorize, test_all. 8 9% Copyright 2011-2012, Timothy A. Davis, http://www.suitesparse.com 10 11reset_rand ; 12tol = 1e-10 ; 13err = 0 ; 14 15%------------------------------------------------------------------------------- 16% dense LU 17%------------------------------------------------------------------------------- 18 19fprintf ('\n----------Dense LU factorization:\n') ; 20A = rand (3) ; 21[err,F] = test_factorization (A, tol, err, [ ], 'factorization_lu_dense') ; 22 23fprintf ('\nDense LU With an imaginary F.alpha: ') ; 24alpha = (pi + 2i) ; 25F = alpha*F ; 26display (F) ; 27b = rand (3,1) ; 28x = F\b ; 29y = (alpha*A)\b ; 30err = norm (x-y) ; 31if (err > tol) 32 error ('error too high: %g\n', err) ; 33end 34fprintf ('error %g\n', err) ; 35 36%------------------------------------------------------------------------------- 37% sparse LU 38%------------------------------------------------------------------------------- 39 40fprintf ('\n----------Sparse LU factorization:\n') ; 41A = sparse (A) ; 42err = test_factorization (A, tol, err, [ ], 'factorization_lu_sparse') ; 43 44%------------------------------------------------------------------------------- 45% dense Cholesky 46%------------------------------------------------------------------------------- 47 48fprintf ('\n----------Dense Cholesky factorization:\n') ; 49A = A*A' + eye (3) ; 50err = test_factorization (A, tol, err, [ ], 'factorization_chol_dense') ; 51 52%------------------------------------------------------------------------------- 53% sparse Cholesky 54%------------------------------------------------------------------------------- 55 56fprintf ('\n----------Sparse Cholesky factorization:\n') ; 57A = sparse (A) ; 58err = test_factorization (A, tol, err, [ ], 'factorization_chol_sparse') ; 59 60%------------------------------------------------------------------------------- 61% dense QR of A 62%------------------------------------------------------------------------------- 63 64fprintf ('\n----------Dense QR factorization:\n') ; 65A = rand (3,2) ; 66err = test_factorization (A, tol, err, 'qr', 'factorization_qr_dense') ; 67 68%------------------------------------------------------------------------------- 69% dense COD of A 70%------------------------------------------------------------------------------- 71 72fprintf ('\n----------Dense COD factorization:\n') ; 73err = test_factorization (A, tol, err, [ ], 'factorization_cod_dense') ; 74 75%------------------------------------------------------------------------------- 76% sparse COD of A 77%------------------------------------------------------------------------------- 78 79fprintf ('\n----------Sparse COD factorization:\n') ; 80A = sparse (A) ; 81err = test_factorization (A, tol, err, 'cod', 'factorization_cod_sparse') ; 82 83%------------------------------------------------------------------------------- 84% dense QR of A' 85%------------------------------------------------------------------------------- 86 87fprintf ('\n----------Dense QR factorization of A'':\n') ; 88A = full (A) ; 89err = test_factorization (A', tol, err, 'qr', 'factorization_qrt_dense') ; 90 91%------------------------------------------------------------------------------- 92% sparse QR of A 93%------------------------------------------------------------------------------- 94 95fprintf ('\n----------Sparse QR factorization:\n') ; 96A = sparse (A) ; 97err = test_factorization (A, tol, err, [ ], 'factorization_qr_sparse') ; 98 99%------------------------------------------------------------------------------- 100% sparse QR of A' 101%------------------------------------------------------------------------------- 102 103fprintf ('\n----------Sparse QR factorization of A'':\n') ; 104err = test_factorization (A', tol, err, [ ], 'factorization_qrt_sparse') ; 105 106%------------------------------------------------------------------------------- 107% svd 108%------------------------------------------------------------------------------- 109 110fprintf ('\n----------SVD factorization:\n') ; 111err = test_factorization (A, tol, err, 'svd', 'factorization_svd') ; 112 113%------------------------------------------------------------------------------- 114% dense LDL 115%------------------------------------------------------------------------------- 116 117fprintf ('\n----------Dense LDL factorization:\n') ; 118A = rand (3) ; 119A = [zeros(3) A ; A' zeros(3)] ; 120err = test_factorization (A, tol, err, 'ldl', 'factorization_ldl_dense') ; 121 122%------------------------------------------------------------------------------- 123% sparse LDL 124%------------------------------------------------------------------------------- 125 126fprintf ('\n----------Sparse LDL factorization:\n') ; 127A = sparse (A) ; 128err = test_factorization (A, tol, err, 'ldl', 'factorization_ldl_sparse') ; 129 130%------------------------------------------------------------------------------- 131% test QR and QR' with scalar A and sparse right-hand side 132%------------------------------------------------------------------------------- 133 134fprintf ('\n----------Dense QR and QR'' with scalar A and sparse b:\n') ; 135b = sparse ([1 2]) ; 136A = pi ; 137F = factorization_qr_dense (A,0) ; 138display (F) ; 139x = F\b ; 140err = max (err, norm (A\b - x)) ; 141x = b'/F ; 142err = max (err, norm (b'/A - x)) ; 143F = factorization_qrt_dense (A,0) ; 144display (F) ; 145x = F\b ; 146err = max (err, norm (A\b - x)) ; 147x = b'/F ; 148err = max (err, norm (b'/A - x)) ; 149if (err > tol) 150 error ('error too high: %g\n', err) ; 151end 152 153fprintf ('\nAll disp tests passed, max error: %g\n', err) ; 154 155%------------------------------------------------------------------------------- 156 157function [err, F] = test_factorization (A, tol, err, option, kind) 158%TEST_FACTORIZATION factorize a matrix and check its kind and error norm 159F = factorize (A, option, 1) ; 160display (F) ; 161S = inverse (F) ; 162display (S) ; 163err2 = error_check (F) ; 164fprintf ('error: %g\n', err2) ; 165err = max (err, err2) ; 166if (err > tol) 167 error ('error too high: %g\n', err) ; 168end 169if (F.is_inverse || ~isa (F, kind)) 170 error ('invalid contents') ; 171end 172if (~(S.is_inverse) || ~isa (S, kind)) 173 error ('invalid contents') ; 174end 175