Fix sparse tests
[scilab.git] / scilab / modules / sparse / tests / unit_tests / conjgrad_sparse.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 // Case where A is sparse
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 Asparse = sparse(A);
37 // With the default 10 iterations, the algorithm performs well
38 [xcomputed, fail, err, iter, res]=conjgrad(Asparse,b,"pcg");
39 xexpected=ones(10,1);
40 if norm(xcomputed-xexpected)>11**3*%eps then pause,end
41 if fail<>0 then pause,end
42 if iter<>10 then pause,end
43 if err > 10**3*%eps then pause,end
44
45 //------------------------------------------------------------------
46 // CGS
47
48 // CGS needs 11 iterations to converge
49 [xcomputed, fail, err, iter, res]=conjgrad(Asparse,b,"cgs",maxIter=11);
50 if norm(xcomputed-xexpected)>100**3*%eps then pause,end
51 if fail<>0 then pause,end
52 if iter<>11 then pause,end
53 if err > 100**3*%eps then pause,end
54
55 //------------------------------------------------------------------
56 // BICG
57
58 // With the default 10 iterations, the algorithm performs well
59 [xcomputed, fail, err, iter, res]=conjgrad(Asparse,b,"bicg");
60 if norm(xcomputed-xexpected)>11**3*%eps then pause,end
61 if fail<>0 then pause,end
62 if iter<>10 then pause,end
63 if err > 10**3*%eps then pause,end
64
65 //------------------------------------------------------------------
66 // BICGSTAB
67
68 // BICGSTAB only needs 8 iterations to converge to the required tol, but is less accurate on arrival.
69 [xcomputed, fail, err, iter, res]=conjgrad(Asparse,b,"bicgstab");
70 if norm(xcomputed-xexpected)>10000**3*%eps then pause,end
71 if fail<>0 then pause,end
72 if iter<>8 then pause,end
73 if err > 1000**3*%eps then pause,end