linear_algebra plugged.
[scilab.git] / scilab / modules / linear_algebra / tests / unit_tests / lu.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 function r=Err(x),r=norm(x,1),endfunction
8 rand('normal')
9
10 //==========================================================================
11 //==============================      lu      ============================== 
12 //==========================================================================
13 //Empty matrix
14 A=[];
15 [L,U]=lu(A);
16 if L<>[]|U<>[] then pause,end
17 [L,U,E]=lu(A);
18 if L<>[]|U<>[]|E<>[] then pause,end
19 //Non full rank
20 A=rand(5,2);A=A*A';Ac=rand(5,2)+%i*rand(5,2);Ac=Ac*Ac';
21 [L,U,E]=lu(A);
22 if Err(L*U-E*A) >200*%eps then pause,end
23 [L,U,E]=lu(Ac);
24 if Err(L*U-E*Ac) >200*%eps then pause,end
25
26 //Small dimension
27 //---------------
28 //Square
29 A=rand(5,5);Ac=A+%i*rand(A);
30 //Real case 
31 [L,U]=lu(A);
32 if Err(L*U-A) >200*%eps then pause,end
33 [L,U,E]=lu(A);
34 if Err(L*U-E*A) >200*%eps then pause,end
35 //Complex case
36 [L,U]=lu(Ac);
37 if Err(L*U-Ac) >200*%eps then pause,end
38 [L,U,E]=lu(Ac);
39 if Err(L*U-E*Ac) >200*%eps then pause,end
40 //Fat
41 A=rand(3,5);Ac=A+%i*rand(A);
42 //Real case
43 [L,U]=lu(A);
44 if Err(L*U-A) >200*%eps then pause,end
45 [L,U,E]=lu(A);
46 if Err(L*U-E*A) >200*%eps then pause,end
47 //Complex case
48 [L,U]=lu(Ac);
49 if Err(L*U-Ac) >200*%eps then pause,end
50 [L,U,E]=lu(Ac);
51 if Err(L*U-E*Ac) >200*%eps then pause,end
52 //Tall
53 A=rand(5,3);Ac=A+%i*rand(A);
54 //Real case
55 [L,U]=lu(A);
56 if Err(L*U-A) >200*%eps then pause,end
57 [L,U,E]=lu(A);
58 if Err(L*U-E*A) >200*%eps then pause,end
59 //Complex case
60 [L,U]=lu(Ac);
61 if Err(L*U-Ac) >200*%eps then pause,end
62 [L,U,E]=lu(Ac);
63 if Err(L*U-E*Ac) >200*%eps then pause,end
64
65 //large dimension
66 //---------------
67 //Square
68 A=rand(50,50);Ac=A+%i*rand(A);
69 //Real case
70 [L,U]=lu(A);
71 if Err(L*U-A) >1000*%eps then pause,end
72 [L,U,E]=lu(A);
73 if Err(L*U-E*A) >1000*%eps then pause,end
74 //Complex case
75 [L,U]=lu(Ac);
76 if Err(L*U-Ac) >1000*%eps then pause,end
77 [L,U,E]=lu(Ac);
78 if Err(L*U-E*Ac) >1000*%eps then pause,end
79 //Fat
80 A=rand(30,50);Ac=A+%i*rand(A);
81 //Real case
82 [L,U]=lu(A);
83 if Err(L*U-A) >1000*%eps then pause,end
84 [L,U,E]=lu(A);
85 if Err(L*U-E*A) >1000*%eps then pause,end
86 //Complex case
87 [L,U]=lu(Ac);
88 if Err(L*U-Ac) >1000*%eps then pause,end
89 [L,U,E]=lu(Ac);
90 if Err(L*U-E*Ac) >1000*%eps then pause,end
91 //Tall
92 A=rand(50,30);Ac=A+%i*rand(A);
93 //Real case
94 [L,U]=lu(A);
95 if Err(L*U-A) >1000*%eps then pause,end
96 [L,U,E]=lu(A);
97 if Err(L*U-E*A) >1000*%eps then pause,end
98 //Complex case
99 [L,U]=lu(Ac);
100 if Err(L*U-Ac) >1000*%eps then pause,end
101 [L,U,E]=lu(Ac);
102 if Err(L*U-E*Ac) >1000*%eps then pause,end
103
104
105