Fix sparse tests
[scilab.git] / scilab / modules / sparse / tests / unit_tests / conjgrad_numerical.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2013 - Scilab Enterprises - Paul Bignier: added cgs, bicg and bicgstab
4 // Copyright (C) 2008 - INRIA - Michael Baudin
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8 //
9 // <-- CLI SHELL MODE -->
10
11 //------------------------------------------------------------------
12 // PCG
13
14 // Numerical tests
15 //Well conditionned problem
16 A=[ 94  0   0   0    0   28  0   0   32  0
17 0   59  13  5    0   0   0   10  0   0
18 0   13  72  34   2   0   0   0   0   65
19 0   5   34  114  0   0   0   0   0   55
20 0   0   2   0    70  0   28  32  12  0
21 28  0   0   0    0   87  20  0   33  0
22 0   0   0   0    28  20  71  39  0   0
23 0   10  0   0    32  0   39  46  8   0
24 32  0   0   0    12  33  0   8   82  11
25 0   0   65  55   0   0   0   0   11  100];
26 b = [154.
27 87.
28 186.
29 208.
30 144.
31 168.
32 158.
33 135.
34 178.
35 231.];
36 // With the default 10 iterations, the algorithm performs well
37 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"pcg");
38 xexpected=ones(10,1);
39 if norm(xcomputed-xexpected)>11**3*%eps then pause,end
40 if fail<>0 then pause,end
41 if iter<>10 then pause,end
42 if err > 10**3*%eps then pause,end
43 // With a tolerance of 1.e-3, there are 5 iterations and the status is "success"
44 tol=1.d-3;
45 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"pcg",tol);
46 if fail<>0 then pause,end
47 if iter>10 then pause,end
48 // With a tolerance of %eps but only 5 iterations allowed, the status is "fail"
49 tol=%eps;
50 maxIter = 5;
51 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"pcg",tol,maxIter);
52 if fail<>1 then pause,end
53 if iter<>maxIter then pause,end
54
55 //------------------------------------------------------------------
56 // CGS
57
58 // CGS needs 11 iterations to converge
59 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"cgs",maxIter=11);
60 if norm(xcomputed-xexpected)>100**3*%eps then pause,end
61 if fail<>0 then pause,end
62 if iter<>11 then pause,end
63 if err > 100**3*%eps then pause,end
64 // With a tolerance of 1.e-3, there are 3 iterations and the status is "success"
65 tol=1.d-3;
66 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"cgs",tol);
67 if fail<>0 then pause,end
68 if iter>10 then pause,end
69 // With a tolerance of %eps but only 5 iterations allowed, the status is "fail"
70 tol=%eps;
71 maxIter = 5;
72 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"cgs",tol,maxIter);
73 if fail<>1 then pause,end
74 if iter<>maxIter then pause,end
75
76 //------------------------------------------------------------------
77 // BICG
78
79 // With the default 10 iterations, the algorithm performs well
80 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"bicg");
81 if norm(xcomputed-xexpected)>11**3*%eps then pause,end
82 if fail<>0 then pause,end
83 if iter<>10 then pause,end
84 if err > 10**3*%eps then pause,end
85 // With a tolerance of 1.e-3, there are 5 iterations and the status is "success"
86 tol=1.d-3;
87 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"bicg",tol);
88 if fail<>0 then pause,end
89 if iter>10 then pause,end
90 // With a tolerance of %eps but only 5 iterations allowed, the status is "fail"
91 tol=%eps;
92 maxIter = 5;
93 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"bicg",tol,maxIter);
94 if fail<>1 then pause,end
95 if iter<>maxIter then pause,end
96
97 //------------------------------------------------------------------
98 // BICGSTAB
99
100 // BICGSTAB only needs 8 iterations to converge to the required tol, but is less accurate on arrival.
101 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"bicgstab");
102 if norm(xcomputed-xexpected)>10000**3*%eps then pause,end
103 if fail<>0 then pause,end
104 if iter<>8 then pause,end
105 if err > 1000**3*%eps then pause,end
106 // With a tolerance of 1.e-3, there are 3 iterations and the status is "success"
107 tol=1.d-3;
108 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"bicgstab",tol);
109 if fail<>0 then pause,end
110 if iter>10 then pause,end
111 // With a tolerance of %eps but only 5 iterations allowed, the status is "fail"
112 tol=%eps;
113 maxIter = 5;
114 [xcomputed, fail, err, iter, res]=conjgrad(A,b,"bicgstab",tol,maxIter);
115 if fail<>1 then pause,end
116 if iter<>maxIter then pause,end