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 | // make sure matrices work as members of a class |
---|
18 | |
---|
19 | class TestClass |
---|
20 | { |
---|
21 | Matrix A; |
---|
22 | Matrix B; |
---|
23 | public: |
---|
24 | TestClass(); |
---|
25 | ReturnMatrix Sum(); |
---|
26 | }; |
---|
27 | |
---|
28 | TestClass::TestClass() : A(2,3) |
---|
29 | { |
---|
30 | B.ReSize(2,3); |
---|
31 | A << 1 << 4 |
---|
32 | << 4 << 1 |
---|
33 | << 2 << 9; |
---|
34 | B << 8 << 5 |
---|
35 | << 5 << 8 |
---|
36 | << 7 << 0; |
---|
37 | } |
---|
38 | |
---|
39 | ReturnMatrix TestClass::Sum() { return Matrix(A + B).ForReturn(); } |
---|
40 | |
---|
41 | |
---|
42 | |
---|
43 | void trymatb() |
---|
44 | { |
---|
45 | // cout << "\nEleventh test of Matrix package\n"; |
---|
46 | Tracer et("Eleventh test of Matrix package"); |
---|
47 | Tracer::PrintTrace(); |
---|
48 | int i; int j; |
---|
49 | RowVector RV; RV.ReSize(10); |
---|
50 | { |
---|
51 | Tracer et1("Stage 1"); |
---|
52 | for (i=1;i<=10;i++) RV(i)=i*i-3; |
---|
53 | Matrix X(1,1); X(1,1) = .25; |
---|
54 | Print(RowVector(X.i() * RV - RV / .25)); |
---|
55 | // Print(RowVector(X.i() * Matrix(RV) - RV / .25)); // != zortech, AT&T |
---|
56 | Print(RowVector(X.i() * RV - RV / .25)); |
---|
57 | } |
---|
58 | LowerTriangularMatrix L(5); UpperTriangularMatrix U(5); |
---|
59 | for (i=1; i<=5; i++) for (j=1; j<=i; j++) |
---|
60 | { L(i,j) = i*i + j -2.0; U(j,i) = i*i*j+3; } |
---|
61 | DiagonalMatrix D(5); |
---|
62 | for (i=1; i<=5; i++) D(i,i) = i*i + i + 2; |
---|
63 | Matrix M1 = -L; Matrix M2 = L-U; Matrix M3 = U*3; Matrix M4 = U-L; |
---|
64 | Matrix M5 = M1 - D; M1 = D * (-3) - M3; |
---|
65 | { |
---|
66 | Tracer et1("Stage 2"); |
---|
67 | Print(Matrix((M2-M4*2)+M5*3-M1)); |
---|
68 | M1 = L.t(); Print(Matrix(M1.t()-L)); |
---|
69 | M1 = U.t(); Print(Matrix(M1.t()-U)); |
---|
70 | } |
---|
71 | { |
---|
72 | Tracer et1("Stage 3"); |
---|
73 | SymmetricMatrix S(5); |
---|
74 | for (i=1; i<=5; i++) for (j=1; j<=i; j++) S(i,j) = i*j+i-j+5; |
---|
75 | M2 = S.i() * M4; M1 = S; M3=M1*M2-M4; Clean(M3,0.00000001); Print(M3); |
---|
76 | SymmetricMatrix T(5); |
---|
77 | for (i=1; i<=5; i++) for (j=1; j<=i; j++) T(i,j) = i*i*j*j+i-j+5-i*j; |
---|
78 | M1 = S.i() * T; M1 = S * M1; M1 = M1-T; Clean(M1,0.00000001); Print(M1); |
---|
79 | ColumnVector CV(5); for (i=1; i<=5; i++) CV(i) = i*i*i+10; |
---|
80 | M1 = CV * RV; |
---|
81 | } |
---|
82 | { |
---|
83 | Tracer et1("Stage 4"); |
---|
84 | M4.ReSize(5,10); |
---|
85 | for (i=1; i<=5; i++) for (j=1; j<=10; j++) M4(i,j) = (i*i*i+10)*(j*j-3); |
---|
86 | Print(Matrix(M1-M4)); |
---|
87 | M1 = L.t(); M2 = U.t(); M3 = L+U; Print(Matrix(M1-M3.t()+M2)); |
---|
88 | } |
---|
89 | // UpperTriangularMatrix U2((const UpperTriangularMatrix&)U); // != zortech |
---|
90 | UpperTriangularMatrix U2((UpperTriangularMatrix&)U); |
---|
91 | { |
---|
92 | Tracer et1("Stage 5"); |
---|
93 | Print(Matrix(U2-U)); |
---|
94 | M2.ReSize(10,10); |
---|
95 | for (i=1; i<=10; i++) for (j=1; j<=10; j++) M2(i,j) = (i*i*i+10)*(j*j-3); |
---|
96 | D << M2; L << M2; U << M2; // check copy into |
---|
97 | Print( Matrix( (D+M2)-(L+U) ) ); |
---|
98 | } |
---|
99 | { |
---|
100 | Tracer et1("Stage 6"); |
---|
101 | M1.ReSize(6,10); |
---|
102 | for (i=1; i<=6; i++) for (j=1; j<=10; j++) M1(i,j) = 100*i + j; |
---|
103 | M2 = M1.SubMatrix(3,5,4,7); M3.ReSize(3,4); |
---|
104 | for (i=3; i<=5; i++) for (j=4; j<=7; j++) M3(i-2,j-3) = 100*i + j; |
---|
105 | Print(Matrix(M2-M3)); |
---|
106 | } |
---|
107 | int a1,a2,a3,a4; |
---|
108 | { |
---|
109 | Tracer et1("Stage 7"); |
---|
110 | int a1,a2,a3,a4; |
---|
111 | a1=4; a2=9; a3=4; a4=7; |
---|
112 | U.ReSize(10); |
---|
113 | for (i=1; i<=10; i++) for (j=i; j<=10; j++) U(i,j) = 100*i + j; |
---|
114 | M2 = U.SubMatrix(a1,a2,a3,a4); |
---|
115 | M3.ReSize(a2-a1+1,a4-a3+1); M3=0.0; |
---|
116 | for (i=a1; i<=a2; i++) for (j=(i>a3) ? i : a3; j<=a4; j++) |
---|
117 | M3(i-a1+1,j-a3+1) = 100*i + j; |
---|
118 | Print(Matrix(M2-M3)); |
---|
119 | } |
---|
120 | { |
---|
121 | Tracer et1("Stage 8"); |
---|
122 | a1=3; a2=9; a3=2; a4=7; |
---|
123 | U.ReSize(10); |
---|
124 | for (i=1; i<=10; i++) for (j=i; j<=10; j++) U(i,j) = 100*i + j; |
---|
125 | M2 = U.SubMatrix(a1,a2,a3,a4); |
---|
126 | M3.ReSize(a2-a1+1,a4-a3+1); M3=0.0; |
---|
127 | for (i=a1; i<=a2; i++) for (j=(i>a3) ? i : a3; j<=a4; j++) |
---|
128 | M3(i-a1+1,j-a3+1) = 100*i + j; |
---|
129 | Print(Matrix(M2-M3)); |
---|
130 | } |
---|
131 | { |
---|
132 | Tracer et1("Stage 9"); |
---|
133 | a1=4; a2=6; a3=2; a4=5; |
---|
134 | U.ReSize(10); |
---|
135 | for (i=1; i<=10; i++) for (j=i; j<=10; j++) U(i,j) = 100*i + j; |
---|
136 | M2 = U.SubMatrix(a1,a2,a3,a4); |
---|
137 | M3.ReSize(a2-a1+1,a4-a3+1); M3=0.0; |
---|
138 | for (i=a1; i<=a2; i++) for (j=(i>a3) ? i : a3; j<=a4; j++) |
---|
139 | M3(i-a1+1,j-a3+1) = 100*i + j; |
---|
140 | Print(Matrix(M2-M3)); |
---|
141 | } |
---|
142 | |
---|
143 | { |
---|
144 | Tracer et1("Stage 10"); |
---|
145 | TestClass TC; |
---|
146 | Matrix M = TC.Sum() - 9; |
---|
147 | Print(M); |
---|
148 | } |
---|
149 | |
---|
150 | |
---|
151 | // cout << "\nEnd of eleventh test\n"; |
---|
152 | } |
---|