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