Fix sparse tests
[scilab.git] / scilab / modules / sparse / tests / unit_tests / conjgrad_function.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 // Case where A is given as a function computing the right-hand side
14 b = [154.
15 87.
16 186.
17 208.
18 144.
19 168.
20 158.
21 135.
22 178.
23 231.];
24 function y=Afunction(x)
25     mymatrix=[ 94  0   0   0    0   28  0   0   32  0
26     0   59  13  5    0   0   0   10  0   0
27     0   13  72  34   2   0   0   0   0   65
28     0   5   34  114  0   0   0   0   0   55
29     0   0   2   0    70  0   28  32  12  0
30     28  0   0   0    0   87  20  0   33  0
31     0   0   0   0    28  20  71  39  0   0
32     0   10  0   0    32  0   39  46  8   0
33     32  0   0   0    12  33  0   8   82  11
34     0   0   65  55   0   0   0   0   11  100];
35     y=mymatrix*x
36 endfunction
37 // With the default 10 iterations, the algorithm performs well
38 [xcomputed, fail, err, iter, res]=conjgrad(Afunction,b,"pcg");
39 xexpected=ones(10,1);
40 if norm(xcomputed-xexpected)>11**3*%eps then bugmes();quit;end
41 if fail<>0 then bugmes();quit;end
42 if iter<>10 then bugmes();quit;end
43 if err > 10**3*%eps then bugmes();quit;end
44 //------------------------------------------------------------------
45 // CGS
46 // CGS needs 11 iterations to converge
47 [xcomputed, fail, err, iter, res]=conjgrad(Afunction,b,"cgs",maxIter=11);
48 if norm(xcomputed-xexpected)>100**3*%eps then bugmes();quit;end
49 if fail<>0 then bugmes();quit;end
50 if iter<>11 then bugmes();quit;end
51 if err > 100**3*%eps then bugmes();quit;end
52 //------------------------------------------------------------------
53 // BICG
54 // With the default 10 iterations, the algorithm performs well
55 [xcomputed, fail, err, iter, res]=conjgrad(Afunction,b,"bicg");
56 if norm(xcomputed-xexpected)>11**3*%eps then bugmes();quit;end
57 if fail<>0 then bugmes();quit;end
58 if iter<>10 then bugmes();quit;end
59 if err > 10**3*%eps then bugmes();quit;end
60 //------------------------------------------------------------------
61 // BICGSTAB
62 // BICGSTAB only needs 8 iterations to converge to the required tol, but is less accurate on arrival.
63 [xcomputed, fail, err, iter, res]=conjgrad(Afunction,b,"bicgstab");
64 xexpected=ones(10,1);
65 if norm(xcomputed-xexpected)>10000**3*%eps then bugmes();quit;end
66 if fail<>0 then bugmes();quit;end
67 if iter<>8 then bugmes();quit;end
68 if err > 1000**3*%eps then bugmes();quit;end