1 | LIB "tst.lib"; |
---|
2 | tst_init(); |
---|
3 | |
---|
4 | |
---|
5 | |
---|
6 | proc verifyLUSolveResult(A, RHS, solutionData) |
---|
7 | { |
---|
8 | if (solutionData[1]) |
---|
9 | { |
---|
10 | def solutionPoint = solutionData[2]; |
---|
11 | def kernelA = solutionData[3]; |
---|
12 | ASSUME(0, A*solutionPoint == RHS ); |
---|
13 | ASSUME(0, rank(kernelA) + rank(A) == ncols(A) ); |
---|
14 | ASSUME(0, A*kernelA==0 ); |
---|
15 | } |
---|
16 | } |
---|
17 | |
---|
18 | // test lusolve() for corner case A = 0 |
---|
19 | |
---|
20 | ring r= 0,z,dp; |
---|
21 | |
---|
22 | matrix A; |
---|
23 | |
---|
24 | def LD = ludecomp(A); |
---|
25 | def P,L,U = LD[1],LD[2],LD[3]; |
---|
26 | |
---|
27 | ASSUME(0, (P*A)==(L*U) ); |
---|
28 | def RHS = matrix(0); |
---|
29 | |
---|
30 | |
---|
31 | list solutionData = lusolve(P,L,U,RHS ); |
---|
32 | |
---|
33 | ASSUME(0, solutionData[1]==1 ); |
---|
34 | |
---|
35 | verifyLUSolveResult(A, RHS, solutionData); |
---|
36 | |
---|
37 | |
---|
38 | // test lusolve() for the case that the first columns in U are zero. |
---|
39 | |
---|
40 | matrix B[1][2] = 0,1; |
---|
41 | LD = ludecomp(B); |
---|
42 | P,L,U = LD[1],LD[2],LD[3]; |
---|
43 | |
---|
44 | RHS = matrix(10); |
---|
45 | |
---|
46 | |
---|
47 | solutionData = lusolve( P,L,U, RHS ); |
---|
48 | |
---|
49 | ASSUME(0, solutionData[1]==1 ); |
---|
50 | |
---|
51 | verifyLUSolveResult(B, RHS, solutionData); |
---|
52 | |
---|
53 | |
---|
54 | |
---|
55 | tst_status(1); $ |
---|
56 | |
---|