Add the <-- JVM NOT MANDATORY --> TAG
[scilab.git] / scilab / modules / sparse / tests / unit_tests / pcg.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2008 - INRIA - Michael Baudin
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7
8 // <-- JVM NOT MANDATORY -->
9
10 // Test with 2 input arguments and all output arguments
11 A=[10,1;1,10];
12 b=[11;11];
13 [xcomputed, flag, err, iter, res]=pcg(A,b);
14 xexpected=[1;1];
15 if norm(xcomputed-xexpected)>%eps then pause,end
16 if flag<>0 then pause,end
17 if err>%eps then pause,end
18 if iter>2 then pause,end
19 // Test with 3 input arguments and all output arguments
20 A=[10,1;1,10];
21 b=[11;11];
22 tol = 100*%eps;
23 [xcomputed, flag, err, iter, res]=pcg(A,b,tol);
24 xexpected=[1;1];
25 if norm(xcomputed-xexpected)>%eps then pause,end
26 if (err > tol) then pause,end
27 // Test with 4 input arguments and all output arguments
28 A=[10,1;1,10];
29 b=[11;11];
30 tol = 100*%eps;
31 maxit = 10;
32 [xcomputed, flag, err, iter, res]=pcg(A,b,tol,maxit);
33 xexpected=[1;1];
34 if norm(xcomputed-xexpected)>%eps then pause,end
35 // Test with 5 input arguments and all output arguments
36 A=[10,1;1,10];
37 b=[11;11];
38 tol = 100*%eps;
39 maxit = 10;
40 M1=[1,0;0,1];
41 [xcomputed, flag, err, iter, res]=pcg(A,b,tol,maxit,M1);
42 xexpected=[1;1];
43 if norm(xcomputed-xexpected)>%eps then pause,end
44 // Test with 6 input arguments and all output arguments
45 A=[10,1;1,10];
46 b=[11;11];
47 tol = 100*%eps;
48 maxit = 10;
49 M1=[1,0;0,1];
50 M2=[1,0;0,1];
51 [xcomputed, flag, err, iter, res]=pcg(A,b,tol,maxit,M1,M2);
52 xexpected=[1;1];
53 if norm(xcomputed-xexpected)>%eps then pause,end
54 // Test with 7 input arguments and all output arguments
55 A=[10,1;1,10];
56 b=[11;11];
57 tol = 100*%eps;
58 maxit = 10;
59 M1=[1,0;0,1];
60 M2=[1,0;0,1];
61 x0=[1;1];
62 [xcomputed, flag, err, iter, res]=pcg(A,b,tol,maxit,M1,M2,x0);
63 xexpected=[1;1];
64 if norm(xcomputed-xexpected)>%eps then pause,end
65 // Test with non-positionnal input parameters so that 0 iteration can happen
66 A=[100,1;1,10];
67 b=[101;11];
68 [xcomputed, flag, err, iter, res]=pcg(A,b,maxIter=0);
69 if (iter <> 0) then pause,end
70 // Test with non-positionnal input parameters so that 1 iteration is sufficient
71 A=[100,1;1,10];
72 b=[101;11];
73 [xcomputed, flag, err, iter, res]=pcg(A,b,tol=0.1);
74 if (iter <> 1) then pause,end
75 // Test with non-positionnal input parameters so that pre-conditionning is necessary
76 A=[100,1;1,0.0101]
77 b=[101;11];
78 M=A**-1
79 [xcomputed, flag, err, iter, res]=pcg(A,b,%M=M,maxIter=3,tol=%eps);
80 if (flag <> 0) then pause,end
81 // Test with non-positionnal input parameters so that good initialization generates 0 iterations
82 A=[100,1;1,10.]
83 b=[101;11];
84 [xcomputed, flag, err, iter, res]=pcg(A,b,x0=[1.;1.]);
85 if (iter<>0) then pause,end
86 // Test the special case where b=0
87 A=[100,1;1,10.]
88 b=[0;0];
89 [xcomputed, flag, err, iter, res]=pcg(A,b);
90 xexpected=[0;0];
91 if norm(xcomputed-xexpected)>%eps then pause,end
92 if (flag<>0) then pause,end
93 if (err>%eps) then pause,end
94 if (iter<>0) then pause,end
95