* Bug #10180 fixed - det was not defined for sparse matrices.
[scilab.git] / scilab / modules / linear_algebra / tests / unit_tests / det.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA Michael Baudin
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //==========================================================================
8 //==============================   det        ============================== 
9 //==========================================================================
10 //Small dimension 
11 //Real
12 A=[1 1; 1 2];
13 assert_checkalmostequal(det(A), 1);
14 [e,m]=det(A);
15 assert_checkalmostequal(e, 0);
16 assert_checkalmostequal(m, 1);
17 //Complex
18 A=A+%i;
19 assert_checkalmostequal(real(det(A)), 1);
20 assert_checkalmostequal(imag(det(A)), 1);
21 [e,m]=det(A);
22 assert_checkalmostequal(e, 0);
23 assert_checkalmostequal(real(m), 1);
24 assert_checkalmostequal(imag(m), 1);
25 //Sparse
26 A=[1 1; 1 2];
27 A=sparse(A);
28 assert_checkalmostequal(det(A), 1);
29 [e,m]=det(A)
30  m  =
31  
32     1.  
33  e  =
34  
35     0.  
36 assert_checkalmostequal(e, 0);
37 assert_checkalmostequal(m, 1);
38 //Polynomials
39 A=[1+%s 1; 1 2+%s];
40 assert_checkequal(det(A), 1+3*%s+%s*%s);
41 //Rationals
42 A=[1+%s 1/%s; 1 2+%s];
43 assert_checkequal(numer(det(A)), -1+2*%s+3*%s^2+%s^3);
44 assert_checkequal(denom(det(A)), %s);
45 //Sparse complex
46 A=[1 1; 1 2];
47 A=A+%i;
48 A=sparse(A);
49 assert_checkalmostequal(real(det(A)), 1);
50 assert_checkalmostequal(imag(det(A)), 1);
51 [e,m]=det(A);
52 assert_checkalmostequal(e, 0);
53 assert_checkalmostequal(real(m), 1);
54 assert_checkalmostequal(imag(m), 1);
55 //Large dimension
56 //Real
57 v=rand(1,21);
58 A=rand(21,21); A=(triu(A,1)+diag(v))*(tril(A,-1)+diag(ones(1,21)));
59 assert_checktrue(abs(det(A) - prod(v)) < 1D-7);
60 [e,m]=det(A);
61 assert_checktrue(abs(m*(10^e) - prod(v)) < 1D-7);
62 //Complex
63 v=(v+rand(v)*%i)/2;
64 A=rand(21,21); A=(triu(A,1)+diag(v))*(tril(A,-1)+diag(ones(1,21)));
65 assert_checktrue(abs(det(A) - prod(v)) < 1D-7);
66 [e,m]=det(A);
67 assert_checktrue(abs(m*(10^e) - prod(v)) < 1D-7);
68 //Sparse
69 v=rand(1,21);
70 v=sparse(v);
71 A=rand(21,21); A=(triu(A,1)+diag(v))*(tril(A,-1)+diag(ones(1,21)));
72 assert_checktrue(abs(det(A) - prod(v)) < 1D-7);
73 [e,m]=det(A);
74 assert_checktrue(abs(m*(10^e) - prod(v)) < 1d-7);
75 //Polynomials
76 v=rand(1,21)
77  v  =
78  
79  
80          column 1 to 5
81  
82     0.5866105    0.0477090    0.9416931    0.9613204    0.5583350  
83  
84          column  6 to 10
85  
86     0.5700629    0.3169258    0.9932628    0.8074780    0.8554797  
87  
88          column 11 to 15
89  
90     0.5031461    0.0963323    0.7058098    0.8630577    0.0076185  
91  
92          column 16 to 20
93  
94     0.8048951    0.5963762    0.1176836    0.8010095    0.5132340  
95  
96          column 21
97  
98     0.201091  
99 v=v+%s;
100 A=rand(21,21); A=(triu(A,1)+diag(v))*(tril(A,-1)+diag(ones(1,21)));
101 assert_checktrue(abs(coeff(det(A)-prod(v))) < 1D-7);
102 //Rationals
103 v=rand(1,21);
104 v=v/%s;
105 A=rand(21,21); A=(triu(A,1)+diag(v))*(tril(A,-1)+diag(ones(1,21)));
106 assert_checktrue(abs(coeff(numer(det(A))-numer(prod(v)))) < 1D-7);
107 //Sparse complex
108 v=rand(1,21);
109 v=(v+rand(v)*%i)/2;
110 v=sparse(v);
111 A=rand(21,21);
112 A=(triu(A,1)+diag(v))*(tril(A,-1)+diag(ones(1,21)));
113 A=sparse(A);
114 assert_checktrue(abs(det(A) - prod(v)) < 1D-7);
115 [e,m]=det(A);
116 assert_checktrue(abs(m*(10^e) - prod(v)) < 1d-7);
117 //Error messages
118 A=[1 1; 1 2];
119 errmsg1 = msprintf(_("Wrong type for first argument: Square matrix expected.\n"));
120 assert_checkerror("det([1,2;3,4;5,6])", errmsg1, 20);
121 errmsg2 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"), "det", 1);
122 assert_checkerror("det(A,1)", errmsg2, 77);