1 | |
---|
2 | //#define WANT_STREAM |
---|
3 | |
---|
4 | #include "include.h" |
---|
5 | |
---|
6 | #include "newmat.h" |
---|
7 | |
---|
8 | #include "tmt.h" |
---|
9 | |
---|
10 | #ifdef use_namespace |
---|
11 | using namespace NEWMAT; |
---|
12 | #endif |
---|
13 | |
---|
14 | |
---|
15 | // **************************** test program ****************************** |
---|
16 | |
---|
17 | |
---|
18 | |
---|
19 | ReturnMatrix Returner0(const GenericMatrix& GM) |
---|
20 | { Matrix M = GM; M.Release(); return M; } |
---|
21 | |
---|
22 | ReturnMatrix Returner1(const GenericMatrix& GM) |
---|
23 | { Matrix M = GM+1; M.Release(); return M; } |
---|
24 | |
---|
25 | ReturnMatrix Returner2(const GenericMatrix& GM) |
---|
26 | { UpperBandMatrix M = GM*2; M.Release(); return M; } |
---|
27 | |
---|
28 | ReturnMatrix Returner3(const GenericMatrix& GM) |
---|
29 | { LowerBandMatrix M = GM*3; M.Release(); return M; } |
---|
30 | |
---|
31 | ReturnMatrix Returner4(const GenericMatrix& GM) |
---|
32 | { SymmetricMatrix M = GM+4; M.Release(); return M; } |
---|
33 | |
---|
34 | ReturnMatrix Returner5(const GenericMatrix& GM) |
---|
35 | { SymmetricBandMatrix M = GM*5; M.Release(); return M; } |
---|
36 | |
---|
37 | ReturnMatrix Returner6(const GenericMatrix& GM) |
---|
38 | { BandMatrix M = GM*6; M.Release(); return M; } |
---|
39 | |
---|
40 | ReturnMatrix Returner7(const GenericMatrix& GM) |
---|
41 | { DiagonalMatrix M = GM*7; M.Release(); return M; } |
---|
42 | |
---|
43 | void trymat5() |
---|
44 | { |
---|
45 | // cout << "\nFifth test of Matrix package\n"; |
---|
46 | Tracer et("Fifth test of Matrix package"); |
---|
47 | Tracer::PrintTrace(); |
---|
48 | |
---|
49 | int i,j; |
---|
50 | |
---|
51 | Matrix A(5,6); |
---|
52 | for (i=1;i<=5;i++) for (j=1;j<=6;j++) A(i,j)=1+i*j+i*i+j*j; |
---|
53 | ColumnVector CV(6); |
---|
54 | for (i=1;i<=6;i++) CV(i)=i*i+3; |
---|
55 | ColumnVector CV2(5); for (i=1;i<=5;i++) CV2(i)=1.0; |
---|
56 | ColumnVector CV1=CV; |
---|
57 | |
---|
58 | { |
---|
59 | CV=A*CV; |
---|
60 | RowVector RV=CV.t(); // RowVector RV; RV=CV.t(); |
---|
61 | RV=RV-1.0; |
---|
62 | CV=(RV*A).t()+A.t()*CV2; CV1=(A.t()*A)*CV1 - CV; |
---|
63 | Print(CV1); |
---|
64 | } |
---|
65 | |
---|
66 | CV1.ReSize(6); |
---|
67 | CV2.ReSize(6); |
---|
68 | CV.ReSize(6); |
---|
69 | for (i=1;i<=6;i++) { CV1(i)=i*3+1; CV2(i)=10-i; CV(i)=11+i*2; } |
---|
70 | ColumnVector CX=CV2-CV; { CX=CX+CV1; Print(CX); } |
---|
71 | Print(ColumnVector(CV1+CV2-CV)); |
---|
72 | RowVector RV=CV.t(); RowVector RV1=CV1.t(); |
---|
73 | RowVector R=RV-RV1; Print(RowVector(R-CV2.t())); |
---|
74 | |
---|
75 | // test loading of list |
---|
76 | |
---|
77 | RV.ReSize(10); |
---|
78 | for (i=1;i<=10;i++) RV(i) = i*i; |
---|
79 | RV1.ReSize(10); |
---|
80 | RV1 << 1 << 4 << 9 << 16 << 25 << 36 << 49 << 64 << 81 << 100; // << 121; |
---|
81 | Print(RowVector(RV-RV1)); |
---|
82 | |
---|
83 | et.ReName("Fifth test of Matrix package - almost at end"); |
---|
84 | |
---|
85 | Matrix X(2,3); |
---|
86 | X << 11 << 12 << 13 |
---|
87 | << 21 << 22 << 23; |
---|
88 | |
---|
89 | Matrix Y = X.t(); // check simple transpose |
---|
90 | |
---|
91 | X(1,1) -= 11; X(1,2) -= 12; X(1,3) -= 13; |
---|
92 | X(2,1) -= 21; X(2,2) -= 22; X(2,3) -= 23; |
---|
93 | Print(X); |
---|
94 | |
---|
95 | Y(1,1) -= 11; Y(2,1) -= 12; Y(3,1) -= 13; |
---|
96 | Y(1,2) -= 21; Y(2,2) -= 22; Y(3,2) -= 23; |
---|
97 | Print(Y); |
---|
98 | |
---|
99 | et.ReName("Fifth test of Matrix package - at end"); |
---|
100 | |
---|
101 | RV = Returner1(RV)-1; Print(RowVector(RV-RV1)); |
---|
102 | CV1 = Returner1(RV.t())-1; Print(ColumnVector(RV.t()-CV1)); |
---|
103 | #ifndef DONT_DO_NRIC |
---|
104 | nricMatrix AA = A; |
---|
105 | X = Returner1(AA)-A-1; Print(X); |
---|
106 | #endif |
---|
107 | UpperTriangularMatrix UT(31); |
---|
108 | for (i=1; i<=31; i++) for (j=i; j<=31; j++) UT(i,j) = i+j+(i-j)*(i-2*j); |
---|
109 | UpperBandMatrix UB(31,5); UB.Inject(UT); |
---|
110 | LowerTriangularMatrix LT = UT.t(); |
---|
111 | LowerBandMatrix LB(31,5); LB.Inject(LT); |
---|
112 | A = Returner0(UB)-LB.t(); Print(A); |
---|
113 | A = Returner2(UB).t()-LB*2; Print(A); |
---|
114 | A = Returner3(LB).t()-UB*3; Print(A); |
---|
115 | SymmetricMatrix SM; SM << (UT+LT); |
---|
116 | A = Returner4(SM)-UT-LT-4; Print(A); |
---|
117 | SymmetricBandMatrix SB(31,5); SB.Inject(SM); |
---|
118 | A = Returner5(SB)/5-UB-LB; Print(A); |
---|
119 | BandMatrix B = UB+LB*LB; A = LB; |
---|
120 | A = Returner6(B)/6 - UB - A*A; Print(A); |
---|
121 | DiagonalMatrix D; D << UT; |
---|
122 | D << (Returner7(D)/7 - UT); Print(D); |
---|
123 | |
---|
124 | // cout << "\nEnd of fifth test\n"; |
---|
125 | } |
---|