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